diff --git a/rainloop/app/data/EMPTY b/rainloop/app/data/EMPTY index f88cf52e6efcffefb7e86ab407b9a3088c550dc3..cd99d386a8ddd0011ad38f1be24706c40fac3ba8 100644 --- a/rainloop/app/data/EMPTY +++ b/rainloop/app/data/EMPTY @@ -1 +1 @@ -1.13.0 \ No newline at end of file +1.14.0 \ No newline at end of file diff --git a/rainloop/app/data/VERSION b/rainloop/app/data/VERSION index 6f165bc1b06167bf9ab68b9e7456cb597e092f09..cd99d386a8ddd0011ad38f1be24706c40fac3ba8 100644 --- a/rainloop/app/data/VERSION +++ b/rainloop/app/data/VERSION @@ -1 +1 @@ -1.12.1 \ No newline at end of file +1.14.0 \ No newline at end of file diff --git a/rainloop/app/index.php b/rainloop/app/index.php index 45ea01b37dce7e93b8e182c80c10627dac896f83..91faf80f758f2a86ec8c5c949faea4209f66c3f6 100644 --- a/rainloop/app/index.php +++ b/rainloop/app/index.php @@ -2,7 +2,7 @@ if (!defined('APP_VERSION')) { - define('APP_VERSION', '1.13.0'); + define('APP_VERSION', '1.14.0'); define('APP_VERSION_TYPE', 'community'); define('APP_INDEX_ROOT_FILE', __FILE__); define('APP_INDEX_ROOT_PATH', str_replace('\\', '/', rtrim(dirname(__FILE__), '\\/').'/')); diff --git a/rainloop/app/rainloop/v/1.13.0/static/js/admin.js b/rainloop/app/rainloop/v/1.13.0/static/js/admin.js deleted file mode 100644 index a0cc24de2e8c731f96deb72dc7d162e43ed8b3ea..0000000000000000000000000000000000000000 --- a/rainloop/app/rainloop/v/1.13.0/static/js/admin.js +++ /dev/null @@ -1,22346 +0,0 @@ -/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL v3 */ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "rainloop/v/0.0.0/static/js/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 531); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/*!*****************************!*\ - !*** ./dev/Common/Enums.js ***! - \*****************************/ -/*! exports provided: FileType, StorageResultType, Focused, State, StateType, Capa, KeyState, FolderType, ServerFolderType, LoginSignMeTypeAsString, LoginSignMeType, ComposeType, UploadErrorCode, SetSystemFoldersNotification, ClientSideKeyName, EventKeyCode, MessageSetAction, MessageSelectAction, DesktopNotification, MessagePriority, EditorDefaultType, ServerSecure, SearchDateType, SaveSettingsStep, Layout, FilterConditionField, FilterConditionType, FiltersAction, FilterRulesType, SignedVerifyStatus, ContactPropertyType, Magics, Ports, Notification */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FileType", function() { return FileType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StorageResultType", function() { return StorageResultType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Focused", function() { return Focused; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "State", function() { return State; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StateType", function() { return StateType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Capa", function() { return Capa; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyState", function() { return KeyState; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FolderType", function() { return FolderType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ServerFolderType", function() { return ServerFolderType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoginSignMeTypeAsString", function() { return LoginSignMeTypeAsString; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoginSignMeType", function() { return LoginSignMeType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComposeType", function() { return ComposeType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UploadErrorCode", function() { return UploadErrorCode; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SetSystemFoldersNotification", function() { return SetSystemFoldersNotification; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ClientSideKeyName", function() { return ClientSideKeyName; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventKeyCode", function() { return EventKeyCode; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessageSetAction", function() { return MessageSetAction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessageSelectAction", function() { return MessageSelectAction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DesktopNotification", function() { return DesktopNotification; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessagePriority", function() { return MessagePriority; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EditorDefaultType", function() { return EditorDefaultType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ServerSecure", function() { return ServerSecure; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SearchDateType", function() { return SearchDateType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SaveSettingsStep", function() { return SaveSettingsStep; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Layout", function() { return Layout; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilterConditionField", function() { return FilterConditionField; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilterConditionType", function() { return FilterConditionType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FiltersAction", function() { return FiltersAction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilterRulesType", function() { return FilterRulesType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SignedVerifyStatus", function() { return SignedVerifyStatus; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContactPropertyType", function() { return ContactPropertyType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Magics", function() { return Magics; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Ports", function() { return Ports; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return Notification; }); -/* eslint quote-props: 0 */ - -/** - * @enum {string} - */ -var FileType = { - 'Unknown': 'unknown', - 'Text': 'text', - 'Html': 'html', - 'Code': 'code', - 'Eml': 'eml', - 'WordText': 'word-text', - 'Pdf': 'pdf', - 'Image': 'image', - 'Audio': 'audio', - 'Video': 'video', - 'Sheet': 'sheet', - 'Presentation': 'presentation', - 'Certificate': 'certificate', - 'CertificateBin': 'certificate-bin', - 'Archive': 'archive' -}; -/** - * @enum {string} - */ - -var StorageResultType = { - 'Success': 'success', - 'Abort': 'abort', - 'Error': 'error', - 'Unload': 'unload' -}; -/** - * @enum {string} - */ - -var Focused = { - 'None': 'none', - 'MessageList': 'message-list', - 'MessageView': 'message-view', - 'FolderList': 'folder-list' -}; -/** - * @enum {number} - */ - -var State = { - 'Empty': 10, - 'Login': 20, - 'Auth': 30 -}; -/** - * @enum {number} - */ - -var StateType = { - 'Webmail': 0, - 'Admin': 1 -}; -/** - * @enum {string} - */ - -var Capa = { - 'TwoFactor': 'TWO_FACTOR', - 'TwoFactorForce': 'TWO_FACTOR_FORCE', - 'OpenPGP': 'OPEN_PGP', - 'Prefetch': 'PREFETCH', - 'Gravatar': 'GRAVATAR', - 'Folders': 'FOLDERS', - 'Composer': 'COMPOSER', - 'Contacts': 'CONTACTS', - 'Reload': 'RELOAD', - 'Search': 'SEARCH', - 'SearchAdv': 'SEARCH_ADV', - 'MessageActions': 'MESSAGE_ACTIONS', - 'MessageListActions': 'MESSAGELIST_ACTIONS', - 'AttachmentsActions': 'ATTACHMENTS_ACTIONS', - 'DangerousActions': 'DANGEROUS_ACTIONS', - 'Settings': 'SETTINGS', - 'Help': 'HELP', - 'Themes': 'THEMES', - 'UserBackground': 'USER_BACKGROUND', - 'Sieve': 'SIEVE', - 'Filters': 'FILTERS', - 'AttachmentThumbnails': 'ATTACHMENT_THUMBNAILS', - 'Templates': 'TEMPLATES', - 'AutoLogout': 'AUTOLOGOUT', - 'AdditionalAccounts': 'ADDITIONAL_ACCOUNTS', - 'Identities': 'IDENTITIES' -}; -/** - * @enum {string} - */ - -var KeyState = { - 'All': 'all', - 'None': 'none', - 'ContactList': 'contact-list', - 'MessageList': 'message-list', - 'FolderList': 'folder-list', - 'MessageView': 'message-view', - 'Compose': 'compose', - 'Settings': 'settings', - 'Menu': 'menu', - 'PopupComposeOpenPGP': 'compose-open-pgp', - 'PopupMessageOpenPGP': 'message-open-pgp', - 'PopupViewOpenPGP': 'view-open-pgp', - 'PopupKeyboardShortcutsHelp': 'popup-keyboard-shortcuts-help', - 'PopupAsk': 'popup-ask' -}; -/** - * @enum {number} - */ - -var FolderType = { - 'Inbox': 10, - 'SentItems': 11, - 'Draft': 12, - 'Trash': 13, - 'Spam': 14, - 'Archive': 15, - 'NotSpam': 80, - 'User': 99 -}; -/** - * @enum {number} - */ - -var ServerFolderType = { - 'USER': 0, - 'INBOX': 1, - 'SENT': 2, - 'DRAFTS': 3, - 'JUNK': 4, - 'TRASH': 5, - 'IMPORTANT': 10, - 'FLAGGED': 11, - 'ALL': 12 -}; -/** - * @enum {string} - */ - -var LoginSignMeTypeAsString = { - 'DefaultOff': 'defaultoff', - 'DefaultOn': 'defaulton', - 'Unused': 'unused' -}; -/** - * @enum {number} - */ - -var LoginSignMeType = { - 'DefaultOff': 0, - 'DefaultOn': 1, - 'Unused': 2 -}; -/** - * @enum {string} - */ - -var ComposeType = { - 'Empty': 'empty', - 'Reply': 'reply', - 'ReplyAll': 'replyall', - 'Forward': 'forward', - 'ForwardAsAttachment': 'forward-as-attachment', - 'Draft': 'draft', - 'EditAsNew': 'editasnew' -}; -/** - * @enum {number} - */ - -var UploadErrorCode = { - 'Normal': 0, - 'FileIsTooBig': 1, - 'FilePartiallyUploaded': 2, - 'FileNoUploaded': 3, - 'MissingTempFolder': 4, - 'FileOnSaveingError': 5, - 'FileType': 98, - 'Unknown': 99 -}; -/** - * @enum {number} - */ - -var SetSystemFoldersNotification = { - 'None': 0, - 'Sent': 1, - 'Draft': 2, - 'Spam': 3, - 'Trash': 4, - 'Archive': 5 -}; -/** - * @enum {number} - */ - -var ClientSideKeyName = { - 'FoldersLashHash': 0, - 'MessagesInboxLastHash': 1, - 'MailBoxListSize': 2, - 'ExpandedFolders': 3, - 'FolderListSize': 4, - 'MessageListSize': 5, - 'LastReplyAction': 6, - 'LastSignMe': 7, - 'ComposeLastIdentityID': 8, - 'MessageHeaderFullInfo': 9, - 'MessageAttachmnetControls': 10 -}; -/** - * @enum {number} - */ - -var EventKeyCode = { - 'Backspace': 8, - 'Tab': 9, - 'Enter': 13, - 'Esc': 27, - 'PageUp': 33, - 'PageDown': 34, - 'Left': 37, - 'Right': 39, - 'Up': 38, - 'Down': 40, - 'End': 35, - 'Home': 36, - 'Space': 32, - 'Insert': 45, - 'Delete': 46, - 'A': 65, - 'S': 83 -}; -/** - * @enum {number} - */ - -var MessageSetAction = { - 'SetSeen': 0, - 'UnsetSeen': 1, - 'SetFlag': 2, - 'UnsetFlag': 3 -}; -/** - * @enum {number} - */ - -var MessageSelectAction = { - 'All': 0, - 'None': 1, - 'Invert': 2, - 'Unseen': 3, - 'Seen': 4, - 'Flagged': 5, - 'Unflagged': 6 -}; -/** - * @enum {number} - */ - -var DesktopNotification = { - 'Allowed': 0, - 'NotAllowed': 1, - 'Denied': 2, - 'NotSupported': 9 -}; -/** - * @enum {number} - */ - -var MessagePriority = { - 'Low': 5, - 'Normal': 3, - 'High': 1 -}; -/** - * @enum {string} - */ - -var EditorDefaultType = { - 'Html': 'Html', - 'Plain': 'Plain', - 'HtmlForced': 'HtmlForced', - 'PlainForced': 'PlainForced' -}; -/** - * @enum {number} - */ - -var ServerSecure = { - 'None': 0, - 'SSL': 1, - 'TLS': 2 -}; -/** - * @enum {number} - */ - -var SearchDateType = { - 'All': -1, - 'Days3': 3, - 'Days7': 7, - 'Month': 30 -}; -/** - * @enum {number} - */ - -var SaveSettingsStep = { - 'Animate': -2, - 'Idle': -1, - 'TrueResult': 1, - 'FalseResult': 0 -}; -/** - * @enum {number} - */ - -var Layout = { - 'NoPreview': 0, - 'SidePreview': 1, - 'BottomPreview': 2 -}; -/** - * @enum {string} - */ - -var FilterConditionField = { - 'From': 'From', - 'Recipient': 'Recipient', - 'Subject': 'Subject', - 'Header': 'Header', - 'Size': 'Size' -}; -/** - * @enum {string} - */ - -var FilterConditionType = { - 'Contains': 'Contains', - 'NotContains': 'NotContains', - 'EqualTo': 'EqualTo', - 'NotEqualTo': 'NotEqualTo', - 'Regex': 'Regex', - 'Over': 'Over', - 'Under': 'Under' -}; -/** - * @enum {string} - */ - -var FiltersAction = { - 'None': 'None', - 'MoveTo': 'MoveTo', - 'Discard': 'Discard', - 'Vacation': 'Vacation', - 'Reject': 'Reject', - 'Forward': 'Forward' -}; -/** - * @enum {string} - */ - -var FilterRulesType = { - 'All': 'All', - 'Any': 'Any' -}; -/** - * @enum {number} - */ - -var SignedVerifyStatus = { - 'UnknownPublicKeys': -4, - 'UnknownPrivateKey': -3, - 'Unverified': -2, - 'Error': -1, - 'None': 0, - 'Success': 1 -}; -/** - * @enum {number} - */ - -var ContactPropertyType = { - 'Unknown': 0, - 'FullName': 10, - 'FirstName': 15, - 'LastName': 16, - 'MiddleName': 16, - 'Nick': 18, - 'NamePrefix': 20, - 'NameSuffix': 21, - 'Email': 30, - 'Phone': 31, - 'Web': 32, - 'Birthday': 40, - 'Facebook': 90, - 'Skype': 91, - 'GitHub': 92, - 'Note': 110, - 'Custom': 250 -}; -/** - * @enum {number} - */ - -var Magics = { - 'EventWhichMouseMiddle': 3, - 'ifvisibleIdle10s': 10, - 'BitLength2048': 2048, - 'BitLength1024': 1024, - 'Size350px': 350, - 'Size50px': 50, - 'Size20px': 20, - 'Size1px': 1, - 'Time30mInMin': 30, - 'Time60m': 60000 * 60, - 'Time30m': 60000 * 30, - 'Time20m': 60000 * 20, - 'Time15m': 60000 * 15, - 'Time10m': 60000 * 10, - 'Time5m': 60000 * 5, - 'Time3m': 60000 * 3, - 'Time2m': 60000 * 2, - 'Time1m': 60000, - 'Time30s': 30000, - 'Time10s': 10000, - 'Time7s': 7000, - 'Time5s': 5000, - 'Time3s': 3000, - 'Time1s': 1000, - 'Time500ms': 500, - 'Time350ms': 350, - 'Time250ms': 250, - 'Time200ms': 200, - 'Time100ms': 100, - 'Time50ms': 50, - 'Time20ms': 20, - 'Time10ms': 10, - 'Time1ms': 1 -}; -/** - * @enum {number} - */ - -var Ports = { - 'Imap': 143, - 'ImapSsl': 993, - 'Smtp': 25, - 'SmtpSsl': 465, - 'SmtpStartTls': 587 -}; -/** - * @enum {number} - */ - -var Notification = { - 'InvalidToken': 101, - 'AuthError': 102, - 'AccessError': 103, - 'ConnectionError': 104, - 'CaptchaError': 105, - 'SocialFacebookLoginAccessDisable': 106, - 'SocialTwitterLoginAccessDisable': 107, - 'SocialGoogleLoginAccessDisable': 108, - 'DomainNotAllowed': 109, - 'AccountNotAllowed': 110, - 'AccountTwoFactorAuthRequired': 120, - 'AccountTwoFactorAuthError': 121, - 'CouldNotSaveNewPassword': 130, - 'CurrentPasswordIncorrect': 131, - 'NewPasswordShort': 132, - 'NewPasswordWeak': 133, - 'NewPasswordForbidden': 134, - 'ContactsSyncError': 140, - 'CantGetMessageList': 201, - 'CantGetMessage': 202, - 'CantDeleteMessage': 203, - 'CantMoveMessage': 204, - 'CantCopyMessage': 205, - 'CantSaveMessage': 301, - 'CantSendMessage': 302, - 'InvalidRecipients': 303, - 'CantSaveFilters': 351, - 'CantGetFilters': 352, - 'FiltersAreNotCorrect': 355, - 'CantCreateFolder': 400, - 'CantRenameFolder': 401, - 'CantDeleteFolder': 402, - 'CantSubscribeFolder': 403, - 'CantUnsubscribeFolder': 404, - 'CantDeleteNonEmptyFolder': 405, - 'CantSaveSettings': 501, - 'CantSavePluginSettings': 502, - 'DomainAlreadyExists': 601, - 'CantInstallPackage': 701, - 'CantDeletePackage': 702, - 'InvalidPluginPackage': 703, - 'UnsupportedPluginPackage': 704, - 'LicensingServerIsUnavailable': 710, - 'LicensingExpired': 711, - 'LicensingBanned': 712, - 'DemoSendMessageError': 750, - 'DemoAccountError': 751, - 'AccountAlreadyExists': 801, - 'AccountDoesNotExist': 802, - 'MailServerError': 901, - 'ClientViewError': 902, - 'InvalidInputArgument': 903, - 'AjaxFalse': 950, - 'AjaxAbort': 951, - 'AjaxParse': 952, - 'AjaxTimeout': 953, - 'UnknownNotification': 999, - 'UnknownError': 999 -}; - -/***/ }), -/* 1 */ -/*!****************************!*\ - !*** ./dev/External/ko.js ***! - \****************************/ -/*! exports provided: default */ -/*! exports used: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.date.to-string */ 75); -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 55); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.parse-int */ 144); -/* harmony import */ var core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 94); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.link */ 169); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 137); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var Opentip__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Opentip */ 207); -/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! pikaday */ 208); -/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(pikaday__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Enums */ 0); - - - - - - - - - - - - - - - - - -var ko = window__WEBPACK_IMPORTED_MODULE_10___default.a.ko, - $win = $__WEBPACK_IMPORTED_MODULE_12___default()(window__WEBPACK_IMPORTED_MODULE_10___default.a), - fDisposalTooltipHelper = function fDisposalTooltipHelper(element) { - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - if (element && element.__opentip) { - element.__opentip.deactivate(); - } - }); -}; - -ko.bindingHandlers.updateWidth = { - init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - fValue = fValueAccessor(), - fInit = function fInit() { - fValue($el.width()); - window__WEBPACK_IMPORTED_MODULE_10___default.a.setTimeout(function () { - fValue($el.width()); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time500ms); - }; - - $win.on('resize', fInit); - fInit(); - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $win.off('resize', fInit); - }); - } -}; -ko.bindingHandlers.editor = { - init: function init(element, fValueAccessor) { - var editor = null; - - var fValue = fValueAccessor(), - HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 204).default, - fUpdateEditorValue = function fUpdateEditorValue() { - if (fValue && fValue.__editor) { - fValue.__editor.setHtmlOrPlain(fValue()); - } - }, - fUpdateKoValue = function fUpdateKoValue() { - if (fValue && fValue.__editor) { - fValue(fValue.__editor.getDataWithHtmlMark()); - } - }, - fOnReady = function fOnReady() { - fValue.__editor = editor; - fUpdateEditorValue(); - }; - - if (ko.isObservable(fValue) && HtmlEditor) { - editor = new HtmlEditor(element, fUpdateKoValue, fOnReady, fUpdateKoValue); - fValue.__fetchEditorValue = fUpdateKoValue; - fValue.subscribe(fUpdateEditorValue); // ko.utils.domNodeDisposal.addDisposeCallback(element, () => { - // }); - } - } -}; -ko.bindingHandlers.json = { - init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).text(window__WEBPACK_IMPORTED_MODULE_10___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); - }, - update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).text(window__WEBPACK_IMPORTED_MODULE_10___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); - } -}; -ko.bindingHandlers.scrollerShadows = { - init: function init(element) { - var limit = 8, - $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - cont = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '[data-scroller-shadows-content]')[0] || null, - fFunc = ___WEBPACK_IMPORTED_MODULE_11___default.a.throttle(function () { - $el.toggleClass('scroller-shadow-top', limit < cont.scrollTop).toggleClass('scroller-shadow-bottom', cont.scrollTop + limit < cont.scrollHeight - cont.clientHeight); - }, 100); - - if (cont) { - $__WEBPACK_IMPORTED_MODULE_12___default()(cont).on('scroll resize', fFunc); - $win.on('resize', fFunc); - ko.utils.domNodeDisposal.addDisposeCallback(cont, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(cont).off(); - $win.off('resize', fFunc); - }); - } - } -}; -ko.bindingHandlers.pikaday = { - init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext) { - ko.bindingHandlers.textInput.init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext); - - if (pikaday__WEBPACK_IMPORTED_MODULE_14___default.a) { - element.__pikaday = new pikaday__WEBPACK_IMPORTED_MODULE_14___default.a({ - field: element - }); - } - } -}; -ko.bindingHandlers.visibleAnimated = { - init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); - $el.addClass('rl-animated-inited'); - - if (ko.unwrap(fValueAccessor())) { - $el.show(); - } else { - $el.hide(); - } - }, - update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); - - if (ko.unwrap(fValueAccessor())) { - $el.addClass('rl-animated-hidden').show(); - - ___WEBPACK_IMPORTED_MODULE_11___default.a.delay(function () { - $el.removeClass('rl-animated-hidden'); - }, 10); - } else { - $el.hide().removeClass('rl-animated-hidden'); - } - } -}; -ko.bindingHandlers.tooltip = { - init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - fValue = fValueAccessor(), - isMobile = 'on' === ($el.data('tooltip-mobile') || 'off'), - isI18N = 'on' === ($el.data('tooltip-i18n') || 'on'), - Globals = __webpack_require__(/*! Common/Globals */ 6); - - if (!Globals.bMobileDevice || isMobile) { - var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_11___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); - element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"](element, { - 'style': 'rainloopTip', - 'element': element, - 'tipJoint': $el.data('tooltip-join') || 'bottom' - }); - Globals.dropdownVisibility.subscribe(function (v) { - if (v) { - element.__opentip.hide(); - } - }); - - if ('' === sValue) { - element.__opentip.hide(); - - element.__opentip.deactivate(); - - element.__opentip.setContent(''); - } else { - element.__opentip.activate(); - } - - if (isI18N) { - var Translator = __webpack_require__(/*! Common/Translator */ 9); - - element.__opentip.setContent(Translator.i18n(sValue)); - - Translator.trigger.subscribe(function () { - element.__opentip.setContent(Translator.i18n(sValue)); - }); - Globals.dropdownVisibility.subscribe(function () { - if (element && element.__opentip) { - element.__opentip.setContent(Translator.i18n(sValue)); - } - }); - } else { - element.__opentip.setContent(sValue); - } - - $win.on('rl.tooltips.diactivate', function () { - element.__opentip.hide(); - - element.__opentip.deactivate(); - }); - $win.on('rl.tooltips.activate', function () { - element.__opentip.activate(); - }); - } - }, - update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - fValue = fValueAccessor(), - isMobile = 'on' === ($el.data('tooltip-mobile') || 'off'), - isI18N = 'on' === ($el.data('tooltip-i18n') || 'on'), - Globals = __webpack_require__(/*! Common/Globals */ 6); - - if ((!Globals.bMobileDevice || isMobile) && element.__opentip) { - var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_11___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); - - if (sValue) { - element.__opentip.setContent(isI18N ? __webpack_require__(/*! Common/Translator */ 9).i18n(sValue) : sValue); - - element.__opentip.activate(); - } else { - element.__opentip.hide(); - - element.__opentip.deactivate(); - - element.__opentip.setContent(''); - } - } - } -}; -ko.bindingHandlers.tooltipErrorTip = { - init: function init(element) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); - element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"](element, { - style: 'rainloopErrorTip', - hideOn: 'mouseout click', - element: element, - tipJoint: $el.data('tooltip-join') || 'top' - }); - - element.__opentip.deactivate(); - - $__WEBPACK_IMPORTED_MODULE_12___default()(window__WEBPACK_IMPORTED_MODULE_10___default.a.document).on('click', function () { - if (element && element.__opentip) { - element.__opentip.hide(); - } - }); - fDisposalTooltipHelper(element); - }, - update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - fValue = fValueAccessor(), - value = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_11___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue), - openTips = element.__opentip; - - if (openTips) { - if ('' === value) { - openTips.hide(); - openTips.deactivate(); - openTips.setContent(''); - } else { - ___WEBPACK_IMPORTED_MODULE_11___default.a.delay(function () { - if ($el.is(':visible')) { - openTips.setContent(value); - openTips.activate(); - openTips.show(); - } else { - openTips.hide(); - openTips.deactivate(); - openTips.setContent(''); - } - }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time100ms); - } - } - } -}; -ko.bindingHandlers.registrateBootstrapDropdown = { - init: function init(element) { - var Globals = __webpack_require__(/*! Common/Globals */ 6); - - if (Globals && Globals.data.aBootstrapDropdowns) { - Globals.data.aBootstrapDropdowns.push($__WEBPACK_IMPORTED_MODULE_12___default()(element)); - $__WEBPACK_IMPORTED_MODULE_12___default()(element).click(function () { - __webpack_require__(/*! Common/Utils */ 2).detectDropdownVisibility(); - }); // ko.utils.domNodeDisposal.addDisposeCallback(element, () => { - // }); - } - } -}; -ko.bindingHandlers.openDropdownTrigger = { - update: function update(element, fValueAccessor) { - if (ko.unwrap(fValueAccessor())) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); - - if (!$el.hasClass('open')) { - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.dropdown-toggle').dropdown('toggle'); - } - - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.dropdown-toggle').focus(); - - __webpack_require__(/*! Common/Utils */ 2).detectDropdownVisibility(); - - fValueAccessor()(false); - } - } -}; -ko.bindingHandlers.dropdownCloser = { - init: function init(element) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).closest('.dropdown').on('click', '.e-item', function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).dropdown('toggle'); - }); - } -}; -ko.bindingHandlers.popover = { - init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).popover(ko.unwrap(fValueAccessor())); - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).popover('destroy'); - }); - } -}; -ko.bindingHandlers.csstext = {}; - -ko.bindingHandlers.csstext.init = ko.bindingHandlers.csstext.update = function (element, fValueAccessor) { - if (element && element.styleSheet && 'undefined' !== typeof element.styleSheet.cssText) { - element.styleSheet.cssText = ko.unwrap(fValueAccessor()); - } else { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).text(ko.unwrap(fValueAccessor())); - } -}; - -ko.bindingHandlers.resizecrop = { - init: function init(element) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).addClass('resizecrop').resizecrop({ - 'width': '100', - 'height': '100', - 'wrapperCSS': { - 'border-radius': '10px' - } - }); - }, - update: function update(element, fValueAccessor) { - fValueAccessor()(); - $__WEBPACK_IMPORTED_MODULE_12___default()(element).resizecrop({ - 'width': '100', - 'height': '100' - }); - } -}; -ko.bindingHandlers.onKeyDown = { - init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).on('keydown.koOnKeyDown', function (event) { - if (event) { - return fValueAccessor().call(viewModel, event); - } - - return true; - }); - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('keydown.koOnKeyDown'); - }); - } -}; -ko.bindingHandlers.onEnter = { - init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).on('keypress.koOnEnter', function (event) { - if (event && 13 === window__WEBPACK_IMPORTED_MODULE_10___default.a.parseInt(event.keyCode, 10)) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).trigger('change'); - fValueAccessor().call(viewModel); - } - }); - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('keypress.koOnEnter'); - }); - } -}; -ko.bindingHandlers.onSpace = { - init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).on('keyup.koOnSpace', function (event) { - if (event && 32 === window__WEBPACK_IMPORTED_MODULE_10___default.a.parseInt(event.keyCode, 10)) { - fValueAccessor().call(viewModel, event); - } - }); - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('keyup.koOnSpace'); - }); - } -}; -ko.bindingHandlers.onTab = { - init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).on('keydown.koOnTab', function (event) { - if (event && 9 === window__WEBPACK_IMPORTED_MODULE_10___default.a.parseInt(event.keyCode, 10)) { - return fValueAccessor().call(viewModel, !!event.shiftKey); - } - - return true; - }); - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('keydown.koOnTab'); - }); - } -}; -ko.bindingHandlers.onEsc = { - init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).on('keyup.koOnEsc', function (event) { - if (event && 27 === window__WEBPACK_IMPORTED_MODULE_10___default.a.parseInt(event.keyCode, 10)) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).trigger('change'); - fValueAccessor().call(viewModel); - } - }); - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('keyup.koOnEsc'); - }); - } -}; -ko.bindingHandlers.clickOnTrue = { - update: function update(element, fValueAccessor) { - if (ko.unwrap(fValueAccessor())) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).click(); - } - } -}; -ko.bindingHandlers.modal = { - init: function init(element, fValueAccessor) { - var _context; - - var Globals = __webpack_require__(/*! Common/Globals */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 2); - - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context = $__WEBPACK_IMPORTED_MODULE_12___default()(element).toggleClass('fade', !Globals.bMobileDevice).modal({ - 'keyboard': false, - 'show': ko.unwrap(fValueAccessor()) - }).on('shown.koModal', Utils.windowResizeCallback)).call(_context, '.close').on('click.koModal', function () { - fValueAccessor()(false); - }); - - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - var _context2; - - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('shown.koModal')).call(_context2, '.close').off('click.koModal'); - }); - }, - update: function update(element, fValueAccessor) { - var Globals = __webpack_require__(/*! Common/Globals */ 6); - - $__WEBPACK_IMPORTED_MODULE_12___default()(element).modal(ko.unwrap(fValueAccessor()) ? 'show' : 'hide'); - - if (Globals.$html.hasClass('rl-anim')) { - Globals.$html.addClass('rl-modal-animation'); - - ___WEBPACK_IMPORTED_MODULE_11___default.a.delay(function () { - Globals.$html.removeClass('rl-modal-animation'); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time500ms); - } - } -}; -ko.bindingHandlers.moment = { - init: function init(element, fValueAccessor) { - __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_12___default()(element).addClass('moment').data('moment-time', ko.unwrap(fValueAccessor()))); - }, - update: function update(element, fValueAccessor) { - __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_12___default()(element).data('moment-time', ko.unwrap(fValueAccessor()))); - } -}; -ko.bindingHandlers.i18nInit = { - init: function init(element) { - __webpack_require__(/*! Common/Translator */ 9).i18nToNodes(element); - } -}; -ko.bindingHandlers.translatorInit = { - init: function init(element) { - __webpack_require__(/*! Common/Translator */ 9).i18nToNodes(element); - } -}; -ko.bindingHandlers.i18nUpdate = { - update: function update(element, fValueAccessor) { - ko.unwrap(fValueAccessor()); - - __webpack_require__(/*! Common/Translator */ 9).i18nToNodes(element); - } -}; -ko.bindingHandlers.link = { - update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).attr('href', ko.unwrap(fValueAccessor())); - } -}; -ko.bindingHandlers.title = { - update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).attr('title', ko.unwrap(fValueAccessor())); - } -}; -ko.bindingHandlers.textF = { - init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).text(ko.unwrap(fValueAccessor())); - } -}; -ko.bindingHandlers.initDom = { - init: function init(element, fValueAccessor) { - fValueAccessor()(element); - } -}; -ko.bindingHandlers.initFixedTrigger = { - init: function init(element, fValueAccessor) { - var values = ko.unwrap(fValueAccessor()), - $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - top = values[1] || 0; - var $container = $__WEBPACK_IMPORTED_MODULE_12___default()(values[0] || null); - $container = $container[0] ? $container : null; - - if ($container) { - $win.resize(function () { - var offset = $container ? $container.offset() : null; - - if (offset && offset.top) { - $el.css('top', offset.top + top); - } - }); - } - } -}; -ko.bindingHandlers.initResizeTrigger = { - init: function init(element, fValueAccessor) { - var values = ko.unwrap(fValueAccessor()); - $__WEBPACK_IMPORTED_MODULE_12___default()(element).css({ - 'height': values[1], - 'min-height': values[1] - }); - }, - update: function update(oElement, fValueAccessor) { - var Utils = __webpack_require__(/*! Common/Utils */ 2), - Globals = __webpack_require__(/*! Common/Globals */ 6), - values = ko.unwrap(fValueAccessor()); - - var value = Utils.pInt(values[1]), - size = 0, - offset = $__WEBPACK_IMPORTED_MODULE_12___default()(oElement).offset().top; - - if (0 < offset) { - offset += Utils.pInt(values[2]); - size = Globals.$win.height() - offset; - - if (value < size) { - value = size; - } - - $__WEBPACK_IMPORTED_MODULE_12___default()(oElement).css({ - 'height': value, - 'min-height': value - }); - } - } -}; -ko.bindingHandlers.appendDom = { - update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).hide().empty().append(ko.unwrap(fValueAccessor())).show(); - } -}; -ko.bindingHandlers.draggable = { - init: function init(element, fValueAccessor, fAllBindingsAccessor) { - var Globals = __webpack_require__(/*! Common/Globals */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 2); - - if (!Globals.bMobileDevice) { - var triggerZone = 100, - scrollSpeed = 3, - fAllValueFunc = fAllBindingsAccessor(), - droppableSelector = fAllValueFunc && fAllValueFunc.droppableSelector ? fAllValueFunc.droppableSelector : '', - conf = { - distance: 20, - handle: '.dragHandle', - cursorAt: { - top: 22, - left: 3 - }, - refreshPositions: true, - scroll: true, - drag: null, - stop: null, - helper: null - }; - - if (droppableSelector) { - conf.drag = function (event) { - $__WEBPACK_IMPORTED_MODULE_12___default()(droppableSelector).each(function () { - var $this = $__WEBPACK_IMPORTED_MODULE_12___default()(this), - // eslint-disable-line no-invalid-this - offset = $this.offset(), - bottomPos = offset.top + $this.height(); - window__WEBPACK_IMPORTED_MODULE_10___default.a.clearInterval($this.data('timerScroll')); - $this.data('timerScroll', false); - - if (event.pageX >= offset.left && event.pageX <= offset.left + $this.width()) { - if (event.pageY >= bottomPos - triggerZone && event.pageY <= bottomPos) { - var moveUp = function moveUp() { - $this.scrollTop($this.scrollTop() + scrollSpeed); - Utils.windowResize(); - }; - - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_10___default.a.setInterval(moveUp, 10)); - moveUp(); - } - - if (event.pageY >= offset.top && event.pageY <= offset.top + triggerZone) { - var moveDown = function moveDown() { - $this.scrollTop($this.scrollTop() - scrollSpeed); - Utils.windowResize(); - }; - - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_10___default.a.setInterval(moveDown, 10)); - moveDown(); - } - } - }); - }; - - conf.stop = function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(droppableSelector).each(function () { - var $this = $__WEBPACK_IMPORTED_MODULE_12___default()(this); // eslint-disable-line no-invalid-this - - window__WEBPACK_IMPORTED_MODULE_10___default.a.clearInterval($this.data('timerScroll')); - $this.data('timerScroll', false); - }); - }; - } - - conf.helper = function (event) { - return fValueAccessor()(event && event.target ? ko.dataFor(event.target) : null); - }; - - $__WEBPACK_IMPORTED_MODULE_12___default()(element).draggable(conf).on('mousedown.koDraggable', function () { - Utils.removeInFocus(); - }); - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('mousedown.koDraggable').draggable('destroy'); - }); - } - } -}; -ko.bindingHandlers.droppable = { - init: function init(element, fValueAccessor, fAllBindingsAccessor) { - var Globals = __webpack_require__(/*! Common/Globals */ 6); - - if (!Globals.bMobileDevice) { - var fValueFunc = fValueAccessor(), - fAllValueFunc = fAllBindingsAccessor(), - fOverCallback = fAllValueFunc && fAllValueFunc.droppableOver ? fAllValueFunc.droppableOver : null, - fOutCallback = fAllValueFunc && fAllValueFunc.droppableOut ? fAllValueFunc.droppableOut : null, - conf = { - tolerance: 'pointer', - hoverClass: 'droppableHover', - drop: null, - over: null, - out: null - }; - - if (fValueFunc) { - conf.drop = function (event, ui) { - fValueFunc(event, ui); - }; - - if (fOverCallback) { - conf.over = function (event, ui) { - fOverCallback(event, ui); - }; - } - - if (fOutCallback) { - conf.out = function (event, ui) { - fOutCallback(event, ui); - }; - } - - $__WEBPACK_IMPORTED_MODULE_12___default()(element).droppable(conf); - ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).droppable('destroy'); - }); - } - } - } -}; -ko.bindingHandlers.nano = { - init: function init(element) { - var Globals = __webpack_require__(/*! Common/Globals */ 6), - Settings = __webpack_require__(/*! Storage/Settings */ 5); - - if (!Globals.bDisableNanoScroll && !Settings.appSettingsGet('useNativeScrollbars')) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).addClass('nano').nanoScroller({ - iOSNativeScrolling: false, - preventPageScrolling: true - }); - } - } -}; -ko.bindingHandlers.saveTrigger = { - init: function init(element) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); - $el.data('save-trigger-type', $el.is('input[type=text],input[type=email],input[type=password],select,textarea') ? 'input' : 'custom'); - - if ('custom' === $el.data('save-trigger-type')) { - $el.append(' ' + '' + '' + '').addClass('settings-saved-trigger'); - } else { - $el.addClass('settings-saved-trigger-input'); - } - }, - update: function update(element, fValueAccessor) { - var _context3, _context4, _context5, _context6; - - var value = ko.unwrap(fValueAccessor()), - $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); - - if ('custom' === $el.data('save-trigger-type')) { - switch (value.toString()) { - case '1': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.animated,.error').hide().removeClass('visible').end()).call(_context3, '.success').show().addClass('visible'); - - break; - - case '0': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.animated,.success').hide().removeClass('visible').end()).call(_context4, '.error').show().addClass('visible'); - - break; - - case '-2': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible'); - - break; - - default: - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.animated').hide().end()).call(_context6, '.error,.success').removeClass('visible'); - - break; - } - } else { - switch (value.toString()) { - case '1': - $el.addClass('success').removeClass('error'); - break; - - case '0': - $el.addClass('error').removeClass('success'); - break; - - case '-2': - break; - - default: - $el.removeClass('error success'); - break; - } - } - } -}; -ko.bindingHandlers.emailsTags = { - init: function init(element, fValueAccessor, fAllBindingsAccessor) { - var Utils = __webpack_require__(/*! Common/Utils */ 2), - EmailModel = __webpack_require__(/*! Model/Email */ 81).default, - $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - fValue = fValueAccessor(), - fAllBindings = fAllBindingsAccessor(), - fAutoCompleteSource = fAllBindings.autoCompleteSource || null, - inputDelimiters = [',', ';', '\n'], - fFocusCallback = function fFocusCallback(value) { - if (fValue && fValue.focused) { - fValue.focused(!!value); - } - }; - - $el.inputosaurus({ - parseOnBlur: true, - allowDragAndDrop: true, - focusCallback: fFocusCallback, - inputDelimiters: inputDelimiters, - autoCompleteSource: fAutoCompleteSource, - splitHook: function splitHook(value) { - var v = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_8___default()(Utils).call(Utils, value); - - if (v && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_7___default()(inputDelimiters).call(inputDelimiters, v.substr(-1))) { - return EmailModel.splitEmailLine(value); - } - - return null; - }, - parseHook: function parseHook(input) { - return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_11___default.a).call(___WEBPACK_IMPORTED_MODULE_11___default.a, ___WEBPACK_IMPORTED_MODULE_11___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_11___default.a).call(___WEBPACK_IMPORTED_MODULE_11___default.a, input, function (inputValue) { - var values = EmailModel.parseEmailLine(inputValue); - return values.length ? values : inputValue; - })), function (item) { - return ___WEBPACK_IMPORTED_MODULE_11___default.a.isObject(item) ? [item.toLine(false), item] : [item, null]; - }); - }, - change: function change(event) { - $el.data('EmailsTagsValue', event.target.value); - fValue(event.target.value); - } - }); - - if (fValue && fValue.focused && fValue.focused.subscribe) { - fValue.focused.subscribe(function (value) { - $el.inputosaurus(value ? 'focus' : 'blur'); - }); - } - }, - update: function update(element, fValueAccessor) { - var $oEl = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - fValue = fValueAccessor(), - value = ko.unwrap(fValue); - - if ($oEl.data('EmailsTagsValue') !== value) { - $oEl.val(value); - $oEl.data('EmailsTagsValue', value); - $oEl.inputosaurus('refresh'); - } - } -}; -ko.bindingHandlers.command = { - init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext) { - var jqElement = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - command = fValueAccessor(); - - if (!command || !command.isCommand) { - throw new Error('Value should be a command'); - } - - if (!command.enabled) { - command.enabled = ko.observable(true); - } - - if (!command.canExecute) { - var __realCanExecute = command.__realCanExecute; - - if (___WEBPACK_IMPORTED_MODULE_11___default.a.isFunction(__realCanExecute)) { - command.canExecute = ko.computed(function () { - return command.enabled() && __realCanExecute.call(viewModel, viewModel); - }); - } else { - command.canExecute = ko.computed(function () { - return command.enabled() && !!__realCanExecute; - }); - } - } - - jqElement.addClass('command'); - ko.bindingHandlers[jqElement.is('form') ? 'submit' : 'click'].init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext); - }, - update: function update(element, fValueAccessor) { - var jqElement = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - command = fValueAccessor(); - var result = command.enabled(); - jqElement.toggleClass('command-not-enabled', !result); - - if (result) { - result = command.canExecute(); - jqElement.toggleClass('command-can-not-be-execute', !result); - } - - jqElement.toggleClass('command-disabled disable disabled', !result).toggleClass('no-disabled', !!result); - - if (jqElement.is('input') || jqElement.is('button')) { - jqElement.prop('disabled', !result); - } - } -}; // extenders - -ko.extenders.trimmer = function (target) { - var Utils = __webpack_require__(/*! Common/Utils */ 2), - result = ko.computed({ - read: target, - write: function write(newValue) { - target(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_8___default()(Utils).call(Utils, newValue.toString())); - } - }); - - result(target()); - return result; -}; - -ko.extenders.posInterer = function (target, defaultVal) { - var Utils = __webpack_require__(/*! Common/Utils */ 2), - result = ko.computed({ - read: target, - write: function write(newValue) { - var val = Utils.pInt(newValue.toString(), defaultVal); - - if (0 >= val) { - val = defaultVal; - } - - if (val === target() && '' + val !== '' + newValue) { - target(val + 1); - } - - target(val); - } - }); - - result(target()); - return result; -}; - -ko.extenders.limitedList = function (target, limitedList) { - var Utils = __webpack_require__(/*! Common/Utils */ 2), - result = ko.computed({ - read: target, - write: function write(newValue) { - var currentValue = ko.unwrap(target), - list = ko.unwrap(limitedList); - - if (Utils.isNonEmptyArray(list)) { - if (-1 < Utils.inArray(newValue, list)) { - target(newValue); - } else if (-1 < Utils.inArray(currentValue, list)) { - target(currentValue + ' '); - target(currentValue); - } else { - target(list[0] + ' '); - target(list[0]); - } - } else { - target(''); - } - } - }).extend({ - notify: 'always' - }); - - result(target()); - - if (!result.valueHasMutated) { - result.valueHasMutated = function () { - target.valueHasMutated(); - }; - } - - return result; -}; - -ko.extenders.reversible = function (target) { - var value = target(); - - target.commit = function () { - value = target(); - }; - - target.reverse = function () { - target(value); - }; - - target.commitedValue = function () { - return value; - }; - - return target; -}; - -ko.extenders.toggleSubscribe = function (target, options) { - target.subscribe(options[1], options[0], 'beforeChange'); - target.subscribe(options[2], options[0]); - return target; -}; - -ko.extenders.toggleSubscribeProperty = function (target, options) { - var prop = options[1]; - - if (prop) { - target.subscribe(function (prev) { - if (prev && prev[prop]) { - prev[prop](false); - } - }, options[0], 'beforeChange'); - target.subscribe(function (next) { - if (next && next[prop]) { - next[prop](true); - } - }, options[0]); - } - - return target; -}; - -ko.extenders.falseTimeout = function (target, option) { - target.iFalseTimeoutTimeout = 0; - target.subscribe(function (value) { - if (value) { - window__WEBPACK_IMPORTED_MODULE_10___default.a.clearTimeout(target.iFalseTimeoutTimeout); - target.iFalseTimeoutTimeout = window__WEBPACK_IMPORTED_MODULE_10___default.a.setTimeout(function () { - target(false); - target.iFalseTimeoutTimeout = 0; - }, __webpack_require__(/*! Common/Utils */ 2).pInt(option)); - } - }); - return target; -}; - -ko.extenders.specialThrottle = function (target, option) { - target.iSpecialThrottleTimeoutValue = __webpack_require__(/*! Common/Utils */ 2).pInt(option); - - if (0 < target.iSpecialThrottleTimeoutValue) { - target.iSpecialThrottleTimeout = 0; - target.valueForRead = ko.observable(!!target()).extend({ - throttle: 10 - }); - return ko.computed({ - read: target.valueForRead, - write: function write(bValue) { - if (bValue) { - target.valueForRead(bValue); - } else { - if (target.valueForRead()) { - window__WEBPACK_IMPORTED_MODULE_10___default.a.clearTimeout(target.iSpecialThrottleTimeout); - target.iSpecialThrottleTimeout = window__WEBPACK_IMPORTED_MODULE_10___default.a.setTimeout(function () { - target.valueForRead(false); - target.iSpecialThrottleTimeout = 0; - }, target.iSpecialThrottleTimeoutValue); - } else { - target.valueForRead(bValue); - } - } - } - }); - } - - return target; -}; - -ko.extenders.idleTrigger = function (target) { - target.trigger = ko.observable(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["SaveSettingsStep"].Idle); - return target; -}; // functions - - -ko.observable.fn.idleTrigger = function () { - return this.extend({ - 'idleTrigger': true - }); -}; - -ko.observable.fn.validateNone = function () { - this.hasError = ko.observable(false); - return this; -}; - -ko.observable.fn.validateEmail = function () { - var _this = this; - - this.hasError = ko.observable(false); - this.subscribe(function (value) { - _this.hasError('' !== value && !/^[^@\s]+@[^@\s]+$/.test(value)); - }); - this.valueHasMutated(); - return this; -}; - -ko.observable.fn.validateSimpleEmail = function () { - var _this2 = this; - - this.hasError = ko.observable(false); - this.subscribe(function (value) { - _this2.hasError('' !== value && !/^.+@.+$/.test(value)); - }); - this.valueHasMutated(); - return this; -}; - -ko.observable.fn.deleteAccessHelper = function () { - this.extend({ - falseTimeout: 3000 - }).extend({ - toggleSubscribeProperty: [this, 'deleteAccess'] - }); - return this; -}; - -ko.observable.fn.validateFunc = function (fFunc) { - var _this3 = this; - - this.hasFuncError = ko.observable(false); - - if (___WEBPACK_IMPORTED_MODULE_11___default.a.isFunction(fFunc)) { - this.subscribe(function (value) { - _this3.hasFuncError(!fFunc(value)); - }); - this.valueHasMutated(); - } - - return this; -}; - -/* harmony default export */ __webpack_exports__["a"] = (ko); - -/***/ }), -/* 2 */ -/*!*****************************!*\ - !*** ./dev/Common/Utils.js ***! - \*****************************/ -/*! exports provided: trim, inArray, isArray, isObject, isFunc, isUnd, isNull, has, bind, noop, noopTrue, noopFalse, jassl, silentTryCatch, isNormal, isPosNumeric, pInt, pString, pBool, boolToAjax, isNonEmptyArray, encodeURIComponent, decodeURIComponent, decodeURI, encodeURI, simpleQueryParser, fakeMd5, encodeHtml, splitPlainText, timeOutAction, timeOutActionSecond, deModule, inFocus, removeInFocus, removeSelection, replySubjectAdd, roundNumber, friendlySize, log, delegateRun, killCtrlACtrlS, createCommandLegacy, convertThemeName, quoteName, microtime, timestamp, convertLangName, draggablePlace, defautOptionsAfterRender, clearBqSwitcher, previewMessage, settingsSaveHelperFunction, settingsSaveHelperSimpleFunction, settingsSaveHelperSubscribeFunction, findEmailAndLinks, htmlToPlain, plainToHtml, folderListOptionsBuilder, selectElement, detectDropdownVisibility, triggerAutocompleteInputChange, getConfigurationFromScriptTag, disposeOne, disposeObject, delegateRunOnDestroy, appendStyles, changeTheme, computedPagenatorHelper, getFileExtension, mimeContentType, isTransparent, getRealHeight, resizeAndCrop, mailToHelper, domReady, windowResize, windowResizeCallback */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trim", function() { return trim; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inArray", function() { return inArray; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArray", function() { return isArray; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObject", function() { return isObject; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFunc", function() { return isFunc; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isUnd", function() { return isUnd; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNull", function() { return isNull; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "has", function() { return has; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bind", function() { return bind; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return noop; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noopTrue", function() { return noopTrue; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noopFalse", function() { return noopFalse; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "silentTryCatch", function() { return silentTryCatch; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNormal", function() { return isNormal; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPosNumeric", function() { return isPosNumeric; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pInt", function() { return pInt; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pString", function() { return pString; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pBool", function() { return pBool; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "boolToAjax", function() { return boolToAjax; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNonEmptyArray", function() { return isNonEmptyArray; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "encodeURIComponent", function() { return encodeURIComponent; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decodeURIComponent", function() { return decodeURIComponent; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decodeURI", function() { return decodeURI; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "encodeURI", function() { return encodeURI; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "simpleQueryParser", function() { return simpleQueryParser; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fakeMd5", function() { return fakeMd5; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "encodeHtml", function() { return encodeHtml; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "splitPlainText", function() { return splitPlainText; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeOutAction", function() { return timeOutAction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeOutActionSecond", function() { return timeOutActionSecond; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deModule", function() { return deModule; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inFocus", function() { return inFocus; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeInFocus", function() { return removeInFocus; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeSelection", function() { return removeSelection; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "replySubjectAdd", function() { return replySubjectAdd; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "roundNumber", function() { return roundNumber; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "friendlySize", function() { return friendlySize; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "log", function() { return log; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delegateRun", function() { return delegateRun; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "killCtrlACtrlS", function() { return killCtrlACtrlS; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createCommandLegacy", function() { return createCommandLegacy; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertThemeName", function() { return convertThemeName; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "quoteName", function() { return quoteName; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "microtime", function() { return microtime; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return timestamp; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertLangName", function() { return convertLangName; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draggablePlace", function() { return draggablePlace; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defautOptionsAfterRender", function() { return defautOptionsAfterRender; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearBqSwitcher", function() { return clearBqSwitcher; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "previewMessage", function() { return previewMessage; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsSaveHelperFunction", function() { return settingsSaveHelperFunction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsSaveHelperSimpleFunction", function() { return settingsSaveHelperSimpleFunction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsSaveHelperSubscribeFunction", function() { return settingsSaveHelperSubscribeFunction; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findEmailAndLinks", function() { return findEmailAndLinks; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "htmlToPlain", function() { return htmlToPlain; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "plainToHtml", function() { return plainToHtml; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "folderListOptionsBuilder", function() { return folderListOptionsBuilder; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectElement", function() { return selectElement; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "detectDropdownVisibility", function() { return detectDropdownVisibility; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "triggerAutocompleteInputChange", function() { return triggerAutocompleteInputChange; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfigurationFromScriptTag", function() { return getConfigurationFromScriptTag; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "disposeOne", function() { return disposeOne; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "disposeObject", function() { return disposeObject; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delegateRunOnDestroy", function() { return delegateRunOnDestroy; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "appendStyles", function() { return appendStyles; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "changeTheme", function() { return changeTheme; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computedPagenatorHelper", function() { return computedPagenatorHelper; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFileExtension", function() { return getFileExtension; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mimeContentType", function() { return mimeContentType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTransparent", function() { return isTransparent; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRealHeight", function() { return getRealHeight; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resizeAndCrop", function() { return resizeAndCrop; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mailToHelper", function() { return mailToHelper; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "domReady", function() { return domReady; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResize", function() { return windowResize; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResizeCallback", function() { return windowResizeCallback; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 76); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.date.to-string */ 75); -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.function.name */ 52); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 55); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.parse-int */ 144); -/* harmony import */ var core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 48); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 94); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.match */ 193); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.string.split */ 168); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.string.link */ 169); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 205); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 114); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 157); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/last-index-of */ 206); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_17__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_18__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 137); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_19__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_20__); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_21__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_22__); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Autolinker */ 209); -/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(Autolinker__WEBPACK_IMPORTED_MODULE_24__); -/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Globals */ 6); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Common/Mime */ 210); -/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Common/Jassl */ 107); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "jassl", function() { return Common_Jassl__WEBPACK_IMPORTED_MODULE_28__["a"]; }); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -var trim = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_19___default()($__WEBPACK_IMPORTED_MODULE_21___default.a); - -var inArray = $__WEBPACK_IMPORTED_MODULE_21___default.a.inArray; -var isArray = ___WEBPACK_IMPORTED_MODULE_22___default.a.isArray; -var isObject = ___WEBPACK_IMPORTED_MODULE_22___default.a.isObject; -var isFunc = ___WEBPACK_IMPORTED_MODULE_22___default.a.isFunction; -var isUnd = ___WEBPACK_IMPORTED_MODULE_22___default.a.isUndefined; -var isNull = ___WEBPACK_IMPORTED_MODULE_22___default.a.isNull; -var has = ___WEBPACK_IMPORTED_MODULE_22___default.a.has; - -var bind = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_18___default()(___WEBPACK_IMPORTED_MODULE_22___default.a); - -var noop = function noop() {}; // eslint-disable-line no-empty-function - - -var noopTrue = function noopTrue() { - return true; -}; - -var noopFalse = function noopFalse() { - return false; -}; - - -/** - * @param {Function} func - */ - -function silentTryCatch(func) { - try { - func(); - } catch (e) {} // eslint-disable-line no-empty - -} -/** - * @param {*} value - * @returns {boolean} - */ - -function isNormal(value) { - return !isUnd(value) && !isNull(value); -} -/** - * @param {(string|number)} value - * @param {boolean=} includeZero = true - * @returns {boolean} - */ - -function isPosNumeric(value, includeZero) { - if (includeZero === void 0) { - includeZero = true; - } - - return !isNormal(value) ? false : includeZero ? /^[0-9]*$/.test(value.toString()) : /^[1-9]+[0-9]*$/.test(value.toString()); -} -/** - * @param {*} value - * @param {number=} defaultValur = 0 - * @returns {number} - */ - -function pInt(value, defaultValur) { - if (defaultValur === void 0) { - defaultValur = 0; - } - - var result = isNormal(value) && '' !== value ? window__WEBPACK_IMPORTED_MODULE_20___default.a.parseInt(value, 10) : defaultValur; - return window__WEBPACK_IMPORTED_MODULE_20___default.a.isNaN(result) ? defaultValur : result; -} -/** - * @param {*} value - * @returns {string} - */ - -function pString(value) { - return isNormal(value) ? '' + value : ''; -} -/** - * @param {*} value - * @returns {boolean} - */ - -function pBool(value) { - return !!value; -} -/** - * @param {*} value - * @returns {string} - */ - -function boolToAjax(value) { - return value ? '1' : '0'; -} -/** - * @param {*} values - * @returns {boolean} - */ - -function isNonEmptyArray(values) { - return isArray(values) && 0 < values.length; -} -/** - * @param {string} component - * @returns {string} - */ - -function encodeURIComponent(component) { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.encodeURIComponent(component); -} -/** - * @param {string} component - * @returns {string} - */ - -function decodeURIComponent(component) { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.decodeURIComponent(component); -} -/** - * @param {string} url - * @returns {string} - */ - -function decodeURI(url) { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.decodeURI(url); -} -/** - * @param {string} url - * @returns {string} - */ - -function encodeURI(url) { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.encodeURI(url); -} -/** - * @param {string} queryString - * @returns {Object} - */ - -function simpleQueryParser(queryString) { - var index = 0, - len = 0, - temp = null; - var queries = queryString.split('&'), - params = {}; - - for (len = queries.length; index < len; index++) { - temp = queries[index].split('='); - params[decodeURIComponent(temp[0])] = decodeURIComponent(temp[1]); - } - - return params; -} -/** - * @param {number=} len = 32 - * @returns {string} - */ - -function fakeMd5(len) { - if (len === void 0) { - len = 32; - } - - var line = '0123456789abcdefghijklmnopqrstuvwxyz', - lineLen = line.length; - len = pInt(len); - var result = ''; - - while (result.length < len) { - result += line.substr(window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.round(window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.random() * lineLen), 1); - } - - return result; -} -/** - * @param {string} text - * @returns {string} - */ - -function encodeHtml(text) { - return isNormal(text) ? ___WEBPACK_IMPORTED_MODULE_22___default.a.escape(text.toString()) : ''; -} -/** - * @param {string} text - * @param {number=} len = 100 - * @returns {string} - */ - -function splitPlainText(text, len) { - if (len === void 0) { - len = 100; - } - - var prefix = '', - subText = '', - result = text, - spacePos = 0, - newLinePos = 0; - - while (result.length > len) { - subText = result.substring(0, len); - spacePos = _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_17___default()(subText).call(subText, ' '); - newLinePos = _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_17___default()(subText).call(subText, '\n'); - - if (-1 !== newLinePos) { - spacePos = newLinePos; - } - - if (-1 === spacePos) { - spacePos = len; - } - - prefix += subText.substring(0, spacePos) + '\n'; - result = result.substring(spacePos + 1); - } - - return prefix + result; -} - -var timeOutAction = function () { - var timeOuts = {}; - return function (action, fFunction, timeOut) { - timeOuts[action] = isUnd(timeOuts[action]) ? 0 : timeOuts[action]; - window__WEBPACK_IMPORTED_MODULE_20___default.a.clearTimeout(timeOuts[action]); - timeOuts[action] = window__WEBPACK_IMPORTED_MODULE_20___default.a.setTimeout(fFunction, timeOut); - }; -}(); - -var timeOutActionSecond = function () { - var timeOuts = {}; - return function (action, fFunction, timeOut) { - if (!timeOuts[action]) { - timeOuts[action] = window__WEBPACK_IMPORTED_MODULE_20___default.a.setTimeout(function () { - fFunction(); - timeOuts[action] = 0; - }, timeOut); - } - }; -}(); - - -/** - * @param {any} m - * @returns {any} - */ - -function deModule(m) { - return (m && m.default ? m.default : m) || ''; -} -/** - * @returns {boolean} - */ - -function inFocus() { - try { - if (window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement) { - if (isUnd(window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.__inFocusCache)) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.__inFocusCache = $__WEBPACK_IMPORTED_MODULE_21___default()(window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement).is('input,textarea,iframe,.cke_editable'); - } - - return !!window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.__inFocusCache; - } - } catch (e) {} // eslint-disable-line no-empty - - - return false; -} -/** - * @param {boolean} force - * @returns {void} - */ - -function removeInFocus(force) { - if (window__WEBPACK_IMPORTED_MODULE_20___default.a.document && window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement && window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.blur) { - try { - var activeEl = $__WEBPACK_IMPORTED_MODULE_21___default()(window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement); - - if (activeEl && activeEl.is('input,textarea')) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.blur(); - } else if (force) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.blur(); - } - } catch (e) {} // eslint-disable-line no-empty - - } -} -/** - * @returns {void} - */ - -function removeSelection() { - try { - if (window__WEBPACK_IMPORTED_MODULE_20___default.a && window__WEBPACK_IMPORTED_MODULE_20___default.a.getSelection) { - var sel = window__WEBPACK_IMPORTED_MODULE_20___default.a.getSelection(); - - if (sel && sel.removeAllRanges) { - sel.removeAllRanges(); - } - } else if (window__WEBPACK_IMPORTED_MODULE_20___default.a.document && window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection.empty) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection.empty(); - } - } catch (e) {} // eslint-disable-line no-empty - -} -/** - * @param {string} prefix - * @param {string} subject - * @returns {string} - */ - -function replySubjectAdd(prefix, subject) { - prefix = trim(prefix.toUpperCase()); - subject = trim(subject.replace(/[\s]+/g, ' ')); - var drop = false, - re = 'RE' === prefix, - fwd = 'FWD' === prefix; - var parts = [], - prefixIsRe = !fwd; - - if ('' !== subject) { - ___WEBPACK_IMPORTED_MODULE_22___default.a.each(subject.split(':'), function (part) { - var trimmedPart = trim(part); - - if (!drop && (/^(RE|FWD)$/i.test(trimmedPart) || /^(RE|FWD)[[(][\d]+[\])]$/i.test(trimmedPart))) { - if (!re) { - re = !!/^RE/i.test(trimmedPart); - } - - if (!fwd) { - fwd = !!/^FWD/i.test(trimmedPart); - } - } else { - parts.push(part); - drop = true; - } - }); - } - - if (prefixIsRe) { - re = false; - } else { - fwd = false; - } - - return trim((prefixIsRe ? 'Re: ' : 'Fwd: ') + (re ? 'Re: ' : '') + (fwd ? 'Fwd: ' : '') + trim(parts.join(':'))); -} -/** - * @param {number} num - * @param {number} dec - * @returns {number} - */ - -function roundNumber(num, dec) { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.round(num * window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.pow(10, dec)) / window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.pow(10, dec); -} -/** - * @param {(number|string)} sizeInBytes - * @returns {string} - */ - -function friendlySize(sizeInBytes) { - sizeInBytes = pInt(sizeInBytes); - - switch (true) { - case 1073741824 <= sizeInBytes: - return roundNumber(sizeInBytes / 1073741824, 1) + 'GB'; - - case 1048576 <= sizeInBytes: - return roundNumber(sizeInBytes / 1048576, 1) + 'MB'; - - case 1024 <= sizeInBytes: - return roundNumber(sizeInBytes / 1024, 0) + 'KB'; - // no default - } - - return sizeInBytes + 'B'; -} -/** - * @param {string} desc - */ - -function log(desc) { - if (window__WEBPACK_IMPORTED_MODULE_20___default.a.console && window__WEBPACK_IMPORTED_MODULE_20___default.a.console.log) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.console.log(desc); - } -} -/** - * @param {?} object - * @param {string} methodName - * @param {Array=} params - * @param {number=} delay = 0 - */ - -function delegateRun(object, methodName, params, delay) { - if (delay === void 0) { - delay = 0; - } - - if (object && object[methodName]) { - delay = pInt(delay); - params = isArray(params) ? params : []; - - if (0 >= delay) { - object[methodName].apply(object, params); - } else { - ___WEBPACK_IMPORTED_MODULE_22___default.a.delay(function () { - object[methodName].apply(object, params); - }, delay); - } - } -} -/** - * @param {?} event - */ - -function killCtrlACtrlS(event) { - event = event || window__WEBPACK_IMPORTED_MODULE_20___default.a.event; - - if (event && event.ctrlKey && !event.shiftKey && !event.altKey) { - var key = event.keyCode || event.which; - - if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_26__["EventKeyCode"].S) { - event.preventDefault(); - return; - } else if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_26__["EventKeyCode"].A) { - var sender = event.target || event.srcElement; - - if (sender && ('true' === '' + sender.contentEditable || sender.tagName && sender.tagName.match(/INPUT|TEXTAREA/i))) { - return; - } - - if (window__WEBPACK_IMPORTED_MODULE_20___default.a.getSelection) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.getSelection().removeAllRanges(); - } else if (window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection.clear) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection.clear(); - } - - event.preventDefault(); - } - } -} -/** - * @param {(Object|null|undefined)} context - * @param {Function} fExecute - * @param {(Function|boolean|null)=} fCanExecute = true - * @returns {Function} - */ - -function createCommandLegacy(context, fExecute, fCanExecute) { - if (fCanExecute === void 0) { - fCanExecute = true; - } - - var fResult = null; - - var fNonEmpty = function fNonEmpty() { - if (fResult && fResult.canExecute && fResult.canExecute()) { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - fExecute.apply(context, args); - } - - return false; - }; - - fResult = fExecute ? fNonEmpty : noop; - fResult.enabled = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(true); - fResult.isCommand = true; - - if (isFunc(fCanExecute)) { - fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { - return fResult && fResult.enabled() && fCanExecute.call(context); - }); - } else { - fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { - return fResult && fResult.enabled() && !!fCanExecute; - }); - } - - return fResult; -} -/** - * @param {string} theme - * @returns {string} - */ - -var convertThemeName = ___WEBPACK_IMPORTED_MODULE_22___default.a.memoize(function (theme) { - if ('@custom' === theme.substr(-7)) { - theme = trim(theme.substring(0, theme.length - 7)); - } - - return trim(theme.replace(/[^a-zA-Z0-9]+/g, ' ').replace(/([A-Z])/g, ' $1').replace(/[\s]+/g, ' ')); -}); -/** - * @param {string} name - * @returns {string} - */ - -function quoteName(name) { - return name.replace(/["]/g, '\\"'); -} -/** - * @returns {number} - */ - -function microtime() { - return new window__WEBPACK_IMPORTED_MODULE_20___default.a.Date().getTime(); -} -/** - * @returns {number} - */ - -function timestamp() { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.round(microtime() / 1000); -} -/** - * - * @param {string} language - * @param {boolean=} isEng = false - * @returns {string} - */ - -function convertLangName(language, isEng) { - if (isEng === void 0) { - isEng = false; - } - - return __webpack_require__(/*! Common/Translator */ 9).i18n('LANGS_NAMES' + (true === isEng ? '_EN' : '') + '/LANG_' + language.toUpperCase().replace(/[^a-zA-Z0-9]+/g, '_'), null, language); -} -/** - * @returns {object} - */ - -function draggablePlace() { - return $__WEBPACK_IMPORTED_MODULE_21___default()('
]*><\/p>/gi, '').replace(/
]*>([\s\S\r\n\t]*)<\/pre>/gim, convertPre).replace(/[\s]+/gm, ' ').replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gim, fixAttibuteValue).replace(/
]*>/gim, '\n').replace(/<\/h[\d]>/gi, '\n').replace(/<\/p>/gi, '\n\n').replace(/
]*>/gim, '\n__bq__start__\n').replace(/<\/blockquote>/gim, '\n__bq__end__\n').replace(/]*>([\s\S\r\n]*?)<\/a>/gim, convertLinks).replace(/<\/div>/gi, '\n').replace(/ /gi, ' ').replace(/"/gi, '"').replace(/<[^>]*>/gm, ''); - text = Common_Globals__WEBPACK_IMPORTED_MODULE_25__["$div"].html(text).text(); - text = text.replace(/\n[ \t]+/gm, '\n').replace(/[\n]{3,}/gm, '\n\n').replace(/>/gi, '>').replace(/</gi, '<').replace(/&/gi, '&'); - text = splitPlainText(text); - pos = 0; - limit = 800; - - while (0 < limit) { - limit -= 1; - iP1 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15___default()(text).call(text, '__bq__start__', pos); - - if (-1 < iP1) { - iP2 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15___default()(text).call(text, '__bq__start__', iP1 + 5); - iP3 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15___default()(text).call(text, '__bq__end__', iP1 + 5); - - if ((-1 === iP2 || iP3 < iP2) && iP1 < iP3) { - text = text.substring(0, iP1) + convertBlockquote(text.substring(iP1 + 13, iP3)) + text.substring(iP3 + 11); - pos = 0; - } else if (-1 < iP2 && iP2 < iP3) { - pos = iP2 - 1; - } else { - pos = 0; - } - } else { - break; - } - } - - text = text.replace(/__bq__start__/gm, '').replace(/__bq__end__/gm, ''); - return text; -} -/** - * @param {string} plain - * @param {boolean} findEmailAndLinksInText = false - * @returns {string} - */ - -function plainToHtml(plain, findEmailAndLinksInText) { - if (findEmailAndLinksInText === void 0) { - findEmailAndLinksInText = false; - } - - plain = plain.toString().replace(/\r/g, ''); - plain = plain.replace(/^>[> ]>+/gm, function (_ref2) { - var match = _ref2[0]; - return match ? match.replace(/[ ]+/g, '') : match; - }); - var bIn = false, - bDo = true, - bStart = true, - aNextText = [], - sLine = '', - iIndex = 0, - aText = plain.split('\n'); - - do { - bDo = false; - aNextText = []; - - for (iIndex = 0; iIndex < aText.length; iIndex++) { - sLine = aText[iIndex]; - bStart = '>' === sLine.substr(0, 1); - - if (bStart && !bIn) { - bDo = true; - bIn = true; - aNextText.push('~~~blockquote~~~'); - aNextText.push(sLine.substr(1)); - } else if (!bStart && bIn) { - if ('' !== sLine) { - bIn = false; - aNextText.push('~~~/blockquote~~~'); - aNextText.push(sLine); - } else { - aNextText.push(sLine); - } - } else if (bStart && bIn) { - aNextText.push(sLine.substr(1)); - } else { - aNextText.push(sLine); - } - } - - if (bIn) { - bIn = false; - aNextText.push('~~~/blockquote~~~'); - } - - aText = aNextText; - } while (bDo); - - plain = aText.join('\n'); - plain = plain // .replace(/~~~\/blockquote~~~\n~~~blockquote~~~/g, '\n') - .replace(/&/g, '&').replace(/>/g, '>').replace(/').replace(/[\s]*~~~\/blockquote~~~/g, '').replace(/\n/g, '
]*><\/p>/gi, '');
-
- try {
- this.editor.setData(html);
- } catch (e) {} // eslint-disable-line no-empty
-
-
- if (focus) {
- this.focus();
- }
- }
- };
-
- _proto.replaceHtml = function replaceHtml(find, _replaceHtml) {
- if (this.editor && this.__inited && 'wysiwyg' === this.editor.mode) {
- try {
- this.editor.setData(this.editor.getData().replace(find, _replaceHtml));
- } catch (e) {} // eslint-disable-line no-empty
-
- }
- };
-
- _proto.setPlain = function setPlain(plain, focus) {
- if (this.editor && this.__inited) {
- this.clearCachedSignature();
- this.modeToggle(false);
-
- if ('plain' === this.editor.mode && this.editor.plugins.plain && this.editor.__plain) {
- this.editor.__plain.setRawData(plain);
- } else {
- try {
- this.editor.setData(plain);
- } catch (e) {} // eslint-disable-line no-empty
-
- }
-
- if (focus) {
- this.focus();
- }
- }
- };
-
- _proto.init = function init() {
- var _this2 = this;
-
- if (this.element && !this.editor) {
- var initFunc = function initFunc() {
- var config = Common_Globals__WEBPACK_IMPORTED_MODULE_9__["htmlEditorDefaultConfig"],
- language = Storage_Settings__WEBPACK_IMPORTED_MODULE_11__["settingsGet"]('Language'),
- allowSource = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_11__["appSettingsGet"]('allowHtmlEditorSourceButton'),
- biti = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_11__["appSettingsGet"]('allowHtmlEditorBitiButtons');
-
- if ((allowSource || !biti) && !config.toolbarGroups.__cfgInited) {
- config.toolbarGroups.__cfgInited = true;
-
- if (allowSource) {
- config.removeButtons = config.removeButtons.replace(',Source', '');
- }
-
- if (!biti) {
- config.removePlugins += (config.removePlugins ? ',' : '') + 'bidi';
- }
- }
-
- config.enterMode = window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR.ENTER_BR;
- config.shiftEnterMode = window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR.ENTER_P;
- config.language = Common_Globals__WEBPACK_IMPORTED_MODULE_9__["htmlEditorLangsMap"][(language || 'en').toLowerCase()] || 'en';
-
- if (window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR.env) {
- window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR.env.isCompatible = true;
- }
-
- _this2.editor = window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR.appendTo(_this2.element, config);
-
- _this2.editor.on('key', function (event) {
- if (event && event.data && Common_Enums__WEBPACK_IMPORTED_MODULE_10__["EventKeyCode"].Tab === event.data.keyCode) {
- return false;
- }
-
- return true;
- });
-
- _this2.editor.on('blur', function () {
- _this2.blurTrigger();
- });
-
- _this2.editor.on('mode', function () {
- _this2.blurTrigger();
-
- if (_this2.onModeChange) {
- _this2.onModeChange('plain' !== _this2.editor.mode);
- }
- });
-
- _this2.editor.on('focus', function () {
- _this2.focusTrigger();
- });
-
- if (window__WEBPACK_IMPORTED_MODULE_6___default.a.FileReader) {
- _this2.editor.on('drop', function (event) {
- if (0 < event.data.dataTransfer.getFilesCount()) {
- var file = event.data.dataTransfer.getFile(0);
-
- if (file && window__WEBPACK_IMPORTED_MODULE_6___default.a.FileReader && event.data.dataTransfer.id && file.type && file.type.match(/^image/i)) {
- var id = event.data.dataTransfer.id,
- imageId = "[img=" + id + "]",
- reader = new window__WEBPACK_IMPORTED_MODULE_6___default.a.FileReader();
-
- reader.onloadend = function () {
- if (reader.result) {
- _this2.replaceHtml(imageId, "");
- }
- };
-
- reader.readAsDataURL(file);
- event.data.dataTransfer.setData('text/html', imageId);
- }
- }
- });
- }
-
- _this2.editor.on('instanceReady', function () {
- if (_this2.editor.removeMenuItem) {
- _this2.editor.removeMenuItem('cut');
-
- _this2.editor.removeMenuItem('copy');
-
- _this2.editor.removeMenuItem('paste');
- }
-
- _this2.__resizable = true;
- _this2.__inited = true;
-
- _this2.resize();
-
- if (_this2.onReady) {
- _this2.onReady();
- }
- });
- };
-
- if (window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR) {
- initFunc();
- } else {
- window__WEBPACK_IMPORTED_MODULE_6___default.a.__initEditor = initFunc;
- }
- }
- };
-
- _proto.focus = function focus() {
- if (this.editor) {
- try {
- this.editor.focus();
- } catch (e) {} // eslint-disable-line no-empty
-
- }
- };
-
- _proto.hasFocus = function hasFocus() {
- if (this.editor) {
- try {
- return !!this.editor.focusManager.hasFocus;
- } catch (e) {} // eslint-disable-line no-empty
-
- }
-
- return false;
- };
-
- _proto.blur = function blur() {
- if (this.editor) {
- try {
- this.editor.focusManager.blur(true);
- } catch (e) {} // eslint-disable-line no-empty
-
- }
- };
-
- _proto.resizeEditor = function resizeEditor() {
- if (this.editor && this.__resizable) {
- try {
- this.editor.resize(this.$element.width(), this.$element.innerHeight());
- } catch (e) {} // eslint-disable-line no-empty
-
- }
- };
-
- _proto.setReadOnly = function setReadOnly(value) {
- if (this.editor) {
- try {
- this.editor.setReadOnly(!!value);
- } catch (e) {} // eslint-disable-line no-empty
-
- }
- };
-
- _proto.clear = function clear(focus) {
- this.setHtml('', focus);
- };
-
- return HtmlEditor;
-}();
-
-
-
-/***/ }),
-/* 205 */
-/*!*******************************************************************************!*\
- !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/reduce.js ***!
- \*******************************************************************************/
-/*! no static exports found */
-/*! exports used: default */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__(/*! core-js-pure/stable/instance/reduce */ 276);
-
-/***/ }),
-/* 206 */
-/*!**************************************************************************************!*\
- !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/last-index-of.js ***!
- \**************************************************************************************/
-/*! no static exports found */
-/*! exports used: default */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__(/*! core-js-pure/stable/instance/last-index-of */ 314);
-
-/***/ }),
-/* 207 */
-/*!*********************************!*\
- !*** ./dev/External/Opentip.js ***!
- \*********************************/
-/*! exports provided: Opentip, default */
-/*! exports used: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* unused harmony export Opentip */
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Opentip; });
-/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4);
-/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__);
-
-var Opentip = window__WEBPACK_IMPORTED_MODULE_0___default.a.Opentip || {};
-Opentip.styles = Opentip.styles || {};
-Opentip.styles.rainloop = {
- 'extends': 'standard',
- 'fixed': true,
- 'target': true,
- 'delay': 0.2,
- 'hideDelay': 0,
- 'hideEffect': 'fade',
- 'hideEffectDuration': 0.2,
- 'showEffect': 'fade',
- 'showEffectDuration': 0.2,
- 'showOn': 'mouseover click',
- 'removeElementsOnHide': true,
- 'background': '#fff',
- 'shadow': false,
- 'borderColor': '#999',
- 'borderRadius': 2,
- 'borderWidth': 1
-};
-Opentip.styles.rainloopTip = {
- 'extends': 'rainloop',
- 'delay': 0.4,
- 'group': 'rainloopTips'
-};
-Opentip.styles.rainloopErrorTip = {
- 'extends': 'rainloop',
- 'className': 'rainloopErrorTip'
-};
-
-
-/***/ }),
-/* 208 */
-/*!*****************************************!*\
- !*** ./node_modules/pikaday/pikaday.js ***!
- \*****************************************/
-/*! no static exports found */
-/*! exports used: default */
-/***/ (function(module, exports, __webpack_require__) {
-
-/*!
- * Pikaday
- *
- * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday
- */
-
-(function (root, factory)
-{
- 'use strict';
-
- var moment;
- if (true) {
- // CommonJS module
- // Load moment.js as an optional dependency
- try { moment = __webpack_require__(/*! moment */ 98); } catch (e) {}
- module.exports = factory(moment);
- } else {}
-}(this, function (moment)
-{
- 'use strict';
-
- /**
- * feature detection and helper functions
- */
- var hasMoment = typeof moment === 'function',
-
- hasEventListeners = !!window.addEventListener,
-
- document = window.document,
-
- sto = window.setTimeout,
-
- addEvent = function(el, e, callback, capture)
- {
- if (hasEventListeners) {
- el.addEventListener(e, callback, !!capture);
- } else {
- el.attachEvent('on' + e, callback);
- }
- },
-
- removeEvent = function(el, e, callback, capture)
- {
- if (hasEventListeners) {
- el.removeEventListener(e, callback, !!capture);
- } else {
- el.detachEvent('on' + e, callback);
- }
- },
-
- trim = function(str)
- {
- return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g,'');
- },
-
- hasClass = function(el, cn)
- {
- return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;
- },
-
- addClass = function(el, cn)
- {
- if (!hasClass(el, cn)) {
- el.className = (el.className === '') ? cn : el.className + ' ' + cn;
- }
- },
-
- removeClass = function(el, cn)
- {
- el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));
- },
-
- isArray = function(obj)
- {
- return (/Array/).test(Object.prototype.toString.call(obj));
- },
-
- isDate = function(obj)
- {
- return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());
- },
-
- isWeekend = function(date)
- {
- var day = date.getDay();
- return day === 0 || day === 6;
- },
-
- isLeapYear = function(year)
- {
- // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951
- return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
- },
-
- getDaysInMonth = function(year, month)
- {
- return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
- },
-
- setToStartOfDay = function(date)
- {
- if (isDate(date)) date.setHours(0,0,0,0);
- },
-
- compareDates = function(a,b)
- {
- // weak date comparison (use setToStartOfDay(date) to ensure correct result)
- return a.getTime() === b.getTime();
- },
-
- extend = function(to, from, overwrite)
- {
- var prop, hasProp;
- for (prop in from) {
- hasProp = to[prop] !== undefined;
- if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {
- if (isDate(from[prop])) {
- if (overwrite) {
- to[prop] = new Date(from[prop].getTime());
- }
- }
- else if (isArray(from[prop])) {
- if (overwrite) {
- to[prop] = from[prop].slice(0);
- }
- } else {
- to[prop] = extend({}, from[prop], overwrite);
- }
- } else if (overwrite || !hasProp) {
- to[prop] = from[prop];
- }
- }
- return to;
- },
-
- fireEvent = function(el, eventName, data)
- {
- var ev;
-
- if (document.createEvent) {
- ev = document.createEvent('HTMLEvents');
- ev.initEvent(eventName, true, false);
- ev = extend(ev, data);
- el.dispatchEvent(ev);
- } else if (document.createEventObject) {
- ev = document.createEventObject();
- ev = extend(ev, data);
- el.fireEvent('on' + eventName, ev);
- }
- },
-
- adjustCalendar = function(calendar) {
- if (calendar.month < 0) {
- calendar.year -= Math.ceil(Math.abs(calendar.month)/12);
- calendar.month += 12;
- }
- if (calendar.month > 11) {
- calendar.year += Math.floor(Math.abs(calendar.month)/12);
- calendar.month -= 12;
- }
- return calendar;
- },
-
- /**
- * defaults and localisation
- */
- defaults = {
-
- // bind the picker to a form field
- field: null,
-
- // automatically show/hide the picker on `field` focus (default `true` if `field` is set)
- bound: undefined,
-
- // data-attribute on the input field with an aria assistance tekst (only applied when `bound` is set)
- ariaLabel: 'Use the arrow keys to pick a date',
-
- // position of the datepicker, relative to the field (default to bottom & left)
- // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)
- position: 'bottom left',
-
- // automatically fit in the viewport even if it means repositioning from the position option
- reposition: true,
-
- // the default output format for `.toString()` and `field` value
- format: 'YYYY-MM-DD',
-
- // the toString function which gets passed a current date object and format
- // and returns a string
- toString: null,
-
- // used to create date object from current input string
- parse: null,
-
- // the initial date to view when first opened
- defaultDate: null,
-
- // make the `defaultDate` the initial selected value
- setDefaultDate: false,
-
- // first day of week (0: Sunday, 1: Monday etc)
- firstDay: 0,
-
- // the default flag for moment's strict date parsing
- formatStrict: false,
-
- // the minimum/earliest date that can be selected
- minDate: null,
- // the maximum/latest date that can be selected
- maxDate: null,
-
- // number of years either side, or array of upper/lower range
- yearRange: 10,
-
- // show week numbers at head of row
- showWeekNumber: false,
-
- // Week picker mode
- pickWholeWeek: false,
-
- // used internally (don't config outside)
- minYear: 0,
- maxYear: 9999,
- minMonth: undefined,
- maxMonth: undefined,
-
- startRange: null,
- endRange: null,
-
- isRTL: false,
-
- // Additional text to append to the year in the calendar title
- yearSuffix: '',
-
- // Render the month after year in the calendar title
- showMonthAfterYear: false,
-
- // Render days of the calendar grid that fall in the next or previous month
- showDaysInNextAndPreviousMonths: false,
-
- // Allows user to select days that fall in the next or previous month
- enableSelectionDaysInNextAndPreviousMonths: false,
-
- // how many months are visible
- numberOfMonths: 1,
-
- // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)
- // only used for the first display or when a selected date is not visible
- mainCalendar: 'left',
-
- // Specify a DOM element to render the calendar in
- container: undefined,
-
- // Blur field when date is selected
- blurFieldOnSelect : true,
-
- // internationalization
- i18n: {
- previousMonth : 'Previous Month',
- nextMonth : 'Next Month',
- months : ['January','February','March','April','May','June','July','August','September','October','November','December'],
- weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
- weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
- },
-
- // Theme Classname
- theme: null,
-
- // events array
- events: [],
-
- // callback function
- onSelect: null,
- onOpen: null,
- onClose: null,
- onDraw: null,
-
- // Enable keyboard input
- keyboardInput: true
- },
-
-
- /**
- * templating functions to abstract HTML rendering
- */
- renderDayName = function(opts, day, abbr)
- {
- day += opts.firstDay;
- while (day >= 7) {
- day -= 7;
- }
- return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];
- },
-
- renderDay = function(opts)
- {
- var arr = [];
- var ariaSelected = 'false';
- if (opts.isEmpty) {
- if (opts.showDaysInNextAndPreviousMonths) {
- arr.push('is-outside-current-month');
-
- if(!opts.enableSelectionDaysInNextAndPreviousMonths) {
- arr.push('is-selection-disabled');
- }
-
- } else {
- return '
" + _this.readme() + ""; - } - }; - _this.bDisabeCloseOnEsc = true; - _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_10__["KeyState"].All; - _this.tryToClosePopup = ___WEBPACK_IMPORTED_MODULE_7___default.a.debounce(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, _this.tryToClosePopup, _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)), Common_Enums__WEBPACK_IMPORTED_MODULE_10__["Magics"].Time200ms); - return _this; - } - - var _proto = PluginPopupView.prototype; - - _proto.saveCommand = function saveCommand() { - var list = {}; - list.Name = this.name(); - - ___WEBPACK_IMPORTED_MODULE_7___default.a.each(this.configures(), function (oItem) { - var value = oItem.value(); - - if (false === value || true === value) { - value = value ? '1' : '0'; - } - - list['_' + oItem.Name] = value; - }); - - this.saveError(''); - Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].pluginSettingsUpdate(this.onPluginSettingsUpdateResponse, list); - }; - - _proto.onPluginSettingsUpdateResponse = function onPluginSettingsUpdateResponse(result, data) { - if (Common_Enums__WEBPACK_IMPORTED_MODULE_10__["StorageResultType"].Success === result && data && data.Result) { - this.cancelCommand(); - } else { - this.saveError(''); - - if (data && data.ErrorCode) { - this.saveError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["getNotification"])(data.ErrorCode)); - } else { - this.saveError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_10__["Notification"].CantSavePluginSettings)); - } - } - }; - - _proto.onShow = function onShow(oPlugin) { - this.name(); - this.readme(); - this.configures([]); - - if (oPlugin) { - this.name(oPlugin.Name); - this.readme(oPlugin.Readme); - var config = oPlugin.Config; - - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["isNonEmptyArray"])(config)) { - this.configures(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, config, function (item) { - return { - 'value': ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(item[0]), - 'placeholder': ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(item[6]), - 'Name': item[1], - 'Type': item[2], - 'Label': item[3], - 'Default': item[4], - 'Desc': item[5] - }; - })); - } - } - }; - - _proto.tryToClosePopup = function tryToClosePopup() { - var _this2 = this; - - var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 218); - - if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["isPopupVisible"])(PopupsAskViewModel)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["showScreenPopup"])(PopupsAskViewModel, [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () { - if (_this2.modalVisibility()) { - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["delegateRun"])(_this2, 'cancelCommand'); - } - }]); - } - }; - - _proto.onBuild = function onBuild() { - var _this3 = this; - - key__WEBPACK_IMPORTED_MODULE_9___default()('esc', Common_Enums__WEBPACK_IMPORTED_MODULE_10__["KeyState"].All, function () { - if (_this3.modalVisibility()) { - _this3.tryToClosePopup(); - } - - return false; - }); - }; - - return PluginPopupView; -}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_15__[/* AbstractViewNext */ "a"]), (_babel_runtime_corejs3_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_6___default()(_class2.prototype, "saveCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class2.prototype, "saveCommand"), _class2.prototype)), _class2)) || _class); - - -/***/ }), -/* 534 */ -/*!****************************************!*\ - !*** ./dev/Settings/Admin/Branding.js ***! - \****************************************/ -/*! exports provided: BrandingAdminSettings, default */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BrandingAdminSettings", function() { return BrandingAdminSettings; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BrandingAdminSettings; }); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); -/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/App */ 79); -/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Settings */ 5); - - - - - - - - - -var BrandingAdminSettings = -/*#__PURE__*/ -function () { - function BrandingAdminSettings() { - this.capa = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].prem; - this.title = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('Title')).idleTrigger(); - this.loadingDesc = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoadingDescription')).idleTrigger(); - this.faviconUrl = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('FaviconUrl')).idleTrigger(); - this.loginLogo = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginLogo') || '').idleTrigger(); - this.loginBackground = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginBackground') || '').idleTrigger(); - this.userLogo = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogo') || '').idleTrigger(); - this.userLogoMessage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogoMessage') || '').idleTrigger(); - this.userIframeMessage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserIframeMessage') || '').idleTrigger(); - this.userLogoTitle = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogoTitle') || '').idleTrigger(); - this.loginDescription = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginDescription')).idleTrigger(); - this.loginCss = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginCss')).idleTrigger(); - this.userCss = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserCss')).idleTrigger(); - this.welcomePageUrl = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('WelcomePageUrl')).idleTrigger(); - this.welcomePageDisplay = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('WelcomePageDisplay')).idleTrigger(); - this.welcomePageDisplay.options = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () { - Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["trigger"])(); - return [{ - optValue: 'none', - optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_NONE') - }, { - optValue: 'once', - optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_ONCE') - }, { - optValue: 'always', - optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_ALWAYS') - }]; - }); - this.community = true || false; - } - - var _proto = BrandingAdminSettings.prototype; - - _proto.onBuild = function onBuild() { - var _this = this; - - ___WEBPACK_IMPORTED_MODULE_0___default.a.delay(function () { - var f1 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.title.trigger, _this), - f2 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.loadingDesc.trigger, _this), - f3 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.faviconUrl.trigger, _this); - - _this.title.subscribe(function (value) { - Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f1, { - 'Title': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) - }); - }); - - _this.loadingDesc.subscribe(function (value) { - Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f2, { - 'LoadingDescription': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) - }); - }); - - _this.faviconUrl.subscribe(function (value) { - Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f3, { - 'FaviconUrl': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) - }); - }); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Magics"].Time50ms); - }; - - return BrandingAdminSettings; -}(); - - - -/***/ }) -/******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9FbnVtcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwva28uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9VdGlscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuX1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvd1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yYWdlL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vR2xvYmFscy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vS25vaW4uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmpRdWVyeVwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vVHJhbnNsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2luaGVyaXRzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0xpbmtzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9hcHBseURlY29yYXRlZERlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmtleVwiIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWRtaW4vQWpheC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NvbnN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL2Rldi9Lbm9pbi9BYnN0cmFjdFZpZXdOZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Tb2NpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9QbHVnaW5zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnRyeS12aXJ0dWFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL01vbWVudG9yLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5oYXNoZXJcIiIsIndlYnBhY2s6Ly8vLi9kZXYvSGVscGVyL0FwcHMvQWRtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi50aW1lcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9MYW5ndWFnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0FwcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvRW1haWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGlkZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9DYXBhLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWRtaW4vUGFja2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cubW9tZW50XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LnByb2dyZXNzSnNcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZXItYWdlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9KYXNzbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9UaGVtZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL1BsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0xpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vQWJzdHJhY3RTY3JlZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuc3NtXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wZXJmb3JtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucGFyc2UtaW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9Eb21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmNyb3Nzcm9hZHNcIiIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0Q2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VtYWlsanMtYWRkcmVzc3BhcnNlci9kaXN0L2FkZHJlc3NwYXJzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcubWF0Y2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9DaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0h0bWxFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2xhc3QtaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0V4dGVybmFsL09wZW50aXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Bpa2FkYXkvcGlrYWRheS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuQXV0b2xpbmtlclwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vTWltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvQXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGFyc2UtaW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWh0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZvcmNlZC1zdHJpbmctaHRtbC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9MYW5ndWFnZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L2Jvb3RzdHJhcC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0Fic3RyYWN0QXBwLmpzIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWJzdHJhY3RBamF4LmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWJzdHJhY3RTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQXBwL0Fic3RyYWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Lbm9pbi9BYnN0cmFjdEJvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdFJhZGlvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2xvcHB5LWFycmF5LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC90cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mb3JjZWQtc3RyaW5nLXRyaW0tbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2FtZS12YWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvSHRtbC9QcmV2aWV3TWVzc2FnZS5odG1sIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2F2ZVRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9JbnB1dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1NlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1JhZGlvLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvVGV4dEFyZWEuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9EYXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2NyaXB0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvTWF0ZXJpYWxEZXNpZ24vQ2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0FwcC9BZG1pbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Eb21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9BZG1pbi9TZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vR2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vRG9tYWlucy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0NvbnRhY3RzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9TZWN1cml0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vU29jaWFsLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9QbHVnaW5zLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9QYWNrYWdlcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vQWJvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9BZG1pbi9TZXR0aW5ncy9QYW5lLmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L2FkbWluLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0RvbWFpbkFsaWFzLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL1BsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vQnJhbmRpbmcuanMiXSwibmFtZXMiOlsiRmlsZVR5cGUiLCJTdG9yYWdlUmVzdWx0VHlwZSIsIkZvY3VzZWQiLCJTdGF0ZSIsIlN0YXRlVHlwZSIsIkNhcGEiLCJLZXlTdGF0ZSIsIkZvbGRlclR5cGUiLCJTZXJ2ZXJGb2xkZXJUeXBlIiwiTG9naW5TaWduTWVUeXBlQXNTdHJpbmciLCJMb2dpblNpZ25NZVR5cGUiLCJDb21wb3NlVHlwZSIsIlVwbG9hZEVycm9yQ29kZSIsIlNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24iLCJDbGllbnRTaWRlS2V5TmFtZSIsIkV2ZW50S2V5Q29kZSIsIk1lc3NhZ2VTZXRBY3Rpb24iLCJNZXNzYWdlU2VsZWN0QWN0aW9uIiwiRGVza3RvcE5vdGlmaWNhdGlvbiIsIk1lc3NhZ2VQcmlvcml0eSIsIkVkaXRvckRlZmF1bHRUeXBlIiwiU2VydmVyU2VjdXJlIiwiU2VhcmNoRGF0ZVR5cGUiLCJTYXZlU2V0dGluZ3NTdGVwIiwiTGF5b3V0IiwiRmlsdGVyQ29uZGl0aW9uRmllbGQiLCJGaWx0ZXJDb25kaXRpb25UeXBlIiwiRmlsdGVyc0FjdGlvbiIsIkZpbHRlclJ1bGVzVHlwZSIsIlNpZ25lZFZlcmlmeVN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0eVR5cGUiLCJNYWdpY3MiLCJQb3J0cyIsIk5vdGlmaWNhdGlvbiIsImtvIiwid2luZG93IiwiJHdpbiIsIiQiLCJmRGlzcG9zYWxUb29sdGlwSGVscGVyIiwiZWxlbWVudCIsInV0aWxzIiwiZG9tTm9kZURpc3Bvc2FsIiwiYWRkRGlzcG9zZUNhbGxiYWNrIiwiX19vcGVudGlwIiwiZGVhY3RpdmF0ZSIsImJpbmRpbmdIYW5kbGVycyIsInVwZGF0ZVdpZHRoIiwiaW5pdCIsImZWYWx1ZUFjY2Vzc29yIiwiJGVsIiwiZlZhbHVlIiwiZkluaXQiLCJ3aWR0aCIsInNldFRpbWVvdXQiLCJUaW1lNTAwbXMiLCJvbiIsIm9mZiIsImVkaXRvciIsIkh0bWxFZGl0b3IiLCJyZXF1aXJlIiwiZGVmYXVsdCIsImZVcGRhdGVFZGl0b3JWYWx1ZSIsIl9fZWRpdG9yIiwic2V0SHRtbE9yUGxhaW4iLCJmVXBkYXRlS29WYWx1ZSIsImdldERhdGFXaXRoSHRtbE1hcmsiLCJmT25SZWFkeSIsImlzT2JzZXJ2YWJsZSIsIl9fZmV0Y2hFZGl0b3JWYWx1ZSIsInN1YnNjcmliZSIsImpzb24iLCJ0ZXh0IiwiSlNPTiIsInN0cmluZ2lmeSIsInVud3JhcCIsInVwZGF0ZSIsInNjcm9sbGVyU2hhZG93cyIsImxpbWl0IiwiY29udCIsImZGdW5jIiwiXyIsInRocm90dGxlIiwidG9nZ2xlQ2xhc3MiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwaWthZGF5IiwiZkFsbEJpbmRpbmdzQWNjZXNzb3IiLCJ2aWV3TW9kZWwiLCJiaW5kaW5nQ29udGV4dCIsInRleHRJbnB1dCIsIlBpa2FkYXkiLCJfX3Bpa2FkYXkiLCJmaWVsZCIsInZpc2libGVBbmltYXRlZCIsImFkZENsYXNzIiwic2hvdyIsImhpZGUiLCJkZWxheSIsInJlbW92ZUNsYXNzIiwidG9vbHRpcCIsImlzTW9iaWxlIiwiZGF0YSIsImlzSTE4TiIsIkdsb2JhbHMiLCJiTW9iaWxlRGV2aWNlIiwic1ZhbHVlIiwiaXNGdW5jdGlvbiIsIk9wZW50aXAiLCJkcm9wZG93blZpc2liaWxpdHkiLCJ2Iiwic2V0Q29udGVudCIsImFjdGl2YXRlIiwiVHJhbnNsYXRvciIsImkxOG4iLCJ0cmlnZ2VyIiwidG9vbHRpcEVycm9yVGlwIiwic3R5bGUiLCJoaWRlT24iLCJ0aXBKb2ludCIsImRvY3VtZW50IiwidmFsdWUiLCJvcGVuVGlwcyIsImlzIiwiVGltZTEwMG1zIiwicmVnaXN0cmF0ZUJvb3RzdHJhcERyb3Bkb3duIiwiYUJvb3RzdHJhcERyb3Bkb3ducyIsInB1c2giLCJjbGljayIsImRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSIsIm9wZW5Ecm9wZG93blRyaWdnZXIiLCJoYXNDbGFzcyIsImRyb3Bkb3duIiwiZm9jdXMiLCJkcm9wZG93bkNsb3NlciIsImNsb3Nlc3QiLCJwb3BvdmVyIiwiY3NzdGV4dCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwicmVzaXplY3JvcCIsIm9uS2V5RG93biIsImV2ZW50IiwiY2FsbCIsIm9uRW50ZXIiLCJwYXJzZUludCIsImtleUNvZGUiLCJvblNwYWNlIiwib25UYWIiLCJzaGlmdEtleSIsIm9uRXNjIiwiY2xpY2tPblRydWUiLCJtb2RhbCIsIlV0aWxzIiwid2luZG93UmVzaXplQ2FsbGJhY2siLCIkaHRtbCIsIm1vbWVudCIsIm1vbWVudFRvTm9kZSIsImkxOG5Jbml0IiwiaTE4blRvTm9kZXMiLCJ0cmFuc2xhdG9ySW5pdCIsImkxOG5VcGRhdGUiLCJsaW5rIiwiYXR0ciIsInRpdGxlIiwidGV4dEYiLCJpbml0RG9tIiwiaW5pdEZpeGVkVHJpZ2dlciIsInZhbHVlcyIsInRvcCIsIiRjb250YWluZXIiLCJyZXNpemUiLCJvZmZzZXQiLCJjc3MiLCJpbml0UmVzaXplVHJpZ2dlciIsIm9FbGVtZW50IiwicEludCIsInNpemUiLCJoZWlnaHQiLCJhcHBlbmREb20iLCJlbXB0eSIsImFwcGVuZCIsImRyYWdnYWJsZSIsInRyaWdnZXJab25lIiwic2Nyb2xsU3BlZWQiLCJmQWxsVmFsdWVGdW5jIiwiZHJvcHBhYmxlU2VsZWN0b3IiLCJjb25mIiwiZGlzdGFuY2UiLCJoYW5kbGUiLCJjdXJzb3JBdCIsImxlZnQiLCJyZWZyZXNoUG9zaXRpb25zIiwic2Nyb2xsIiwiZHJhZyIsInN0b3AiLCJoZWxwZXIiLCJlYWNoIiwiJHRoaXMiLCJib3R0b21Qb3MiLCJjbGVhckludGVydmFsIiwicGFnZVgiLCJwYWdlWSIsIm1vdmVVcCIsIndpbmRvd1Jlc2l6ZSIsInNldEludGVydmFsIiwibW92ZURvd24iLCJ0YXJnZXQiLCJkYXRhRm9yIiwicmVtb3ZlSW5Gb2N1cyIsImRyb3BwYWJsZSIsImZWYWx1ZUZ1bmMiLCJmT3ZlckNhbGxiYWNrIiwiZHJvcHBhYmxlT3ZlciIsImZPdXRDYWxsYmFjayIsImRyb3BwYWJsZU91dCIsInRvbGVyYW5jZSIsImhvdmVyQ2xhc3MiLCJkcm9wIiwib3ZlciIsIm91dCIsInVpIiwibmFubyIsIlNldHRpbmdzIiwiYkRpc2FibGVOYW5vU2Nyb2xsIiwiYXBwU2V0dGluZ3NHZXQiLCJuYW5vU2Nyb2xsZXIiLCJpT1NOYXRpdmVTY3JvbGxpbmciLCJwcmV2ZW50UGFnZVNjcm9sbGluZyIsInNhdmVUcmlnZ2VyIiwidG9TdHJpbmciLCJlbmQiLCJlbWFpbHNUYWdzIiwiRW1haWxNb2RlbCIsImZBbGxCaW5kaW5ncyIsImZBdXRvQ29tcGxldGVTb3VyY2UiLCJhdXRvQ29tcGxldGVTb3VyY2UiLCJpbnB1dERlbGltaXRlcnMiLCJmRm9jdXNDYWxsYmFjayIsImZvY3VzZWQiLCJpbnB1dG9zYXVydXMiLCJwYXJzZU9uQmx1ciIsImFsbG93RHJhZ0FuZERyb3AiLCJmb2N1c0NhbGxiYWNrIiwic3BsaXRIb29rIiwic3Vic3RyIiwic3BsaXRFbWFpbExpbmUiLCJwYXJzZUhvb2siLCJpbnB1dCIsImZsYXR0ZW4iLCJpbnB1dFZhbHVlIiwicGFyc2VFbWFpbExpbmUiLCJsZW5ndGgiLCJpdGVtIiwiaXNPYmplY3QiLCJ0b0xpbmUiLCJjaGFuZ2UiLCIkb0VsIiwidmFsIiwiY29tbWFuZCIsImpxRWxlbWVudCIsImlzQ29tbWFuZCIsIkVycm9yIiwiZW5hYmxlZCIsIm9ic2VydmFibGUiLCJjYW5FeGVjdXRlIiwiX19yZWFsQ2FuRXhlY3V0ZSIsImNvbXB1dGVkIiwicmVzdWx0IiwicHJvcCIsImV4dGVuZGVycyIsInRyaW1tZXIiLCJyZWFkIiwid3JpdGUiLCJuZXdWYWx1ZSIsInBvc0ludGVyZXIiLCJkZWZhdWx0VmFsIiwibGltaXRlZExpc3QiLCJjdXJyZW50VmFsdWUiLCJsaXN0IiwiaXNOb25FbXB0eUFycmF5IiwiaW5BcnJheSIsImV4dGVuZCIsIm5vdGlmeSIsInZhbHVlSGFzTXV0YXRlZCIsInJldmVyc2libGUiLCJjb21taXQiLCJyZXZlcnNlIiwiY29tbWl0ZWRWYWx1ZSIsInRvZ2dsZVN1YnNjcmliZSIsIm9wdGlvbnMiLCJ0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eSIsInByZXYiLCJuZXh0IiwiZmFsc2VUaW1lb3V0Iiwib3B0aW9uIiwiaUZhbHNlVGltZW91dFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzcGVjaWFsVGhyb3R0bGUiLCJpU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlIiwiaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQiLCJ2YWx1ZUZvclJlYWQiLCJiVmFsdWUiLCJpZGxlVHJpZ2dlciIsIklkbGUiLCJmbiIsInZhbGlkYXRlTm9uZSIsImhhc0Vycm9yIiwidmFsaWRhdGVFbWFpbCIsInRlc3QiLCJ2YWxpZGF0ZVNpbXBsZUVtYWlsIiwiZGVsZXRlQWNjZXNzSGVscGVyIiwidmFsaWRhdGVGdW5jIiwiaGFzRnVuY0Vycm9yIiwidHJpbSIsImlzQXJyYXkiLCJpc0Z1bmMiLCJpc1VuZCIsImlzVW5kZWZpbmVkIiwiaXNOdWxsIiwiaGFzIiwiYmluZCIsIm5vb3AiLCJub29wVHJ1ZSIsIm5vb3BGYWxzZSIsInNpbGVudFRyeUNhdGNoIiwiZnVuYyIsImUiLCJpc05vcm1hbCIsImlzUG9zTnVtZXJpYyIsImluY2x1ZGVaZXJvIiwiZGVmYXVsdFZhbHVyIiwiaXNOYU4iLCJwU3RyaW5nIiwicEJvb2wiLCJib29sVG9BamF4IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY29tcG9uZW50IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZGVjb2RlVVJJIiwidXJsIiwiZW5jb2RlVVJJIiwic2ltcGxlUXVlcnlQYXJzZXIiLCJxdWVyeVN0cmluZyIsImluZGV4IiwibGVuIiwidGVtcCIsInF1ZXJpZXMiLCJzcGxpdCIsInBhcmFtcyIsImZha2VNZDUiLCJsaW5lIiwibGluZUxlbiIsIk1hdGgiLCJyb3VuZCIsInJhbmRvbSIsImVuY29kZUh0bWwiLCJlc2NhcGUiLCJzcGxpdFBsYWluVGV4dCIsInByZWZpeCIsInN1YlRleHQiLCJzcGFjZVBvcyIsIm5ld0xpbmVQb3MiLCJzdWJzdHJpbmciLCJ0aW1lT3V0QWN0aW9uIiwidGltZU91dHMiLCJhY3Rpb24iLCJmRnVuY3Rpb24iLCJ0aW1lT3V0IiwidGltZU91dEFjdGlvblNlY29uZCIsImRlTW9kdWxlIiwibSIsImluRm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiX19pbkZvY3VzQ2FjaGUiLCJmb3JjZSIsImJsdXIiLCJhY3RpdmVFbCIsInJlbW92ZVNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInNlbCIsInJlbW92ZUFsbFJhbmdlcyIsInNlbGVjdGlvbiIsInJlcGx5U3ViamVjdEFkZCIsInN1YmplY3QiLCJ0b1VwcGVyQ2FzZSIsInJlcGxhY2UiLCJyZSIsImZ3ZCIsInBhcnRzIiwicHJlZml4SXNSZSIsInBhcnQiLCJ0cmltbWVkUGFydCIsImpvaW4iLCJyb3VuZE51bWJlciIsIm51bSIsImRlYyIsInBvdyIsImZyaWVuZGx5U2l6ZSIsInNpemVJbkJ5dGVzIiwibG9nIiwiZGVzYyIsImNvbnNvbGUiLCJkZWxlZ2F0ZVJ1biIsIm9iamVjdCIsIm1ldGhvZE5hbWUiLCJraWxsQ3RybEFDdHJsUyIsImN0cmxLZXkiLCJhbHRLZXkiLCJrZXkiLCJ3aGljaCIsIlMiLCJwcmV2ZW50RGVmYXVsdCIsIkEiLCJzZW5kZXIiLCJzcmNFbGVtZW50IiwiY29udGVudEVkaXRhYmxlIiwidGFnTmFtZSIsIm1hdGNoIiwiY2xlYXIiLCJjcmVhdGVDb21tYW5kTGVnYWN5IiwiY29udGV4dCIsImZFeGVjdXRlIiwiZkNhbkV4ZWN1dGUiLCJmUmVzdWx0IiwiZk5vbkVtcHR5IiwiYXJncyIsImFwcGx5IiwiY29udmVydFRoZW1lTmFtZSIsIm1lbW9pemUiLCJ0aGVtZSIsInF1b3RlTmFtZSIsIm5hbWUiLCJtaWNyb3RpbWUiLCJEYXRlIiwiZ2V0VGltZSIsInRpbWVzdGFtcCIsImNvbnZlcnRMYW5nTmFtZSIsImxhbmd1YWdlIiwiaXNFbmciLCJkcmFnZ2FibGVQbGFjZSIsImFwcGVuZFRvIiwiZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIiwiZG9tSXRlbSIsImRpc2FibGVkIiwiY2xlYXJCcVN3aXRjaGVyIiwiYm9keSIsInJlbW92ZSIsInJlbW92ZUF0dHIiLCJwcmV2aWV3TWVzc2FnZSIsImlzSHRtbCIsInByaW50IiwiZGF0ZSIsImZyb21DcmVkcyIsInRvQ3JlZHMiLCJ0b0xhYmVsIiwiY2NDbGFzcyIsImNjQ3JlZHMiLCJjY0xhYmVsIiwid2luIiwib3BlbiIsImRvYyIsImJvZHlDbG9uZSIsImNsb25lIiwiYm9keUNsYXNzIiwiaHRtbCIsImNsb3NlIiwic2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24iLCJmQ2FsbGJhY2siLCJrb1RyaWdnZXIiLCJ0aW1lciIsInR5cGUiLCJjYWNoZWQiLCJyZXF1ZXN0QWN0aW9uIiwicmVxdWVzdFBhcmFtZXRlcnMiLCJSZXN1bHQiLCJUcnVlUmVzdWx0IiwiRmFsc2VSZXN1bHQiLCJzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiIsInNldHRpbmdzU2F2ZUhlbHBlclN1YnNjcmliZUZ1bmN0aW9uIiwicmVtb3RlIiwic2V0dGluZ05hbWUiLCJmVHJpZ2dlckZ1bmN0aW9uIiwic2F2ZUFkbWluQ29uZmlnIiwic2F2ZVNldHRpbmdzIiwiZmluZEVtYWlsQW5kTGlua3MiLCJBdXRvbGlua2VyIiwibmV3V2luZG93Iiwic3RyaXBQcmVmaXgiLCJ1cmxzIiwiZW1haWwiLCJtZW50aW9uIiwicGhvbmUiLCJoYXNodGFnIiwicmVwbGFjZUZuIiwiZ2V0VHlwZSIsIm1hdGNoZWRUZXh0IiwiaHRtbFRvUGxhaW4iLCJwb3MiLCJpUDEiLCJpUDIiLCJpUDMiLCJjb252ZXJ0QmxvY2txdW90ZSIsImJsb2NrcXVvdGVUZXh0IiwiY29udmVydERpdnMiLCJkaXZUZXh0IiwiY29udmVydFByZSIsImZpeEF0dGlidXRlVmFsdWUiLCJjb252ZXJ0TGlua3MiLCIkZGl2IiwicGxhaW5Ub0h0bWwiLCJwbGFpbiIsImZpbmRFbWFpbEFuZExpbmtzSW5UZXh0IiwiYkluIiwiYkRvIiwiYlN0YXJ0IiwiYU5leHRUZXh0Iiwic0xpbmUiLCJpSW5kZXgiLCJhVGV4dCIsImZvbGRlckxpc3RPcHRpb25zQnVpbGRlciIsImFTeXN0ZW0iLCJhTGlzdCIsImFEaXNhYmxlZCIsImFIZWFkZXJMaW5lcyIsImlVbkRlZXAiLCJmRGlzYWJsZUNhbGxiYWNrIiwiZlZpc2libGVDYWxsYmFjayIsImZSZW5hbWVDYWxsYmFjayIsImJTeXN0ZW0iLCJiQnVpbGRVbnZpc2libGUiLCJvSXRlbSIsImJTZXAiLCJpTGVuIiwiYVJlc3VsdCIsInNEZWVwUHJlZml4IiwiaWQiLCJzeXN0ZW0iLCJzZXBvcmF0b3IiLCJmdWxsTmFtZVJhdyIsInNlbGVjdGFibGUiLCJzdWJTY3JpYmVkIiwiZXhpc3RlbiIsImhhc1N1YlNjcmliZWRTdWJmb2xkZXJzIiwiVXNlciIsIkFycmF5IiwiZGVlcCIsInN1YkZvbGRlcnMiLCJzZWxlY3RFbGVtZW50IiwicmFuZ2UiLCJjcmVhdGVSYW5nZSIsInNlbGVjdE5vZGVDb250ZW50cyIsImFkZFJhbmdlIiwiY3JlYXRlVGV4dFJhbmdlIiwibW92ZVRvRWxlbWVudFRleHQiLCJzZWxlY3QiLCJkZWJvdW5jZSIsIkdsb2JhbHNEYXRhIiwidHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlIiwiY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlIiwiZ2V0Q29uZmlndXJhdGlvbkZyb21TY3JpcHRUYWciLCJjb25maWd1cmF0aW9uIiwicGFyc2UiLCJkaXNwb3NlT25lIiwicHJvcE9yVmFsdWUiLCJkaXNwb3NhYmxlIiwiZGlzcG9zZSIsImRpc3Bvc2VPYmplY3QiLCJkaXNwb3NhYmxlcyIsIm9iamVjdEZvckVhY2giLCJkZWxlZ2F0ZVJ1bk9uRGVzdHJveSIsIm9iamVjdE9yT2JqZWN0cyIsIm9uRGVzdHJveSIsImFwcGVuZFN0eWxlcyIsIiRzdHlsZVRhZyIsIl9fdGhlbWVUaW1lciIsIl9fdGhlbWVBamF4IiwiY2hhbmdlVGhlbWUiLCJ0aGVtZVRyaWdnZXIiLCJ0aGVtZUxpbmsiLCJjbGVhclRpbWVyIiwidGhlbWVTdHlsZSIsIkFuaW1hdGUiLCJhYm9ydCIsImFqYXgiLCJkYXRhVHlwZSIsInRoZW4iLCJhZnRlciIsImNvbXB1dGVkUGFnZW5hdG9ySGVscGVyIiwia29DdXJyZW50UGFnZSIsImtvUGFnZUNvdW50IiwiY3VycmVudFBhZ2UiLCJwYWdlQ291bnQiLCJmQWRkIiwiY3VzdG9tTmFtZSIsImN1cnJlbnQiLCJjdXN0b20iLCJ1bnNoaWZ0IiwiZ2V0RmlsZUV4dGVuc2lvbiIsImZpbGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwb3AiLCJtaW1lQ29udGVudFR5cGUiLCJleHQiLCJNaW1lIiwiaXNUcmFuc3BhcmVudCIsImNvbG9yIiwiZ2V0UmVhbEhlaWdodCIsIiRoY29udCIsInJlc2l6ZUFuZENyb3AiLCJpbWciLCJJbWFnZSIsIm9ubG9hZCIsImRpZmYiLCJjYW52YXMiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZ2V0Q29udGV4dCIsImZpbGxTdHlsZSIsImZpbGxSZWN0IiwiZHJhd0ltYWdlIiwidG9EYXRhVVJMIiwic3JjIiwibWFpbFRvSGVscGVyIiwibWFpbFRvVXJsIiwiUG9wdXBDb21wb3NlVmlld01vZGVsIiwidG8iLCJjYyIsImJjYyIsInF1ZXJ5Iiwic2hvd1NjcmVlblBvcHVwIiwiRW1wdHkiLCJkb21SZWFkeSIsInRpbWVvdXQiLCJTdHJpbmciLCJzdHIiLCJzdGFydCIsIlNFVFRJTkdTIiwiX19ybGFoX2RhdGEiLCJBUFBfU0VUVElOR1MiLCJTeXN0ZW0iLCJzZXR0aW5nc0dldCIsInNldHRpbmdzU2V0IiwiY2FwYSIsIl9fc2l6ZXMiLCIkZG9jIiwiJGJvZHkiLCJwb3NpdGlvbiIsInN0YXJ0TWljcm90aW1lIiwiY29tbXVuaXR5IiwiUkxfQ09NTVVOSVRZIiwicmF0ZUxpbWl0IiwidXNlS2V5Ym9hcmRTaG9ydGN1dHMiLCJzVXNlckFnZW50IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYklFIiwiYkNocm9tZSIsImJTYWZhcmkiLCJiQW5pbWF0aW9uU3VwcG9ydGVkIiwiYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJiSXNIdHRwcyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJodG1sRWRpdG9yRGVmYXVsdENvbmZpZyIsImdyb3VwcyIsImh0bWxFZGl0b3JMYW5nc01hcCIsImJBbGxvd1BkZlByZXZpZXciLCJtaW1lVHlwZXMiLCJWSUVXX01PREVMUyIsInNldHRpbmdzIiwibW92ZUFjdGlvbiIsImxlZnRQYW5lbERpc2FibGVkIiwibGVmdFBhbmVsVHlwZSIsImxlZnRQYW5lbFdpZHRoIiwicG9wdXBWaXNpYmlsaXR5TmFtZXMiLCJvYnNlcnZhYmxlQXJyYXkiLCJwb3B1cFZpc2liaWxpdHkiLCJrZXlTY29wZVJlYWwiLCJBbGwiLCJrZXlTY29wZUZha2UiLCJrZXlTY29wZSIsIk1lbnUiLCJDb21wb3NlIiwiZmlsdGVyIiwiZWwiLCJjbGFzc05hbWUiLCJzZXRTY29wZSIsImdldFNjb3BlIiwiX19BUFBfXyIsImlBamF4RXJyb3JDb3VudCIsImlUb2tlbkVycm9yQ291bnQiLCJpTWVzc2FnZUJvZHlDYWNoZUNvdW50IiwiYlVubG9hZCIsImN1cnJlbnRTY3JlZW4iLCJkZWZhdWx0U2NyZWVuTmFtZSIsIlNDUkVFTlMiLCJWaWV3VHlwZSIsIlBvcHVwIiwiTGVmdCIsIlJpZ2h0IiwiQ2VudGVyIiwiaGlkZUxvYWRpbmciLCJjcmVhdGVDb21tYW5kIiwiYWRkU2V0dGluZ3NWaWV3TW9kZWwiLCJTZXR0aW5nc1ZpZXdNb2RlbENsYXNzIiwidGVtcGxhdGUiLCJsYWJlbE5hbWUiLCJyb3V0ZSIsImlzRGVmYXVsdCIsIl9fcmxTZXR0aW5nc0RhdGEiLCJMYWJlbCIsIlRlbXBsYXRlIiwiUm91dGUiLCJJc0RlZmF1bHQiLCJyZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCIsImRpc2FibGVTZXR0aW5nc1ZpZXdNb2RlbCIsInJvdXRlT2ZmIiwiaGFzaGVyIiwiY2hhbmdlZCIsImFjdGl2ZSIsInJvdXRlT24iLCJzY3JlZW4iLCJzY3JlZW5OYW1lIiwiZ2V0U2NyZWVuUG9wdXAiLCJQb3B1Vmlld01vZGVsQ2xhc3MiLCJoaWRlU2NyZWVuUG9wdXAiLCJWaWV3TW9kZWxDbGFzc1RvSGlkZSIsIk1vZGFsVmlldyIsIl9fdm0iLCJfX2RvbSIsIm1vZGFsVmlzaWJpbGl0eSIsInZtUnVuSG9vayIsImhvb2tOYW1lIiwiVmlld01vZGVsQ2xhc3MiLCJfX25hbWVzIiwicnVuSG9vayIsImJ1aWxkVmlld01vZGVsIiwidm1TY3JlZW4iLCJfX2J1aWxkZWQiLCJ2bURvbSIsInZtIiwiX190eXBlIiwidm1QbGFjZSIsIm9uU2hvd1RyaWdnZXIiLCJvbkhpZGVUcmlnZ2VyIiwidmlld01vZGVsTmFtZSIsIl9fbmFtZSIsInZpZXdNb2RlbE5hbWVzIiwidmlld01vZGVsVGVtcGxhdGVJRCIsIl9fdGVtcGxhdGVJRCIsInZpZXdNb2RlbFBvc2l0aW9uIiwidmlld01vZGVsRG9tIiwiY2FuY2VsQ29tbWFuZCIsImNsb3NlQ29tbWFuZCIsInN0b3JlQW5kU2V0S2V5U2NvcGUiLCJyZXN0b3JlS2V5U2NvcGUiLCJhcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUiLCJyZWdpc3RlclBvcHVwS2V5RG93biIsIlZpZXdNb2RlbENsYXNzVG9TaG93Iiwid2FybVVwU2NyZWVuUG9wdXAiLCJpc1BvcHVwVmlzaWJsZSIsInNjcmVlbk9uUm91dGUiLCJzdWJQYXJ0IiwiaXNTYW1lU2NyZWVuIiwiY3Jvc3MiLCJfX3N0YXJ0ZWQiLCJ2aWV3TW9kZWxzIiwiZGVmZXIiLCJ2aWV3TW9kZWxWaXNpYmlsaXR5IiwiX19jcm9zcyIsInN0YXJ0U2NyZWVucyIsInNjcmVlbnNDbGFzc2VzIiwiQ1NjcmVlbiIsIl9fc3RhcnQiLCJjcm9zc3JvYWRzIiwiY3JlYXRlIiwiYWRkUm91dGUiLCJpbml0aWFsaXplZCIsImFkZCIsInNldEhhc2giLCJoYXNoIiwic2lsZW5jZSIsImNtZCIsInZpZXdEZWNvcmF0b3IiLCJ0ZW1wbGF0ZUlEIiwicG9wdXBEZWNvcmF0b3IiLCJjb21tYW5kRGVjb3JhdG9yIiwiZGVzY3JpcHRvciIsImluaXRpYWxpemVyIiwibm9ybUNhbkV4ZWN1dGUiLCJzZXR0aW5nc01lbnVLZXlzSGFuZGxlciIsIiRpdGVtcyIsImhhbmRsZXIiLCJ1cCIsInNob3J0Y3V0IiwicmVzdWx0SGFzaCIsImVxIiwiVGltZTIwMG1zIiwiSTE4Tl9EQVRBIiwicmFpbmxvb3BJMThOIiwiSTE4Tl9OT1RJRklDQVRJT05fREFUQSIsIkkxOE5fTk9USUZJQ0FUSU9OX01BUCIsIkludmFsaWRUb2tlbiIsIkF1dGhFcnJvciIsIkFjY2Vzc0Vycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwiQ2FwdGNoYUVycm9yIiwiU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUiLCJTb2NpYWxUd2l0dGVyTG9naW5BY2Nlc3NEaXNhYmxlIiwiU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlIiwiRG9tYWluTm90QWxsb3dlZCIsIkFjY291bnROb3RBbGxvd2VkIiwiQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCIsIkFjY291bnRUd29GYWN0b3JBdXRoRXJyb3IiLCJDb3VsZE5vdFNhdmVOZXdQYXNzd29yZCIsIkN1cnJlbnRQYXNzd29yZEluY29ycmVjdCIsIk5ld1Bhc3N3b3JkU2hvcnQiLCJOZXdQYXNzd29yZFdlYWsiLCJOZXdQYXNzd29yZEZvcmJpZGRlbiIsIkNvbnRhY3RzU3luY0Vycm9yIiwiQ2FudEdldE1lc3NhZ2VMaXN0IiwiQ2FudEdldE1lc3NhZ2UiLCJDYW50RGVsZXRlTWVzc2FnZSIsIkNhbnRNb3ZlTWVzc2FnZSIsIkNhbnRDb3B5TWVzc2FnZSIsIkNhbnRTYXZlTWVzc2FnZSIsIkNhbnRTZW5kTWVzc2FnZSIsIkludmFsaWRSZWNpcGllbnRzIiwiQ2FudFNhdmVGaWx0ZXJzIiwiQ2FudEdldEZpbHRlcnMiLCJGaWx0ZXJzQXJlTm90Q29ycmVjdCIsIkNhbnRDcmVhdGVGb2xkZXIiLCJDYW50UmVuYW1lRm9sZGVyIiwiQ2FudERlbGV0ZUZvbGRlciIsIkNhbnREZWxldGVOb25FbXB0eUZvbGRlciIsIkNhbnRTdWJzY3JpYmVGb2xkZXIiLCJDYW50VW5zdWJzY3JpYmVGb2xkZXIiLCJDYW50U2F2ZVNldHRpbmdzIiwiQ2FudFNhdmVQbHVnaW5TZXR0aW5ncyIsIkRvbWFpbkFscmVhZHlFeGlzdHMiLCJDYW50SW5zdGFsbFBhY2thZ2UiLCJDYW50RGVsZXRlUGFja2FnZSIsIkludmFsaWRQbHVnaW5QYWNrYWdlIiwiVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlIiwiTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSIsIkxpY2Vuc2luZ0V4cGlyZWQiLCJMaWNlbnNpbmdCYW5uZWQiLCJEZW1vU2VuZE1lc3NhZ2VFcnJvciIsIkRlbW9BY2NvdW50RXJyb3IiLCJBY2NvdW50QWxyZWFkeUV4aXN0cyIsIkFjY291bnREb2VzTm90RXhpc3QiLCJNYWlsU2VydmVyRXJyb3IiLCJJbnZhbGlkSW5wdXRBcmd1bWVudCIsIlVua25vd25Ob3RpZmljYXRpb24iLCJVbmtub3duRXJyb3IiLCJ2YWx1ZUxpc3QiLCJkZWZhdWxWYWx1ZSIsInZhbHVlTmFtZSIsImkxOG5Ub05vZGUiLCJlbGVtZW50cyIsImFuaW1hdGUiLCJsZXR0ZXJmeCIsInJlbG9hZERhdGEiLCJtb21lbnRvclJlbG9hZCIsImluaXROb3RpZmljYXRpb25MYW5ndWFnZSIsImluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlIiwic3RhcnRDYWxsYmFjayIsImxhbmdDYWxsYmFjayIsImdldE5vdGlmaWNhdGlvbiIsImNvZGUiLCJtZXNzYWdlIiwiZGVmQ29kZSIsIkNsaWVudFZpZXdFcnJvciIsImdldE5vdGlmaWNhdGlvbkZyb21SZXNwb25zZSIsInJlc3BvbnNlIiwiRXJyb3JDb2RlIiwiRXJyb3JNZXNzYWdlIiwiZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlIiwiRmlsZUlzVG9vQmlnIiwiRmlsZVBhcnRpYWxseVVwbG9hZGVkIiwiRmlsZU5vVXBsb2FkZWQiLCJNaXNzaW5nVGVtcEZvbGRlciIsIkZpbGVPblNhdmVpbmdFcnJvciIsInJlbG9hZCIsImFkbWluIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJsYW5nTGluayIsImNhY2hlIiwiaXNSdGwiLCJST09UIiwiSEFTSF9QUkVGSVgiLCJTRVJWRVJfUFJFRklYIiwiU1VCX1FVRVJZX1BSRUZJWCIsIlZFUlNJT04iLCJXRUJfUFJFRklYIiwiVkVSU0lPTl9QUkVGSVgiLCJTVEFUSUNfUFJFRklYIiwiQURNSU5fSE9TVF9VU0UiLCJBRE1JTl9QQVRIIiwiQVVUSF9QUkVGSVgiLCJwb3B1bGF0ZUF1dGhTdWZmaXgiLCJzdWJRdWVyeVByZWZpeCIsInJvb3QiLCJzdGFydHVwVXJsIiwicm9vdEFkbWluIiwicm9vdFVzZXIiLCJhdHRhY2htZW50UmF3IiwiZG93bmxvYWQiLCJjdXN0b21TcGVjU3VmZml4IiwiYXR0YWNobWVudERvd25sb2FkIiwiYXR0YWNobWVudFByZXZpZXciLCJhdHRhY2htZW50VGh1bWJuYWlsUHJldmlldyIsImF0dGFjaG1lbnRQcmV2aWV3QXNQbGFpbiIsImF0dGFjaG1lbnRGcmFtZWQiLCJzZXJ2ZXJSZXF1ZXN0IiwidXBsb2FkIiwidXBsb2FkQ29udGFjdHMiLCJ1cGxvYWRCYWNrZ3JvdW5kIiwibWVzc2FnZVZpZXdMaW5rIiwicmVxdWVzdEhhc2giLCJtZXNzYWdlRG93bmxvYWRMaW5rIiwiYXZhdGFyTGluayIsInB1YmxpY0xpbmsiLCJ1c2VyQmFja2dyb3VuZCIsInBocEluZm8iLCJsYW5nIiwiaXNBZG1pbiIsImV4cG9ydENvbnRhY3RzVmNmIiwiZXhwb3J0Q29udGFjdHNDc3YiLCJzb2NpYWxHb29nbGUiLCJ4YXV0aCIsInNvY2lhbFR3aXR0ZXIiLCJzb2NpYWxGYWNlYm9vayIsInN0YXRpY1ByZWZpeCIsInBhdGgiLCJlbXB0eUNvbnRhY3RQaWMiLCJzb3VuZCIsIm5vdGlmaWNhdGlvbk1haWxJY29uIiwib3BlblBncEpzIiwib3BlblBncFdvcmtlckpzIiwib3BlblBncFdvcmtlclBhdGgiLCJ0aGVtZVByZXZpZXdMaW5rIiwiaW5ib3giLCJpbmJveEZvbGRlck5hbWUiLCJhYm91dCIsIm1haWxCb3giLCJmb2xkZXIiLCJwYWdlIiwic2VhcmNoIiwidGhyZWFkVWlkIiwicmVzdWx0VGhyZWFkVWlkIiwiUmVtb3RlQWRtaW5BamF4Iiwib1JlcXVlc3RzIiwiYWRtaW5Mb2dpbiIsInNMb2dpbiIsInNQYXNzd29yZCIsImRlZmF1bHRSZXF1ZXN0IiwiYWRtaW5Mb2dvdXQiLCJvRGF0YSIsInNhdmVBZG1pbkNvbmZpZ0hlbHBlciIsInZhbHVlRm4iLCJkb21haW5MaXN0IiwiYkluY2x1ZGVBbGlhc2VzIiwicGx1Z2luTGlzdCIsInBhY2thZ2VzTGlzdCIsImNvcmVEYXRhIiwidXBkYXRlQ29yZURhdGEiLCJwYWNrYWdlSW5zdGFsbCIsIm9QYWNrYWdlIiwiZmlsZSIsInBhY2thZ2VEZWxldGUiLCJkb21haW4iLCJzTmFtZSIsInBsdWdpbiIsImRvbWFpbkRlbGV0ZSIsImRvbWFpbkRpc2FibGUiLCJiRGlzYWJsZWQiLCJOYW1lIiwiRGlzYWJsZWQiLCJwbHVnaW5TZXR0aW5nc1VwZGF0ZSIsIm9Db25maWciLCJsaWNlbnNpbmciLCJiRm9yY2UiLCJGb3JjZSIsImxpY2Vuc2luZ0FjdGl2YXRlIiwic0RvbWFpbiIsInNLZXkiLCJEb21haW4iLCJLZXkiLCJwbHVnaW5EaXNhYmxlIiwiY3JlYXRlRG9tYWluQWxpYXMiLCJzQWxpYXMiLCJBbGlhcyIsImNyZWF0ZU9yVXBkYXRlRG9tYWluIiwiYkNyZWF0ZSIsInNJbmNIb3N0IiwiaUluY1BvcnQiLCJzSW5jU2VjdXJlIiwiYkluY1Nob3J0TG9naW4iLCJiVXNlU2lldmUiLCJzU2lldmVBbGxvd1JhdyIsInNTaWV2ZUhvc3QiLCJpU2lldmVQb3J0Iiwic1NpZXZlU2VjdXJlIiwic091dEhvc3QiLCJpT3V0UG9ydCIsInNPdXRTZWN1cmUiLCJiT3V0U2hvcnRMb2dpbiIsImJPdXRBdXRoIiwiYk91dFBocE1haWwiLCJzV2hpdGVMaXN0IiwidGVzdENvbm5lY3Rpb25Gb3JEb21haW4iLCJ0ZXN0Q29udGFjdHMiLCJzYXZlTmV3QWRtaW5QYXNzd29yZCIsImFkbWluUGluZyIsIkFic3RyYWN0QWpheFJlbW90ZSIsIlNVQlMiLCJzdWIiLCJzdWJGdW5jIiwic3ViTmFtZSIsInB1YiIsIlBsdWdpbnMiLCJpdGVtcyIsIk1FU1NBR0VTX1BFUl9QQUdFIiwiTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTIiwiQ09OVEFDVFNfUEVSX1BBR0UiLCJERUZBVUxUX0FKQVhfVElNRU9VVCIsIlNFQVJDSF9BSkFYX1RJTUVPVVQiLCJTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUIiwiU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCIsIkNPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUIiwiVU5VU0VEX09QVElPTl9WQUxVRSIsIkNMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSIsIklNQVBfREVGQVVMVF9QT1JUIiwiSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUIiwiU01UUF9ERUZBVUxUX1BPUlQiLCJTTVRQX0RFRkFVTFRfU0VDVVJFX1BPUlQiLCJTSUVWRV9ERUZBVUxUX1BPUlQiLCJNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQiLCJBSkFYX0VSUk9SX0xJTUlUIiwiVE9LRU5fRVJST1JfTElNSVQiLCJSQUlOTE9PUF9UUklBTF9LRVkiLCJEQVRBX0lNQUdFX1VTRVJfRE9UX1BJQyIsIkRBVEFfSU1BR0VfVFJBTlNQX1BJQyIsIkRBVEFfSU1BR0VfTEFaWV9QTEFDRUhPTERFUl9QSUMiLCJBYnN0cmFjdFZpZXdOZXh0IiwiTm9uZSIsInNDdXJyZW50S2V5U2NvcGUiLCJzRGVmYXVsdEtleVNjb3BlIiwiYkRpc2FiZUNsb3NlT25Fc2MiLCJFc2MiLCJCYWNrc3BhY2UiLCJTb2NpYWxTdG9yZSIsImdvb2dsZSIsInR3aXR0ZXIiLCJmYWNlYm9vayIsImRyb3Bib3giLCJjbGllbnRJRCIsImNsaWVudFNlY3JldCIsImFwaUtleSIsImxvYWRpbmciLCJ1c2VyTmFtZSIsImxvZ2dpbmVkIiwiYXV0aCIsImF1dGhGYXN0IiwiZHJpdmUiLCJwcmV2aWV3IiwiY2xpZW50U2V0dGluZ3MiLCJhcGlLZXlTZXR0aW5ncyIsImFwcElEIiwiYXBwU2VjcmV0Iiwic3VwcG9ydGVkIiwiY29uc3VtZXJLZXkiLCJjb25zdW1lclNlY3JldCIsInBvcHVsYXRlIiwiYXBwZW5kRHJvcGJveCIsIkRyb3Bib3giLCJnZXRFbGVtZW50QnlJZCIsInNjcmlwdCIsImFwcGVuZENoaWxkIiwiQWJzdHJhY3RDb21wb25lbnQiLCJmdW5jVG9EaXNwb3NlIiwiY29tcG9uZW50RXhwb3J0SGVscGVyIiwiQ2xhc3NPYmplY3QiLCJjcmVhdGVWaWV3TW9kZWwiLCJjb21wb25lbnRJbmZvIiwiaW5saW5lIiwiU0lNUExFX0hPT0tTIiwiVVNFUl9WSUVXX01PREVMU19IT09LUyIsIkFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTIiwiYWRkSG9vayIsImNhbGxiYWNrIiwibWFpblNldHRpbmdzR2V0IiwicmVtb3RlUmVxdWVzdCIsInBhcmFtZXRlcnMiLCJhZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluIiwicnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyIsIktub2luIiwidmlldyIsInBsdWdpblNlY3Rpb24iLCJwbHVnaW5zIiwiQ29yZUFkbWluU3RvcmUiLCJjb3JlUmVhbCIsImNvcmVDaGFubmVsIiwiY29yZVR5cGUiLCJjb3JlVXBkYXRhYmxlIiwiY29yZUFjY2VzcyIsImNvcmVXYXJuaW5nIiwiY29yZUNoZWNraW5nIiwiY29yZVVwZGF0aW5nIiwiY29yZVZlcnNpb24iLCJjb3JlUmVtb3RlVmVyc2lvbiIsImNvcmVSZW1vdGVSZWxlYXNlIiwiY29yZVZlcnNpb25Db21wYXJlIiwiX21vbWVudCIsIl9tb21lbnROb3ciLCJ1cGRhdGVNb21lbnROb3ciLCJ1cGRhdGVNb21lbnROb3dVbml4IiwidW5peCIsIm1vbWVudE5vdyIsIm1vbWVudE5vd1VuaXgiLCJzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIiLCJzdWJ0cmFjdCIsImZvcm1hdCIsImZvcm1hdEN1c3RvbVNob3J0RGF0ZSIsIm5vdyIsImZyb21Ob3ciLCJUSU1FIiwieWVhciIsInRpbWVTdGFtcEluVVRDIiwiZm9ybWF0U3RyIiwidGltZSIsImdldEFwcCIsIkxhbmd1YWdlU3RvcmUiLCJsYW5ndWFnZXMiLCJsYW5ndWFnZXNBZG1pbiIsImxhbmd1YWdlQWRtaW4iLCJ1c2VyTGFuZ3VhZ2UiLCJ1c2VyTGFuZ3VhZ2VBZG1pbiIsImFMYW5ndWFnZXMiLCJhTGFuZ3VhZ2VzQWRtaW4iLCJBcHBBZG1pblN0b3JlIiwiZGV0ZXJtaW5lVXNlckxhbmd1YWdlIiwiZGV0ZXJtaW5lVXNlckRvbWFpbiIsIndlYWtQYXNzd29yZCIsInVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyIsImRhdGFGb2xkZXJBY2Nlc3MiLCJnZXQiLCJBYnN0cmFjdEFwcFN0b3JlIiwiZGtpbVN0YXR1cyIsImRraW1WYWx1ZSIsImNsZWFyRHVwbGljYXRlTmFtZSIsIm5ld0luc3RhbmNlRnJvbUpzb24iLCJpbml0QnlKc29uIiwidmFsaWRhdGUiLCJ3aXRob3V0TmFtZSIsIkVtYWlsIiwiRGtpbVN0YXR1cyIsIkRraW1WYWx1ZSIsImZyaWVuZGx5VmlldyIsIndyYXBXaXRoTGluayIsInVzZUVuY29kZUh0bWwiLCJwYXJzZWRSZXN1bHQiLCJhZGRyZXNzcGFyc2VyIiwiZXhpc3RzIiwiYWRkcmVzcyIsImNvbXBhY3QiLCJlbWFpbEFkZHJlc3MiLCJBYnN0cmFjdElucHV0IiwibGFiZWwiLCJwcmVMYWJlbCIsImVuYWJsZSIsInBsYWNlaG9sZGVyIiwibGFiZWxlZCIsInByZUxhYmVsZWQiLCJ0cmlnZ2VyZWQiLCJjbGFzc0ZvclRyaWdnZXIiLCJzdWZmaXhWYWx1ZSIsInNldFRyaWdnZXJTdGF0ZSIsIkNhcGFBZG1pblN0b3JlIiwiYWRkaXRpb25hbEFjY291bnRzIiwiaWRlbnRpdGllcyIsImdyYXZhdGFyIiwiYXR0YWNobWVudFRodW1ibmFpbHMiLCJzaWV2ZSIsImZpbHRlcnMiLCJ0aGVtZXMiLCJvcGVuUEdQIiwidHdvRmFjdG9yQXV0aCIsInR3b0ZhY3RvckF1dGhGb3JjZSIsInRlbXBsYXRlcyIsIkFkZGl0aW9uYWxBY2NvdW50cyIsIklkZW50aXRpZXMiLCJHcmF2YXRhciIsIkF0dGFjaG1lbnRUaHVtYm5haWxzIiwiU2lldmUiLCJGaWx0ZXJzIiwiVGhlbWVzIiwiVXNlckJhY2tncm91bmQiLCJPcGVuUEdQIiwiVHdvRmFjdG9yIiwiVHdvRmFjdG9yRm9yY2UiLCJUZW1wbGF0ZXMiLCJQYWNrYWdlQWRtaW5TdG9yZSIsInBhY2thZ2VzIiwicGFja2FnZXNSZWFsIiwicGFja2FnZXNNYWluVXBkYXRhYmxlIiwiamFzc2wiLCJhc3luYyIsImFsbCIsIm9uZXJyb3IiLCJUaGVtZVN0b3JlIiwidGhlbWVCYWNrZ3JvdW5kTmFtZSIsInRoZW1lQmFja2dyb3VuZEhhc2giLCJQbHVnaW5BZG1pblN0b3JlIiwiZXJyb3IiLCJMaWNlbnNlQWRtaW5TdG9yZSIsImxpY2Vuc2luZ1Byb2Nlc3MiLCJsaWNlbnNlVmFsaWQiLCJsaWNlbnNlRXhwaXJlZCIsImxpY2Vuc2VFcnJvciIsImxpY2Vuc2VUcmlnZ2VyIiwiQWJzdHJhY3RTY3JlZW4iLCJzU2NyZWVuTmFtZSIsImFWaWV3TW9kZWxzIiwicm91dGVzIiwib0Nyb3NzIiwiZk1hdGNoZXIiLCJvblJvdXRlIiwicnVsZXMiLCJEb21haW5BZG1pblN0b3JlIiwiZG9tYWlucyIsImRvbWFpbnNXaXRob3V0QWxpYXNlcyIsImFsaWFzIiwiQWJzdHJhY3RDaGVja2JveCIsImRpc2FibGUiLCJyZWFkT25seSIsImludmVydGVkIiwibGFiZWxBbmltYXRlZCIsIkNoZWNrYm94Q29tcG9uZW50Iiwib25CbHVyIiwib25SZWFkeSIsIm9uTW9kZUNoYW5nZSIsIiRlbGVtZW50IiwicmVzaXplRWRpdG9yIiwicnVuT25CbHVyIiwiYmx1clRyaWdnZXIiLCJibHVyVGltZXIiLCJmb2N1c1RyaWdnZXIiLCJtb2RlIiwiY2xlYXJDYWNoZWRTaWduYXR1cmUiLCJleGVjQ29tbWFuZCIsImNsZWFyQ2FjaGUiLCJzZXRTaWduYXR1cmUiLCJzaWduYXR1cmUiLCJpbnNlcnRCZWZvcmUiLCJjaGVja0RpcnR5IiwicmVzZXREaXJ0eSIsImdldERhdGEiLCJ3cmFwSXNIdG1sIiwiX19wbGFpbiIsImdldFJhd0RhdGEiLCJtb2RlVG9nZ2xlIiwic2V0TW9kZSIsInNldEh0bWwiLCJzZXRQbGFpbiIsIl9faW5pdGVkIiwic2V0RGF0YSIsInJlcGxhY2VIdG1sIiwiZmluZCIsInNldFJhd0RhdGEiLCJpbml0RnVuYyIsImNvbmZpZyIsImFsbG93U291cmNlIiwiYml0aSIsInRvb2xiYXJHcm91cHMiLCJfX2NmZ0luaXRlZCIsInJlbW92ZUJ1dHRvbnMiLCJyZW1vdmVQbHVnaW5zIiwiZW50ZXJNb2RlIiwiQ0tFRElUT1IiLCJFTlRFUl9CUiIsInNoaWZ0RW50ZXJNb2RlIiwiRU5URVJfUCIsImVudiIsImlzQ29tcGF0aWJsZSIsIlRhYiIsIkZpbGVSZWFkZXIiLCJkYXRhVHJhbnNmZXIiLCJnZXRGaWxlc0NvdW50IiwiZ2V0RmlsZSIsImltYWdlSWQiLCJyZWFkZXIiLCJvbmxvYWRlbmQiLCJyZWFkQXNEYXRhVVJMIiwicmVtb3ZlTWVudUl0ZW0iLCJfX3Jlc2l6YWJsZSIsIl9faW5pdEVkaXRvciIsImhhc0ZvY3VzIiwiZm9jdXNNYW5hZ2VyIiwiaW5uZXJIZWlnaHQiLCJzZXRSZWFkT25seSIsInN0eWxlcyIsInJhaW5sb29wIiwicmFpbmxvb3BUaXAiLCJyYWlubG9vcEVycm9yVGlwIiwiQXNrUG9wdXBWaWV3IiwicG9wdXAiLCJhc2tEZXNjIiwieWVzQnV0dG9uIiwibm9CdXR0b24iLCJ5ZXNGb2N1cyIsIm5vRm9jdXMiLCJmWWVzQWN0aW9uIiwiZk5vQWN0aW9uIiwiYkZvY3VzWWVzT25TaG93IiwiUG9wdXBBc2siLCJjbGVhclBvcHVwIiwieWVzQ2xpY2siLCJub0NsaWNrIiwib25TaG93IiwiZlllc0Z1bmMiLCJmTm9GdW5jIiwiaXNGb2N1c1llc09uU2hvdyIsIm9uU2hvd1dpdGhEZWxheSIsIm9uQnVpbGQiLCJMYW5ndWFnZXNQb3B1cFZpZXciLCJmTGFuZyIsImxhbmdzIiwidXNlciIsInNlbGVjdGVkIiwiZnVsbE5hbWUiLCJzZXRMYW5ndWFnZVNlbGVjdGlvbiIsImxhbmd1YWdlVG9vbHRpcE5hbWUiLCJjdXJyZW50TGFuZyIsIm9uQmVmb3JlU2hvdyIsImZMYW5ndWFnZSIsImNoYW5nZUxhbmd1YWdlIiwiQXBwIiwicmwiLCJwbHVnaW5TZXR0aW5nc0dldCIsInBsdWdpblJlbW90ZVJlcXVlc3QiLCJFbnVtcyIsIl9fQVBQX0JPT1QiLCJmRXJyb3JDYWxsYmFjayIsInJhaW5sb29wVEVNUExBVEVTIiwiaW5uZXJIVE1MIiwiYm9vdHN0YXJ0IiwiVGltZTEwbXMiLCJhbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MiLCJhbGxvd0xhbmd1YWdlc09uTG9naW4iLCJuZXdNb3ZlVG9Gb2xkZXIiLCJpbnRlcmZhY2VBbmltYXRpb24iLCJhbmltIiwicHJlbSIsImRlZmF1bHRSZXNwb25zZSIsInNSZXF1ZXN0QWN0aW9uIiwic1R5cGUiLCJiQ2FjaGVkIiwib1JlcXVlc3RQYXJhbWV0ZXJzIiwiZkNhbGwiLCJTdWNjZXNzIiwiVW5sb2FkIiwibG9naW5BbmRMb2dvdXRSZWxvYWQiLCJDbGVhckF1dGgiLCJMb2dvdXQiLCJjbGVhckNsaWVudFNpZGVUb2tlbiIsIkFib3J0IiwiYWpheFJlcXVlc3QiLCJmUmVzdWx0Q2FsbGJhY2siLCJpVGltZU91dCIsInNHZXRBZGQiLCJhYm9ydEFjdGlvbnMiLCJpc1Bvc3QiLCJoZWFkZXJzIiwiQWN0aW9uIiwiYWN0aW9uVG9BYm9ydCIsIl9fYWJvcnRlZCIsIlhUb2tlbiIsIm9EZWZBamF4IiwiZ2xvYmFsIiwiYWx3YXlzIiwiVGltZSIsImNhdGNoIiwic0FjdGlvbiIsIm9QYXJhbWV0ZXJzIiwiaVRpbWVvdXQiLCJhQWJvcnRBY3Rpb25zIiwianNFcnJvciIsInNNZXNzYWdlIiwic0ZpbGVOYW1lIiwiaUxpbmVObyIsInNMb2NhdGlvbiIsInNIdG1sQ2FwYSIsImlUaW1lIiwianNJbmZvIiwibURhdGEiLCJiSXNFcnJvciIsImdldFB1YmxpY0tleSIsImpzVmVyc2lvbiIsInNWZXJzaW9uIiwiQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiIsIm1lbnUiLCJvQ3VycmVudFN1YlNjcmVlbiIsIm9WaWV3TW9kZWxQbGFjZSIsInNldHVwU2V0dGluZ3MiLCJzZXR0aW5nc1NjcmVlbiIsIlJvdXRlZFNldHRpbmdzVmlld01vZGVsIiwidmlld01vZGVsUGxhY2UiLCJTZXR0aW5nc1ZpZXdNb2RlbCIsIkRpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwiLCJ0bXBsIiwib25IaWRlIiwiUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwiLCJEZWZhdWx0Vmlld01vZGVsIiwiZGVmYXVsdFJvdXRlIiwic3VibmFtZSIsIm5vcm1hbGl6ZV8iLCJycXVlc3QiLCJ2YWxzIiwiQWJzdHJhY3RBcHAiLCJSZW1vdGUiLCJnb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUiLCJpc0xvY2FsQXV0b2NvbXBsZXRlIiwiaWZyYW1lIiwibGFzdEVycm9yVGltZSIsIm9yaWdpbmFsRXZlbnQiLCJmaWxlbmFtZSIsImxpbmVubyIsIkV2ZW50cyIsImlIIiwiaVciLCJUaW1lNTBtcyIsIlRpbWU1cyIsImdldEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiIsImRlZmF1bHRfIiwiYXBwbGljYXRpb25Db25maWd1cmF0aW9uIiwib0xpbmsiLCJocmVmIiwiY3JlYXRlRXZlbnQiLCJvRSIsIk1vdXNlRXZlbnRzIiwiaW5pdEV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImdvb2dsZVByZXZpZXdTdXBwb3J0ZWQiLCJzZXRXaW5kb3dUaXRsZSIsInJlZGlyZWN0VG9BZG1pblBhbmVsIiwiX19ybGFoX2NsZWFyIiwic2V0Q2xpZW50U2lkZVRva2VuIiwidG9rZW4iLCJfX3JsYWhfc2V0IiwibG9nb3V0IiwiaW5JZnJhbWUiLCJjdXN0b21Mb2dvdXRMaW5rIiwicGFyZW50IiwiaGlzdG9yeUJhY2siLCJoaXN0b3J5IiwiYmFjayIsIm1vYmlsZSIsImNvbXBvbmVudHMiLCJyZWdpc3RlciIsIlRpbWUxcyIsInNzbSIsImFkZFN0YXRlIiwib25MZWF2ZSIsIkFic3RyYWN0Qm9vdCIsIkFic3RyYWN0UmFkaW8iLCJTYXZlVHJpZ2dlckNvbXBvbmVudCIsInZlcnRpY2FsQWxpZ24iLCJzZXRTdGF0ZSIsIklucHV0Q29tcG9uZW50IiwiU2VsZWN0Q29tcG9uZW50Iiwib3B0aW9uc1RleHQiLCJvcHRpb25zVmFsdWUiLCJvcHRpb25zQ2FwdGlvbiIsIlJhZGlvQ29tcG9uZW50IiwiREVGQVVMVF9ST1dTIiwiVGV4dEFyZWFDb21wb25lbnQiLCJyb3dzIiwic3BlbGxjaGVjayIsIkRhdGVDb21wb25lbnQiLCJTY3JpcHRDb21wb25lbnQiLCJ0ZW1wbGF0ZU5vZGVzIiwib3V0ZXJIVE1MIiwicmVwbGFjZVdpdGgiLCJub2RlVmFsdWUiLCJDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50IiwiYW5pbWF0aW9uQm94IiwiYW5pbWF0aW9uQ2hlY2ttYXJrIiwiYW5pbWF0aW9uQm94U2V0VHJ1ZSIsImFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUiLCJ0cmlnZ2VyQW5pbWF0aW9uIiwiYm94IiwiQWRtaW5BcHAiLCJyZWxvYWREb21haW5MaXN0IiwiRG9tYWluU3RvcmUiLCJkZWxldGVBY2Nlc3MiLCJyZWxvYWRQbHVnaW5MaXN0IiwiUGx1Z2luU3RvcmUiLCJFbmFibGVkIiwiY29uZmlndXJlZCIsIkNvbmZpZ3VyZWQiLCJyZWxvYWRQYWNrYWdlc0xpc3QiLCJQYWNrYWdlU3RvcmUiLCJSZWFsIiwiTWFpblVwZGF0YWJsZSIsIkxpc3QiLCJjYW5CZUluc3RhbGxlZCIsIkNvcmVTdG9yZSIsInJlbG9hZENvcmVEYXRhIiwiQ2hhbm5lbCIsIlR5cGUiLCJVcGRhdGFibGUiLCJBY2Nlc3MiLCJXYXJuaW5nIiwiVmVyc2lvbiIsIlJlbW90ZVZlcnNpb24iLCJSZW1vdGVSZWxlYXNlIiwiVmVyc2lvbkNvbXBhcmUiLCJyZWxvYWRMaWNlbnNpbmciLCJMaWNlbnNlU3RvcmUiLCJFeHBpcmVkIiwiQXBwU3RvcmUiLCJib290ZW5kIiwiYm9vdGVuZENhbGxiYWNrIiwicHJvZ3Jlc3NKcyIsIkNhcGFTdG9yZSIsIlNldHRpbmdzQWRtaW5TY3JlZW4iLCJMb2dpbkFkbWluU2NyZWVuIiwiRG9tYWluUG9wdXBWaWV3Iiwic2VsZiIsImNhbkJlU2F2ZWQiLCJjYW5CZVRlc3RlZCIsImVkaXQiLCJzYXZpbmciLCJzYXZpbmdFcnJvciIsInNpZXZlU2V0dGluZ3MiLCJ0ZXN0aW5nIiwidGVzdGluZ0RvbmUiLCJ0ZXN0aW5nSW1hcEVycm9yIiwidGVzdGluZ1NpZXZlRXJyb3IiLCJ0ZXN0aW5nU210cEVycm9yIiwidGVzdGluZ0ltYXBFcnJvckRlc2MiLCJ0ZXN0aW5nU2lldmVFcnJvckRlc2MiLCJ0ZXN0aW5nU210cEVycm9yRGVzYyIsImltYXBTZXJ2ZXJGb2N1cyIsInNpZXZlU2VydmVyRm9jdXMiLCJzbXRwU2VydmVyRm9jdXMiLCJpbWFwU2VydmVyIiwiaW1hcFBvcnQiLCJpbWFwU2VjdXJlIiwiaW1hcFNob3J0TG9naW4iLCJ1c2VTaWV2ZSIsInNpZXZlQWxsb3dSYXciLCJzaWV2ZVNlcnZlciIsInNpZXZlUG9ydCIsInNpZXZlU2VjdXJlIiwic210cFNlcnZlciIsInNtdHBQb3J0Iiwic210cFNlY3VyZSIsInNtdHBTaG9ydExvZ2luIiwic210cEF1dGgiLCJzbXRwUGhwTWFpbCIsIndoaXRlTGlzdCIsImFsaWFzTmFtZSIsImVuYWJsZVNtYXJ0UG9ydHMiLCJhbGxvd1NpZXZlIiwiaGVhZGVyVGV4dCIsImRvbWFpbkRlc2MiLCJkb21haW5Jc0NvbXB1dGVkIiwidXNlUGhwTWFpbCIsInBvcnQiLCJJbWFwU3NsIiwiSW1hcCIsIlNtdHBTc2wiLCJTbXRwU3RhcnRUbHMiLCJTbXRwIiwiY3JlYXRlT3JBZGRDb21tYW5kIiwib25Eb21haW5DcmVhdGVPclNhdmVSZXNwb25zZSIsInRlc3RDb25uZWN0aW9uQ29tbWFuZCIsIm9uVGVzdENvbm5lY3Rpb25SZXNwb25zZSIsIndoaXRlTGlzdENvbW1hbmQiLCJiYWNrQ29tbWFuZCIsInNpZXZlQ29tbWFuZCIsImNsZWFyVGVzdGluZyIsInNSZXN1bHQiLCJiSW1hcCIsImJTaWV2ZSIsIm9Eb21haW4iLCJjbGVhckZvcm0iLCJJbmNIb3N0IiwiSW5jUG9ydCIsIkluY1NlY3VyZSIsIkluY1Nob3J0TG9naW4iLCJVc2VTaWV2ZSIsIlNpZXZlQWxsb3dSYXciLCJTaWV2ZUhvc3QiLCJTaWV2ZVBvcnQiLCJTaWV2ZVNlY3VyZSIsIk91dEhvc3QiLCJPdXRQb3J0IiwiT3V0U2VjdXJlIiwiT3V0U2hvcnRMb2dpbiIsIk91dEF1dGgiLCJPdXRVc2VQaHBNYWlsIiwiV2hpdGVMaXN0IiwiQWxpYXNOYW1lIiwiTWVudVNldHRpbmdzQWRtaW5WaWV3IiwiUGFuZVNldHRpbmdzQWRtaW5WaWV3IiwiYnJhbmRpbmciLCJHZW5lcmFsQWRtaW5TZXR0aW5ncyIsIkRvbWFpbnNBZG1pblNldHRpbmdzIiwiTG9naW5BZG1pblNldHRpbmdzIiwiQ29udGFjdHNBZG1pblNldHRpbmdzIiwiU2VjdXJpdHlBZG1pblNldHRpbmdzIiwiU29jaWFsQWRtaW5TZXR0aW5ncyIsIlBsdWdpbnNBZG1pblNldHRpbmdzIiwiUGFja2FnZXNBZG1pblNldHRpbmdzIiwiQWJvdXRBZG1pblNldHRpbmdzIiwiY2FwYVRoZW1lcyIsImNhcGFVc2VyQmFja2dyb3VuZCIsImNhcGFHcmF2YXRhciIsImNhcGFBZGRpdGlvbmFsQWNjb3VudHMiLCJjYXBhSWRlbnRpdGllcyIsImNhcGFBdHRhY2htZW50VGh1bWJuYWlscyIsImNhcGFUZW1wbGF0ZXMiLCJtYWluQXR0YWNobWVudExpbWl0IiwiQml0TGVuZ3RoMTAyNCIsInVwbG9hZERhdGEiLCJ1cGxvYWREYXRhRGVzYyIsInVwbG9hZF9tYXhfZmlsZXNpemUiLCJwb3N0X21heF9zaXplIiwidGhlbWVzT3B0aW9ucyIsIm9wdFZhbHVlIiwib3B0VGV4dCIsImxhbmd1YWdlRnVsbE5hbWUiLCJsYW5ndWFnZUFkbWluRnVsbE5hbWUiLCJhdHRhY2htZW50TGltaXRUcmlnZ2VyIiwibGFuZ3VhZ2VUcmlnZ2VyIiwibGFuZ3VhZ2VBZG1pblRyaWdnZXIiLCJmMSIsImYyIiwiZjMiLCJmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIiLCJzYXZlU2V0dGluZ3NTdGVwIiwidHJhbnNsYXRvclJlbG9hZCIsInNlbGVjdExhbmd1YWdlIiwic2VsZWN0TGFuZ3VhZ2VBZG1pbiIsInBocEluZm9MaW5rIiwidmlzaWJpbGl0eSIsImRvbWFpbkZvckRlbGV0aW9uIiwib25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCIsIm9uRG9tYWluTG9hZFJlcXVlc3QiLCJjcmVhdGVEb21haW4iLCJkZWxldGVEb21haW4iLCJkaXNhYmxlRG9tYWluIiwib0RvbSIsImRvbWFpbkl0ZW0iLCJkZWZhdWx0RG9tYWluIiwiZHVtbXkiLCJwZG9Ec24iLCJwZG9Vc2VyIiwiZW5hYmxlQ29udGFjdHMiLCJjb250YWN0c1N5bmMiLCJzdXBwb3J0ZWRUeXBlcyIsInR5cGVzIiwiZ2V0VHlwZU5hbWUiLCJjb250YWN0c1N1cHBvcnRlZCIsImNvbnRhY3RzVHlwZXMiLCJjb250YWN0c1R5cGVzT3B0aW9ucyIsImNvbnRhY3RzVHlwZSIsIm1haW5Db250YWN0c1R5cGUiLCJ0ZXN0Q29udGFjdHNTdWNjZXNzIiwidGVzdENvbnRhY3RzRXJyb3IiLCJ0ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UiLCJwZG9QYXNzd29yZCIsInBkb0RzblRyaWdnZXIiLCJwZG9Vc2VyVHJpZ2dlciIsInBkb1Bhc3N3b3JkVHJpZ2dlciIsImNvbnRhY3RzVHlwZVRyaWdnZXIiLCJvblRlc3RDb250YWN0c1Jlc3BvbnNlIiwidGVzdENvbnRhY3RzQ29tbWFuZCIsIk1lc3NhZ2UiLCJmNCIsImY1IiwiYWRtaW5QYXNzd29yZCIsImNhcGFPcGVuUEdQIiwiY2FwYVR3b0ZhY3RvckF1dGgiLCJjYXBhVHdvRmFjdG9yQXV0aEZvcmNlIiwidmVyaWZ5U3NsQ2VydGlmaWNhdGUiLCJhbGxvd1NlbGZTaWduZWQiLCJpc1R3b0ZhY3RvckRyb3BwZXJTaG93biIsInR3b0ZhY3RvckRyb3BwZXJVc2VyIiwiYWRtaW5Mb2dpbkVycm9yIiwiYWRtaW5QYXNzd29yZE5ldyIsImFkbWluUGFzc3dvcmROZXcyIiwiYWRtaW5QYXNzd29yZE5ld0Vycm9yIiwiYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yIiwiYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MiLCJvbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSIsInNhdmVOZXdBZG1pblBhc3N3b3JkQ29tbWFuZCIsInNob3dUd29GYWN0b3JEcm9wcGVyIiwiV2VhayIsImdvb2dsZUVuYWJsZSIsImdvb2dsZUVuYWJsZUF1dGgiLCJnb29nbGVFbmFibGVBdXRoRmFzdCIsImdvb2dsZUVuYWJsZURyaXZlIiwiZ29vZ2xlRW5hYmxlUHJldmlldyIsImdvb2dsZUVuYWJsZVJlcXVpcmVDbGllbnRTZXR0aW5ncyIsImdvb2dsZUVuYWJsZVJlcXVpcmVBcGlLZXkiLCJnb29nbGVDbGllbnRJRCIsImdvb2dsZUNsaWVudFNlY3JldCIsImdvb2dsZUFwaUtleSIsImdvb2dsZVRyaWdnZXIxIiwiZ29vZ2xlVHJpZ2dlcjIiLCJnb29nbGVUcmlnZ2VyMyIsImZhY2Vib29rU3VwcG9ydGVkIiwiZmFjZWJvb2tFbmFibGUiLCJmYWNlYm9va0FwcElEIiwiZmFjZWJvb2tBcHBTZWNyZXQiLCJmYWNlYm9va1RyaWdnZXIxIiwiZmFjZWJvb2tUcmlnZ2VyMiIsInR3aXR0ZXJFbmFibGUiLCJ0d2l0dGVyQ29uc3VtZXJLZXkiLCJ0d2l0dGVyQ29uc3VtZXJTZWNyZXQiLCJ0d2l0dGVyVHJpZ2dlcjEiLCJ0d2l0dGVyVHJpZ2dlcjIiLCJkcm9wYm94RW5hYmxlIiwiZHJvcGJveEFwaUtleSIsImRyb3Bib3hUcmlnZ2VyMSIsImY2IiwiZjciLCJmOCIsImVuYWJsZWRQbHVnaW5zIiwicGx1Z2luc0Vycm9yIiwib25QbHVnaW5Mb2FkUmVxdWVzdCIsIm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QiLCJkaXNhYmxlUGx1Z2luIiwiY29uZmlndXJlUGx1Z2luIiwicGFja2FnZXNFcnJvciIsInBhY2thZ2VzQ3VycmVudCIsImluc3RhbGxlZCIsImNvbXBhcmUiLCJwYWNrYWdlc0F2YWlsYWJsZUZvclVwZGF0ZSIsInBhY2thZ2VzQXZhaWxhYmxlRm9ySW5zdGFsbGF0aW9uIiwicmVxdWVzdEhlbHBlciIsInBhY2thZ2VUb1JlcXVlc3QiLCJpbnN0YWxsIiwiUmVsb2FkIiwiZGVsZXRlUGFja2FnZSIsInBhY2thZ2VUb0RlbGV0ZSIsImluc3RhbGxQYWNrYWdlIiwicGFja2FnZVRvSW5zdGFsbCIsInZlcnNpb24iLCJhY2Nlc3MiLCJlcnJvckRlc2MiLCJjb3JlUmVtb3RlVmVyc2lvbkh0bWxEZXNjIiwidHJhbnNsYXRvclRyaWdnZXIiLCJzdGF0dXNUeXBlIiwidmVyc2lvblRvQ29tcGFyZSIsImlzQ2hlY2tpbmciLCJpc1VwZGF0aW5nIiwiaXNSZWFsIiwiZG9tIiwiYWRtaW5Eb21haW4iLCJhZG1pbk1hbkxvYWRpbmciLCJhZG1pbk1hbkxvYWRpbmdWaXNpYmlsaXR5IiwibG9nb3V0Q2xpY2siLCJMb2dpbkFkbWluVmlldyIsInN1Ym1pdFJlcXVlc3QiLCJtb2JpbGVEZXZpY2UiLCJoaWRlU3VibWl0QnV0dG9uIiwibG9naW4iLCJwYXNzd29yZCIsImxvZ2luRXJyb3IiLCJwYXNzd29yZEVycm9yIiwibG9naW5FcnJvckFuaW1hdGlvbiIsInBhc3N3b3JkRXJyb3JBbmltYXRpb24iLCJsb2dpbkZvY3VzIiwiZm9ybUhpZGRlbiIsImZvcm1FcnJvciIsInN1Ym1pdEVycm9yIiwic3VibWl0Q29tbWFuZCIsInN1Ym1pdEZvcm0iLCJib290c3RyYXAiLCJEb21haW5BbGlhc1BvcHVwVmlldyIsImRvbWFpbnNPcHRpb25zIiwib25Eb21haW5BbGlhc0NyZWF0ZU9yU2F2ZVJlc3BvbnNlIiwiUGx1Z2luUG9wdXBWaWV3IiwiaGFzQ29uZmlndXJhdGlvbiIsIm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSIsInNhdmVFcnJvciIsInJlYWRtZSIsImNvbmZpZ3VyZXMiLCJoYXNSZWFkbWUiLCJyZWFkbWVQb3BvdmVyQ29uZiIsInRyeVRvQ2xvc2VQb3B1cCIsInNhdmVDb21tYW5kIiwib1BsdWdpbiIsIlJlYWRtZSIsIkNvbmZpZyIsIlBvcHVwc0Fza1ZpZXdNb2RlbCIsIkJyYW5kaW5nQWRtaW5TZXR0aW5ncyIsImxvYWRpbmdEZXNjIiwiZmF2aWNvblVybCIsImxvZ2luTG9nbyIsImxvZ2luQmFja2dyb3VuZCIsInVzZXJMb2dvIiwidXNlckxvZ29NZXNzYWdlIiwidXNlcklmcmFtZU1lc3NhZ2UiLCJ1c2VyTG9nb1RpdGxlIiwibG9naW5EZXNjcmlwdGlvbiIsImxvZ2luQ3NzIiwidXNlckNzcyIsIndlbGNvbWVQYWdlVXJsIiwid2VsY29tZVBhZ2VEaXNwbGF5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFB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RUE7QUFDQSxJQUFJLG9DQUFvQyxTQUFTO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EseUNBQXlDLFNBQVM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QyxVQUFVO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxTQUFTO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsd0NBQXdDO0FBQ3hDO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsUUFBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLDRCQUE0QjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FB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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7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Q2l6QyxXQUFMLENBQWlCNXBELE9BQWxCLEVBQTJCLEtBQTNCLENBRHRDO0FBQUEsVUFFQzIvQyxFQUFFLEdBQUdocEMscUZBQWdDLENBQUMsS0FBSSxDQUFDa3pDLFVBQUwsQ0FBZ0I3cEQsT0FBakIsRUFBMEIsS0FBMUIsQ0FGdEM7O0FBSUEsV0FBSSxDQUFDaUQsS0FBTCxDQUFXL0YsU0FBWCxDQUFxQixVQUFDb0QsS0FBRCxFQUFXO0FBQy9Cd3hDLHlFQUFNLENBQUM5NkIsZUFBUCxDQUF1QnlvQyxFQUF2QixFQUEyQjtBQUMxQixtQkFBU2x6Qyx5REFBSSxDQUFDak0sS0FBRDtBQURhLFNBQTNCO0FBR0EsT0FKRDs7QUFNQSxXQUFJLENBQUNzcEQsV0FBTCxDQUFpQjFzRCxTQUFqQixDQUEyQixVQUFDb0QsS0FBRCxFQUFXO0FBQ3JDd3hDLHlFQUFNLENBQUM5NkIsZUFBUCxDQUF1QjBvQyxFQUF2QixFQUEyQjtBQUMxQixnQ0FBc0JuekMseURBQUksQ0FBQ2pNLEtBQUQ7QUFEQSxTQUEzQjtBQUdBLE9BSkQ7O0FBTUEsV0FBSSxDQUFDdXBELFVBQUwsQ0FBZ0Izc0QsU0FBaEIsQ0FBMEIsVUFBQ29ELEtBQUQsRUFBVztBQUNwQ3d4Qyx5RUFBTSxDQUFDOTZCLGVBQVAsQ0FBdUIyb0MsRUFBdkIsRUFBMkI7QUFDMUIsd0JBQWNwekMseURBQUksQ0FBQ2pNLEtBQUQ7QUFEUSxTQUEzQjtBQUdBLE9BSkQ7QUFLQSxLQXRCRCxFQXNCRzFGLG1EQUFNLENBQUM2M0MsUUF0QlY7QUF1QkEsRyIsImZpbGUiOiJqcy9hZG1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwicmFpbmxvb3Avdi8wLjAuMC9zdGF0aWMvanMvXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA1MzEpO1xuIiwiLyogZXNsaW50IHF1b3RlLXByb3BzOiAwICovXG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbGVUeXBlID0ge1xuXHQnVW5rbm93bic6ICd1bmtub3duJyxcblx0J1RleHQnOiAndGV4dCcsXG5cdCdIdG1sJzogJ2h0bWwnLFxuXHQnQ29kZSc6ICdjb2RlJyxcblx0J0VtbCc6ICdlbWwnLFxuXHQnV29yZFRleHQnOiAnd29yZC10ZXh0Jyxcblx0J1BkZic6ICdwZGYnLFxuXHQnSW1hZ2UnOiAnaW1hZ2UnLFxuXHQnQXVkaW8nOiAnYXVkaW8nLFxuXHQnVmlkZW8nOiAndmlkZW8nLFxuXHQnU2hlZXQnOiAnc2hlZXQnLFxuXHQnUHJlc2VudGF0aW9uJzogJ3ByZXNlbnRhdGlvbicsXG5cdCdDZXJ0aWZpY2F0ZSc6ICdjZXJ0aWZpY2F0ZScsXG5cdCdDZXJ0aWZpY2F0ZUJpbic6ICdjZXJ0aWZpY2F0ZS1iaW4nLFxuXHQnQXJjaGl2ZSc6ICdhcmNoaXZlJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgU3RvcmFnZVJlc3VsdFR5cGUgPSB7XG5cdCdTdWNjZXNzJzogJ3N1Y2Nlc3MnLFxuXHQnQWJvcnQnOiAnYWJvcnQnLFxuXHQnRXJyb3InOiAnZXJyb3InLFxuXHQnVW5sb2FkJzogJ3VubG9hZCdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZvY3VzZWQgPSB7XG5cdCdOb25lJzogJ25vbmUnLFxuXHQnTWVzc2FnZUxpc3QnOiAnbWVzc2FnZS1saXN0Jyxcblx0J01lc3NhZ2VWaWV3JzogJ21lc3NhZ2UtdmlldycsXG5cdCdGb2xkZXJMaXN0JzogJ2ZvbGRlci1saXN0J1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU3RhdGUgPSB7XG5cdCdFbXB0eSc6IDEwLFxuXHQnTG9naW4nOiAyMCxcblx0J0F1dGgnOiAzMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU3RhdGVUeXBlID0ge1xuXHQnV2VibWFpbCc6IDAsXG5cdCdBZG1pbic6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IENhcGEgPSB7XG5cdCdUd29GYWN0b3InOiAnVFdPX0ZBQ1RPUicsXG5cdCdUd29GYWN0b3JGb3JjZSc6ICdUV09fRkFDVE9SX0ZPUkNFJyxcblx0J09wZW5QR1AnOiAnT1BFTl9QR1AnLFxuXHQnUHJlZmV0Y2gnOiAnUFJFRkVUQ0gnLFxuXHQnR3JhdmF0YXInOiAnR1JBVkFUQVInLFxuXHQnRm9sZGVycyc6ICdGT0xERVJTJyxcblx0J0NvbXBvc2VyJzogJ0NPTVBPU0VSJyxcblx0J0NvbnRhY3RzJzogJ0NPTlRBQ1RTJyxcblx0J1JlbG9hZCc6ICdSRUxPQUQnLFxuXHQnU2VhcmNoJzogJ1NFQVJDSCcsXG5cdCdTZWFyY2hBZHYnOiAnU0VBUkNIX0FEVicsXG5cdCdNZXNzYWdlQWN0aW9ucyc6ICdNRVNTQUdFX0FDVElPTlMnLFxuXHQnTWVzc2FnZUxpc3RBY3Rpb25zJzogJ01FU1NBR0VMSVNUX0FDVElPTlMnLFxuXHQnQXR0YWNobWVudHNBY3Rpb25zJzogJ0FUVEFDSE1FTlRTX0FDVElPTlMnLFxuXHQnRGFuZ2Vyb3VzQWN0aW9ucyc6ICdEQU5HRVJPVVNfQUNUSU9OUycsXG5cdCdTZXR0aW5ncyc6ICdTRVRUSU5HUycsXG5cdCdIZWxwJzogJ0hFTFAnLFxuXHQnVGhlbWVzJzogJ1RIRU1FUycsXG5cdCdVc2VyQmFja2dyb3VuZCc6ICdVU0VSX0JBQ0tHUk9VTkQnLFxuXHQnU2lldmUnOiAnU0lFVkUnLFxuXHQnRmlsdGVycyc6ICdGSUxURVJTJyxcblx0J0F0dGFjaG1lbnRUaHVtYm5haWxzJzogJ0FUVEFDSE1FTlRfVEhVTUJOQUlMUycsXG5cdCdUZW1wbGF0ZXMnOiAnVEVNUExBVEVTJyxcblx0J0F1dG9Mb2dvdXQnOiAnQVVUT0xPR09VVCcsXG5cdCdBZGRpdGlvbmFsQWNjb3VudHMnOiAnQURESVRJT05BTF9BQ0NPVU5UUycsXG5cdCdJZGVudGl0aWVzJzogJ0lERU5USVRJRVMnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBLZXlTdGF0ZSA9IHtcblx0J0FsbCc6ICdhbGwnLFxuXHQnTm9uZSc6ICdub25lJyxcblx0J0NvbnRhY3RMaXN0JzogJ2NvbnRhY3QtbGlzdCcsXG5cdCdNZXNzYWdlTGlzdCc6ICdtZXNzYWdlLWxpc3QnLFxuXHQnRm9sZGVyTGlzdCc6ICdmb2xkZXItbGlzdCcsXG5cdCdNZXNzYWdlVmlldyc6ICdtZXNzYWdlLXZpZXcnLFxuXHQnQ29tcG9zZSc6ICdjb21wb3NlJyxcblx0J1NldHRpbmdzJzogJ3NldHRpbmdzJyxcblx0J01lbnUnOiAnbWVudScsXG5cdCdQb3B1cENvbXBvc2VPcGVuUEdQJzogJ2NvbXBvc2Utb3Blbi1wZ3AnLFxuXHQnUG9wdXBNZXNzYWdlT3BlblBHUCc6ICdtZXNzYWdlLW9wZW4tcGdwJyxcblx0J1BvcHVwVmlld09wZW5QR1AnOiAndmlldy1vcGVuLXBncCcsXG5cdCdQb3B1cEtleWJvYXJkU2hvcnRjdXRzSGVscCc6ICdwb3B1cC1rZXlib2FyZC1zaG9ydGN1dHMtaGVscCcsXG5cdCdQb3B1cEFzayc6ICdwb3B1cC1hc2snXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBGb2xkZXJUeXBlID0ge1xuXHQnSW5ib3gnOiAxMCxcblx0J1NlbnRJdGVtcyc6IDExLFxuXHQnRHJhZnQnOiAxMixcblx0J1RyYXNoJzogMTMsXG5cdCdTcGFtJzogMTQsXG5cdCdBcmNoaXZlJzogMTUsXG5cdCdOb3RTcGFtJzogODAsXG5cdCdVc2VyJzogOTlcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlckZvbGRlclR5cGUgPSB7XG5cdCdVU0VSJzogMCxcblx0J0lOQk9YJzogMSxcblx0J1NFTlQnOiAyLFxuXHQnRFJBRlRTJzogMyxcblx0J0pVTksnOiA0LFxuXHQnVFJBU0gnOiA1LFxuXHQnSU1QT1JUQU5UJzogMTAsXG5cdCdGTEFHR0VEJzogMTEsXG5cdCdBTEwnOiAxMlxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgTG9naW5TaWduTWVUeXBlQXNTdHJpbmcgPSB7XG5cdCdEZWZhdWx0T2ZmJzogJ2RlZmF1bHRvZmYnLFxuXHQnRGVmYXVsdE9uJzogJ2RlZmF1bHRvbicsXG5cdCdVbnVzZWQnOiAndW51c2VkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTG9naW5TaWduTWVUeXBlID0ge1xuXHQnRGVmYXVsdE9mZic6IDAsXG5cdCdEZWZhdWx0T24nOiAxLFxuXHQnVW51c2VkJzogMlxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgQ29tcG9zZVR5cGUgPSB7XG5cdCdFbXB0eSc6ICdlbXB0eScsXG5cdCdSZXBseSc6ICdyZXBseScsXG5cdCdSZXBseUFsbCc6ICdyZXBseWFsbCcsXG5cdCdGb3J3YXJkJzogJ2ZvcndhcmQnLFxuXHQnRm9yd2FyZEFzQXR0YWNobWVudCc6ICdmb3J3YXJkLWFzLWF0dGFjaG1lbnQnLFxuXHQnRHJhZnQnOiAnZHJhZnQnLFxuXHQnRWRpdEFzTmV3JzogJ2VkaXRhc25ldydcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFVwbG9hZEVycm9yQ29kZSA9IHtcblx0J05vcm1hbCc6IDAsXG5cdCdGaWxlSXNUb29CaWcnOiAxLFxuXHQnRmlsZVBhcnRpYWxseVVwbG9hZGVkJzogMixcblx0J0ZpbGVOb1VwbG9hZGVkJzogMyxcblx0J01pc3NpbmdUZW1wRm9sZGVyJzogNCxcblx0J0ZpbGVPblNhdmVpbmdFcnJvcic6IDUsXG5cdCdGaWxlVHlwZSc6IDk4LFxuXHQnVW5rbm93bic6IDk5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uID0ge1xuXHQnTm9uZSc6IDAsXG5cdCdTZW50JzogMSxcblx0J0RyYWZ0JzogMixcblx0J1NwYW0nOiAzLFxuXHQnVHJhc2gnOiA0LFxuXHQnQXJjaGl2ZSc6IDVcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IENsaWVudFNpZGVLZXlOYW1lID0ge1xuXHQnRm9sZGVyc0xhc2hIYXNoJzogMCxcblx0J01lc3NhZ2VzSW5ib3hMYXN0SGFzaCc6IDEsXG5cdCdNYWlsQm94TGlzdFNpemUnOiAyLFxuXHQnRXhwYW5kZWRGb2xkZXJzJzogMyxcblx0J0ZvbGRlckxpc3RTaXplJzogNCxcblx0J01lc3NhZ2VMaXN0U2l6ZSc6IDUsXG5cdCdMYXN0UmVwbHlBY3Rpb24nOiA2LFxuXHQnTGFzdFNpZ25NZSc6IDcsXG5cdCdDb21wb3NlTGFzdElkZW50aXR5SUQnOiA4LFxuXHQnTWVzc2FnZUhlYWRlckZ1bGxJbmZvJzogOSxcblx0J01lc3NhZ2VBdHRhY2htbmV0Q29udHJvbHMnOiAxMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRXZlbnRLZXlDb2RlID0ge1xuXHQnQmFja3NwYWNlJzogOCxcblx0J1RhYic6IDksXG5cdCdFbnRlcic6IDEzLFxuXHQnRXNjJzogMjcsXG5cdCdQYWdlVXAnOiAzMyxcblx0J1BhZ2VEb3duJzogMzQsXG5cdCdMZWZ0JzogMzcsXG5cdCdSaWdodCc6IDM5LFxuXHQnVXAnOiAzOCxcblx0J0Rvd24nOiA0MCxcblx0J0VuZCc6IDM1LFxuXHQnSG9tZSc6IDM2LFxuXHQnU3BhY2UnOiAzMixcblx0J0luc2VydCc6IDQ1LFxuXHQnRGVsZXRlJzogNDYsXG5cdCdBJzogNjUsXG5cdCdTJzogODNcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VTZXRBY3Rpb24gPSB7XG5cdCdTZXRTZWVuJzogMCxcblx0J1Vuc2V0U2Vlbic6IDEsXG5cdCdTZXRGbGFnJzogMixcblx0J1Vuc2V0RmxhZyc6IDNcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VTZWxlY3RBY3Rpb24gPSB7XG5cdCdBbGwnOiAwLFxuXHQnTm9uZSc6IDEsXG5cdCdJbnZlcnQnOiAyLFxuXHQnVW5zZWVuJzogMyxcblx0J1NlZW4nOiA0LFxuXHQnRmxhZ2dlZCc6IDUsXG5cdCdVbmZsYWdnZWQnOiA2XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBEZXNrdG9wTm90aWZpY2F0aW9uID0ge1xuXHQnQWxsb3dlZCc6IDAsXG5cdCdOb3RBbGxvd2VkJzogMSxcblx0J0RlbmllZCc6IDIsXG5cdCdOb3RTdXBwb3J0ZWQnOiA5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlUHJpb3JpdHkgPSB7XG5cdCdMb3cnOiA1LFxuXHQnTm9ybWFsJzogMyxcblx0J0hpZ2gnOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBFZGl0b3JEZWZhdWx0VHlwZSA9IHtcblx0J0h0bWwnOiAnSHRtbCcsXG5cdCdQbGFpbic6ICdQbGFpbicsXG5cdCdIdG1sRm9yY2VkJzogJ0h0bWxGb3JjZWQnLFxuXHQnUGxhaW5Gb3JjZWQnOiAnUGxhaW5Gb3JjZWQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTZWN1cmUgPSB7XG5cdCdOb25lJzogMCxcblx0J1NTTCc6IDEsXG5cdCdUTFMnOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZWFyY2hEYXRlVHlwZSA9IHtcblx0J0FsbCc6IC0xLFxuXHQnRGF5czMnOiAzLFxuXHQnRGF5czcnOiA3LFxuXHQnTW9udGgnOiAzMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2F2ZVNldHRpbmdzU3RlcCA9IHtcblx0J0FuaW1hdGUnOiAtMixcblx0J0lkbGUnOiAtMSxcblx0J1RydWVSZXN1bHQnOiAxLFxuXHQnRmFsc2VSZXN1bHQnOiAwXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBMYXlvdXQgPSB7XG5cdCdOb1ByZXZpZXcnOiAwLFxuXHQnU2lkZVByZXZpZXcnOiAxLFxuXHQnQm90dG9tUHJldmlldyc6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlckNvbmRpdGlvbkZpZWxkID0ge1xuXHQnRnJvbSc6ICdGcm9tJyxcblx0J1JlY2lwaWVudCc6ICdSZWNpcGllbnQnLFxuXHQnU3ViamVjdCc6ICdTdWJqZWN0Jyxcblx0J0hlYWRlcic6ICdIZWFkZXInLFxuXHQnU2l6ZSc6ICdTaXplJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRmlsdGVyQ29uZGl0aW9uVHlwZSA9IHtcblx0J0NvbnRhaW5zJzogJ0NvbnRhaW5zJyxcblx0J05vdENvbnRhaW5zJzogJ05vdENvbnRhaW5zJyxcblx0J0VxdWFsVG8nOiAnRXF1YWxUbycsXG5cdCdOb3RFcXVhbFRvJzogJ05vdEVxdWFsVG8nLFxuXHQnUmVnZXgnOiAnUmVnZXgnLFxuXHQnT3Zlcic6ICdPdmVyJyxcblx0J1VuZGVyJzogJ1VuZGVyJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRmlsdGVyc0FjdGlvbiA9IHtcblx0J05vbmUnOiAnTm9uZScsXG5cdCdNb3ZlVG8nOiAnTW92ZVRvJyxcblx0J0Rpc2NhcmQnOiAnRGlzY2FyZCcsXG5cdCdWYWNhdGlvbic6ICdWYWNhdGlvbicsXG5cdCdSZWplY3QnOiAnUmVqZWN0Jyxcblx0J0ZvcndhcmQnOiAnRm9yd2FyZCdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlclJ1bGVzVHlwZSA9IHtcblx0J0FsbCc6ICdBbGwnLFxuXHQnQW55JzogJ0FueSdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNpZ25lZFZlcmlmeVN0YXR1cyA9IHtcblx0J1Vua25vd25QdWJsaWNLZXlzJzogLTQsXG5cdCdVbmtub3duUHJpdmF0ZUtleSc6IC0zLFxuXHQnVW52ZXJpZmllZCc6IC0yLFxuXHQnRXJyb3InOiAtMSxcblx0J05vbmUnOiAwLFxuXHQnU3VjY2Vzcyc6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IENvbnRhY3RQcm9wZXJ0eVR5cGUgPSB7XG5cdCdVbmtub3duJzogMCxcblxuXHQnRnVsbE5hbWUnOiAxMCxcblxuXHQnRmlyc3ROYW1lJzogMTUsXG5cdCdMYXN0TmFtZSc6IDE2LFxuXHQnTWlkZGxlTmFtZSc6IDE2LFxuXHQnTmljayc6IDE4LFxuXG5cdCdOYW1lUHJlZml4JzogMjAsXG5cdCdOYW1lU3VmZml4JzogMjEsXG5cblx0J0VtYWlsJzogMzAsXG5cdCdQaG9uZSc6IDMxLFxuXHQnV2ViJzogMzIsXG5cblx0J0JpcnRoZGF5JzogNDAsXG5cblx0J0ZhY2Vib29rJzogOTAsXG5cdCdTa3lwZSc6IDkxLFxuXHQnR2l0SHViJzogOTIsXG5cblx0J05vdGUnOiAxMTAsXG5cblx0J0N1c3RvbSc6IDI1MFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWFnaWNzID0ge1xuXHQnRXZlbnRXaGljaE1vdXNlTWlkZGxlJzogMyxcblx0J2lmdmlzaWJsZUlkbGUxMHMnOiAxMCxcblxuXHQnQml0TGVuZ3RoMjA0OCc6IDIwNDgsXG5cdCdCaXRMZW5ndGgxMDI0JzogMTAyNCxcblxuXHQnU2l6ZTM1MHB4JzogMzUwLFxuXHQnU2l6ZTUwcHgnOiA1MCxcblx0J1NpemUyMHB4JzogMjAsXG5cdCdTaXplMXB4JzogMSxcblxuXHQnVGltZTMwbUluTWluJzogMzAsXG5cblx0J1RpbWU2MG0nOiA2MDAwMCAqIDYwLFxuXHQnVGltZTMwbSc6IDYwMDAwICogMzAsXG5cdCdUaW1lMjBtJzogNjAwMDAgKiAyMCxcblx0J1RpbWUxNW0nOiA2MDAwMCAqIDE1LFxuXHQnVGltZTEwbSc6IDYwMDAwICogMTAsXG5cdCdUaW1lNW0nOiA2MDAwMCAqIDUsXG5cdCdUaW1lM20nOiA2MDAwMCAqIDMsXG5cdCdUaW1lMm0nOiA2MDAwMCAqIDIsXG5cdCdUaW1lMW0nOiA2MDAwMCxcblx0J1RpbWUzMHMnOiAzMDAwMCxcblx0J1RpbWUxMHMnOiAxMDAwMCxcblx0J1RpbWU3cyc6IDcwMDAsXG5cdCdUaW1lNXMnOiA1MDAwLFxuXHQnVGltZTNzJzogMzAwMCxcblx0J1RpbWUxcyc6IDEwMDAsXG5cdCdUaW1lNTAwbXMnOiA1MDAsXG5cdCdUaW1lMzUwbXMnOiAzNTAsXG5cdCdUaW1lMjUwbXMnOiAyNTAsXG5cdCdUaW1lMjAwbXMnOiAyMDAsXG5cdCdUaW1lMTAwbXMnOiAxMDAsXG5cdCdUaW1lNTBtcyc6IDUwLFxuXHQnVGltZTIwbXMnOiAyMCxcblx0J1RpbWUxMG1zJzogMTAsXG5cdCdUaW1lMW1zJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgUG9ydHMgPSB7XG5cdCdJbWFwJzogMTQzLFxuXHQnSW1hcFNzbCc6IDk5Myxcblx0J1NtdHAnOiAyNSxcblx0J1NtdHBTc2wnOiA0NjUsXG5cdCdTbXRwU3RhcnRUbHMnOiA1ODdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE5vdGlmaWNhdGlvbiA9IHtcblx0J0ludmFsaWRUb2tlbic6IDEwMSxcblx0J0F1dGhFcnJvcic6IDEwMixcblx0J0FjY2Vzc0Vycm9yJzogMTAzLFxuXHQnQ29ubmVjdGlvbkVycm9yJzogMTA0LFxuXHQnQ2FwdGNoYUVycm9yJzogMTA1LFxuXHQnU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUnOiAxMDYsXG5cdCdTb2NpYWxUd2l0dGVyTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA3LFxuXHQnU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA4LFxuXHQnRG9tYWluTm90QWxsb3dlZCc6IDEwOSxcblx0J0FjY291bnROb3RBbGxvd2VkJzogMTEwLFxuXG5cdCdBY2NvdW50VHdvRmFjdG9yQXV0aFJlcXVpcmVkJzogMTIwLFxuXHQnQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvcic6IDEyMSxcblxuXHQnQ291bGROb3RTYXZlTmV3UGFzc3dvcmQnOiAxMzAsXG5cdCdDdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QnOiAxMzEsXG5cdCdOZXdQYXNzd29yZFNob3J0JzogMTMyLFxuXHQnTmV3UGFzc3dvcmRXZWFrJzogMTMzLFxuXHQnTmV3UGFzc3dvcmRGb3JiaWRkZW4nOiAxMzQsXG5cblx0J0NvbnRhY3RzU3luY0Vycm9yJzogMTQwLFxuXG5cdCdDYW50R2V0TWVzc2FnZUxpc3QnOiAyMDEsXG5cdCdDYW50R2V0TWVzc2FnZSc6IDIwMixcblx0J0NhbnREZWxldGVNZXNzYWdlJzogMjAzLFxuXHQnQ2FudE1vdmVNZXNzYWdlJzogMjA0LFxuXHQnQ2FudENvcHlNZXNzYWdlJzogMjA1LFxuXG5cdCdDYW50U2F2ZU1lc3NhZ2UnOiAzMDEsXG5cdCdDYW50U2VuZE1lc3NhZ2UnOiAzMDIsXG5cdCdJbnZhbGlkUmVjaXBpZW50cyc6IDMwMyxcblxuXHQnQ2FudFNhdmVGaWx0ZXJzJzogMzUxLFxuXHQnQ2FudEdldEZpbHRlcnMnOiAzNTIsXG5cdCdGaWx0ZXJzQXJlTm90Q29ycmVjdCc6IDM1NSxcblxuXHQnQ2FudENyZWF0ZUZvbGRlcic6IDQwMCxcblx0J0NhbnRSZW5hbWVGb2xkZXInOiA0MDEsXG5cdCdDYW50RGVsZXRlRm9sZGVyJzogNDAyLFxuXHQnQ2FudFN1YnNjcmliZUZvbGRlcic6IDQwMyxcblx0J0NhbnRVbnN1YnNjcmliZUZvbGRlcic6IDQwNCxcblx0J0NhbnREZWxldGVOb25FbXB0eUZvbGRlcic6IDQwNSxcblxuXHQnQ2FudFNhdmVTZXR0aW5ncyc6IDUwMSxcblx0J0NhbnRTYXZlUGx1Z2luU2V0dGluZ3MnOiA1MDIsXG5cblx0J0RvbWFpbkFscmVhZHlFeGlzdHMnOiA2MDEsXG5cblx0J0NhbnRJbnN0YWxsUGFja2FnZSc6IDcwMSxcblx0J0NhbnREZWxldGVQYWNrYWdlJzogNzAyLFxuXHQnSW52YWxpZFBsdWdpblBhY2thZ2UnOiA3MDMsXG5cdCdVbnN1cHBvcnRlZFBsdWdpblBhY2thZ2UnOiA3MDQsXG5cblx0J0xpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUnOiA3MTAsXG5cdCdMaWNlbnNpbmdFeHBpcmVkJzogNzExLFxuXHQnTGljZW5zaW5nQmFubmVkJzogNzEyLFxuXG5cdCdEZW1vU2VuZE1lc3NhZ2VFcnJvcic6IDc1MCxcblx0J0RlbW9BY2NvdW50RXJyb3InOiA3NTEsXG5cblx0J0FjY291bnRBbHJlYWR5RXhpc3RzJzogODAxLFxuXHQnQWNjb3VudERvZXNOb3RFeGlzdCc6IDgwMixcblxuXHQnTWFpbFNlcnZlckVycm9yJzogOTAxLFxuXHQnQ2xpZW50Vmlld0Vycm9yJzogOTAyLFxuXHQnSW52YWxpZElucHV0QXJndW1lbnQnOiA5MDMsXG5cblx0J0FqYXhGYWxzZSc6IDk1MCxcblx0J0FqYXhBYm9ydCc6IDk1MSxcblx0J0FqYXhQYXJzZSc6IDk1Mixcblx0J0FqYXhUaW1lb3V0JzogOTUzLFxuXG5cdCdVbmtub3duTm90aWZpY2F0aW9uJzogOTk5LFxuXHQnVW5rbm93bkVycm9yJzogOTk5XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBPcGVudGlwIGZyb20gJ09wZW50aXAnO1xuaW1wb3J0IFBpa2FkYXkgZnJvbSAncGlrYWRheSc7XG5cbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmNvbnN0IGtvID0gd2luZG93LmtvLFxuXHQkd2luID0gJCh3aW5kb3cpLFxuXHRmRGlzcG9zYWxUb29sdGlwSGVscGVyID0gKGVsZW1lbnQpID0+IHtcblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblxua28uYmluZGluZ0hhbmRsZXJzLnVwZGF0ZVdpZHRoID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGZJbml0ID0gKCkgPT4ge1xuXHRcdFx0XHRmVmFsdWUoJGVsLndpZHRoKCkpO1xuXHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0ZlZhbHVlKCRlbC53aWR0aCgpKTtcblx0XHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0XHR9O1xuXG5cdFx0JHdpbi5vbigncmVzaXplJywgZkluaXQpO1xuXHRcdGZJbml0KCk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCR3aW4ub2ZmKCdyZXNpemUnLCBmSW5pdCk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5lZGl0b3IgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGxldCBlZGl0b3IgPSBudWxsO1xuXG5cdFx0Y29uc3QgZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdEh0bWxFZGl0b3IgPSByZXF1aXJlKCdDb21tb24vSHRtbEVkaXRvcicpLmRlZmF1bHQsXG5cdFx0XHRmVXBkYXRlRWRpdG9yVmFsdWUgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLl9fZWRpdG9yKSB7XG5cdFx0XHRcdFx0ZlZhbHVlLl9fZWRpdG9yLnNldEh0bWxPclBsYWluKGZWYWx1ZSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGZVcGRhdGVLb1ZhbHVlID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5fX2VkaXRvcikge1xuXHRcdFx0XHRcdGZWYWx1ZShmVmFsdWUuX19lZGl0b3IuZ2V0RGF0YVdpdGhIdG1sTWFyaygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGZPblJlYWR5ID0gKCkgPT4ge1xuXHRcdFx0XHRmVmFsdWUuX19lZGl0b3IgPSBlZGl0b3I7XG5cdFx0XHRcdGZVcGRhdGVFZGl0b3JWYWx1ZSgpO1xuXHRcdFx0fTtcblxuXHRcdGlmIChrby5pc09ic2VydmFibGUoZlZhbHVlKSAmJiBIdG1sRWRpdG9yKSB7XG5cdFx0XHRlZGl0b3IgPSBuZXcgSHRtbEVkaXRvcihlbGVtZW50LCBmVXBkYXRlS29WYWx1ZSwgZk9uUmVhZHksIGZVcGRhdGVLb1ZhbHVlKTtcblxuXHRcdFx0ZlZhbHVlLl9fZmV0Y2hFZGl0b3JWYWx1ZSA9IGZVcGRhdGVLb1ZhbHVlO1xuXG5cdFx0XHRmVmFsdWUuc3Vic2NyaWJlKGZVcGRhdGVFZGl0b3JWYWx1ZSk7XG5cblx0XHRcdC8vIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0Ly8gfSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuanNvbiA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KS50ZXh0KHdpbmRvdy5KU09OLnN0cmluZ2lmeShrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHQkKGVsZW1lbnQpLnRleHQod2luZG93LkpTT04uc3RyaW5naWZ5KGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuc2Nyb2xsZXJTaGFkb3dzID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IGxpbWl0ID0gOCxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRjb250ID0gJGVsLmZpbmQoJ1tkYXRhLXNjcm9sbGVyLXNoYWRvd3MtY29udGVudF0nKVswXSB8fCBudWxsLFxuXHRcdFx0ZkZ1bmMgPSBfLnRocm90dGxlKCgpID0+IHtcblx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0LnRvZ2dsZUNsYXNzKCdzY3JvbGxlci1zaGFkb3ctdG9wJywgbGltaXQgPCBjb250LnNjcm9sbFRvcClcblx0XHRcdFx0XHQudG9nZ2xlQ2xhc3MoJ3Njcm9sbGVyLXNoYWRvdy1ib3R0b20nLCBjb250LnNjcm9sbFRvcCArIGxpbWl0IDwgY29udC5zY3JvbGxIZWlnaHQgLSBjb250LmNsaWVudEhlaWdodCk7XG5cdFx0XHR9LCAxMDApO1xuXG5cdFx0aWYgKGNvbnQpIHtcblx0XHRcdCQoY29udCkub24oJ3Njcm9sbCByZXNpemUnLCBmRnVuYyk7XG5cdFx0XHQkd2luLm9uKCdyZXNpemUnLCBmRnVuYyk7XG5cblx0XHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soY29udCwgKCkgPT4ge1xuXHRcdFx0XHQkKGNvbnQpLm9mZigpO1xuXHRcdFx0XHQkd2luLm9mZigncmVzaXplJywgZkZ1bmMpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucGlrYWRheSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkgPT4ge1xuXHRcdGtvLmJpbmRpbmdIYW5kbGVycy50ZXh0SW5wdXQuaW5pdChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0aWYgKFBpa2FkYXkpIHtcblx0XHRcdGVsZW1lbnQuX19waWthZGF5ID0gbmV3IFBpa2FkYXkoe1xuXHRcdFx0XHRmaWVsZDogZWxlbWVudFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudmlzaWJsZUFuaW1hdGVkID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXHRcdCRlbC5hZGRDbGFzcygncmwtYW5pbWF0ZWQtaW5pdGVkJyk7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JGVsLnNob3coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLmhpZGUoKTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHRpZiAoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSB7XG5cdFx0XHQkZWwuYWRkQ2xhc3MoJ3JsLWFuaW1hdGVkLWhpZGRlbicpLnNob3coKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHQkZWwucmVtb3ZlQ2xhc3MoJ3JsLWFuaW1hdGVkLWhpZGRlbicpO1xuXHRcdFx0fSwgMTApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZWwuaGlkZSgpLnJlbW92ZUNsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50b29sdGlwID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGlzTW9iaWxlID0gJ29uJyA9PT0gKCRlbC5kYXRhKCd0b29sdGlwLW1vYmlsZScpIHx8ICdvZmYnKSxcblx0XHRcdGlzSTE4TiA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1pMThuJykgfHwgJ29uJyksXG5cdFx0XHRHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblxuXHRcdGlmICghR2xvYmFscy5iTW9iaWxlRGV2aWNlIHx8IGlzTW9iaWxlKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpO1xuXG5cdFx0XHRlbGVtZW50Ll9fb3BlbnRpcCA9IG5ldyBPcGVudGlwKGVsZW1lbnQsIHtcblx0XHRcdFx0J3N0eWxlJzogJ3JhaW5sb29wVGlwJyxcblx0XHRcdFx0J2VsZW1lbnQnOiBlbGVtZW50LFxuXHRcdFx0XHQndGlwSm9pbnQnOiAkZWwuZGF0YSgndG9vbHRpcC1qb2luJykgfHwgJ2JvdHRvbSdcblx0XHRcdH0pO1xuXG5cdFx0XHRHbG9iYWxzLmRyb3Bkb3duVmlzaWJpbGl0eS5zdWJzY3JpYmUoKHYpID0+IHtcblx0XHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoJycgPT09IHNWYWx1ZSkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudCgnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5hY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNJMThOKSB7XG5cdFx0XHRcdGNvbnN0IFRyYW5zbGF0b3IgPSByZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpO1xuXG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoVHJhbnNsYXRvci5pMThuKHNWYWx1ZSkpO1xuXG5cdFx0XHRcdFRyYW5zbGF0b3IudHJpZ2dlci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoVHJhbnNsYXRvci5pMThuKHNWYWx1ZSkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRHbG9iYWxzLmRyb3Bkb3duVmlzaWJpbGl0eS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRcdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChzVmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHQkd2luLm9uKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJywgKCkgPT4ge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHQkd2luLm9uKCdybC50b29sdGlwcy5hY3RpdmF0ZScsICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGlzTW9iaWxlID0gJ29uJyA9PT0gKCRlbC5kYXRhKCd0b29sdGlwLW1vYmlsZScpIHx8ICdvZmYnKSxcblx0XHRcdGlzSTE4TiA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1pMThuJykgfHwgJ29uJyksXG5cdFx0XHRHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblxuXHRcdGlmICgoIUdsb2JhbHMuYk1vYmlsZURldmljZSB8fCBpc01vYmlsZSkgJiYgZWxlbWVudC5fX29wZW50aXApIHtcblx0XHRcdGNvbnN0IHNWYWx1ZSA9ICFrby5pc09ic2VydmFibGUoZlZhbHVlKSAmJiBfLmlzRnVuY3Rpb24oZlZhbHVlKSA/IGZWYWx1ZSgpIDoga28udW53cmFwKGZWYWx1ZSk7XG5cdFx0XHRpZiAoc1ZhbHVlKSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoaXNJMThOID8gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuKHNWYWx1ZSkgOiBzVmFsdWUpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5hY3RpdmF0ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoJycpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRvb2x0aXBFcnJvclRpcCA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHRlbGVtZW50Ll9fb3BlbnRpcCA9IG5ldyBPcGVudGlwKGVsZW1lbnQsIHtcblx0XHRcdHN0eWxlOiAncmFpbmxvb3BFcnJvclRpcCcsXG5cdFx0XHRoaWRlT246ICdtb3VzZW91dCBjbGljaycsXG5cdFx0XHRlbGVtZW50OiBlbGVtZW50LFxuXHRcdFx0dGlwSm9pbnQ6ICRlbC5kYXRhKCd0b29sdGlwLWpvaW4nKSB8fCAndG9wJ1xuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXG5cdFx0JCh3aW5kb3cuZG9jdW1lbnQpLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGZEaXNwb3NhbFRvb2x0aXBIZWxwZXIoZWxlbWVudCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHR2YWx1ZSA9ICFrby5pc09ic2VydmFibGUoZlZhbHVlKSAmJiBfLmlzRnVuY3Rpb24oZlZhbHVlKSA/IGZWYWx1ZSgpIDoga28udW53cmFwKGZWYWx1ZSksXG5cdFx0XHRvcGVuVGlwcyA9IGVsZW1lbnQuX19vcGVudGlwO1xuXG5cdFx0aWYgKG9wZW5UaXBzKSB7XG5cdFx0XHRpZiAoJycgPT09IHZhbHVlKSB7XG5cdFx0XHRcdG9wZW5UaXBzLmhpZGUoKTtcblx0XHRcdFx0b3BlblRpcHMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRvcGVuVGlwcy5zZXRDb250ZW50KCcnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdGlmICgkZWwuaXMoJzp2aXNpYmxlJykpIHtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNldENvbnRlbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuYWN0aXZhdGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuaGlkZSgpO1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuc2V0Q29udGVudCgnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5yZWdpc3RyYXRlQm9vdHN0cmFwRHJvcGRvd24gPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cdFx0aWYgKEdsb2JhbHMgJiYgR2xvYmFscy5kYXRhLmFCb290c3RyYXBEcm9wZG93bnMpIHtcblx0XHRcdEdsb2JhbHMuZGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zLnB1c2goJChlbGVtZW50KSk7XG5cblx0XHRcdCQoZWxlbWVudCkuY2xpY2soKCkgPT4ge1xuXHRcdFx0XHRyZXF1aXJlKCdDb21tb24vVXRpbHMnKS5kZXRlY3REcm9wZG93blZpc2liaWxpdHkoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdC8vIH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9wZW5Ecm9wZG93blRyaWdnZXIgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHRcdGlmICghJGVsLmhhc0NsYXNzKCdvcGVuJykpIHtcblx0XHRcdFx0JGVsLmZpbmQoJy5kcm9wZG93bi10b2dnbGUnKS5kcm9wZG93bigndG9nZ2xlJyk7XG5cdFx0XHR9XG5cblx0XHRcdCRlbC5maW5kKCcuZHJvcGRvd24tdG9nZ2xlJykuZm9jdXMoKTtcblxuXHRcdFx0cmVxdWlyZSgnQ29tbW9uL1V0aWxzJykuZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KCk7XG5cdFx0XHRmVmFsdWVBY2Nlc3NvcigpKGZhbHNlKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcm9wZG93bkNsb3NlciA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHQkKGVsZW1lbnQpXG5cdFx0XHQuY2xvc2VzdCgnLmRyb3Bkb3duJylcblx0XHRcdC5vbignY2xpY2snLCAnLmUtaXRlbScsICgpID0+IHtcblx0XHRcdFx0JChlbGVtZW50KS5kcm9wZG93bigndG9nZ2xlJyk7XG5cdFx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnBvcG92ZXIgPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5wb3BvdmVyKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkucG9wb3ZlcignZGVzdHJveScpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY3NzdGV4dCA9IHt9O1xua28uYmluZGluZ0hhbmRsZXJzLmNzc3RleHQuaW5pdCA9IGtvLmJpbmRpbmdIYW5kbGVycy5jc3N0ZXh0LnVwZGF0ZSA9IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRpZiAoZWxlbWVudCAmJiBlbGVtZW50LnN0eWxlU2hlZXQgJiYgJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBlbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCkge1xuXHRcdGVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHR9IGVsc2Uge1xuXHRcdCQoZWxlbWVudCkudGV4dChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucmVzaXplY3JvcCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHQkKGVsZW1lbnQpXG5cdFx0XHQuYWRkQ2xhc3MoJ3Jlc2l6ZWNyb3AnKVxuXHRcdFx0LnJlc2l6ZWNyb3Aoe1xuXHRcdFx0XHQnd2lkdGgnOiAnMTAwJyxcblx0XHRcdFx0J2hlaWdodCc6ICcxMDAnLFxuXHRcdFx0XHQnd3JhcHBlckNTUyc6IHtcblx0XHRcdFx0XHQnYm9yZGVyLXJhZGl1cyc6ICcxMHB4J1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRmVmFsdWVBY2Nlc3NvcigpKCk7XG5cdFx0JChlbGVtZW50KS5yZXNpemVjcm9wKHtcblx0XHRcdCd3aWR0aCc6ICcxMDAnLFxuXHRcdFx0J2hlaWdodCc6ICcxMDAnXG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbktleURvd24gPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleWRvd24ua29PbktleURvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCkge1xuXHRcdFx0XHRyZXR1cm4gZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgZXZlbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleWRvd24ua29PbktleURvd24nKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9uRW50ZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleXByZXNzLmtvT25FbnRlcicsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50ICYmIDEzID09PSB3aW5kb3cucGFyc2VJbnQoZXZlbnQua2V5Q29kZSwgMTApKSB7XG5cdFx0XHRcdCQoZWxlbWVudCkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5cHJlc3Mua29PbkVudGVyJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vblNwYWNlID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXl1cC5rb09uU3BhY2UnLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAzMiA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsLCBldmVudCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXl1cC5rb09uU3BhY2UnKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9uVGFiID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlkb3duLmtvT25UYWInLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiA5ID09PSB3aW5kb3cucGFyc2VJbnQoZXZlbnQua2V5Q29kZSwgMTApKSB7XG5cdFx0XHRcdHJldHVybiBmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsLCAhIWV2ZW50LnNoaWZ0S2V5KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5ZG93bi5rb09uVGFiJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbkVzYyA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5dXAua29PbkVzYycsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50ICYmIDI3ID09PSB3aW5kb3cucGFyc2VJbnQoZXZlbnQua2V5Q29kZSwgMTApKSB7XG5cdFx0XHRcdCQoZWxlbWVudCkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5dXAua29PbkVzYycpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY2xpY2tPblRydWUgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JChlbGVtZW50KS5jbGljaygpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm1vZGFsID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyk7XG5cblx0XHQkKGVsZW1lbnQpXG5cdFx0XHQudG9nZ2xlQ2xhc3MoJ2ZhZGUnLCAhR2xvYmFscy5iTW9iaWxlRGV2aWNlKVxuXHRcdFx0Lm1vZGFsKHtcblx0XHRcdFx0J2tleWJvYXJkJzogZmFsc2UsXG5cdFx0XHRcdCdzaG93Jzoga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpXG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdzaG93bi5rb01vZGFsJywgVXRpbHMud2luZG93UmVzaXplQ2FsbGJhY2spXG5cdFx0XHQuZmluZCgnLmNsb3NlJylcblx0XHRcdC5vbignY2xpY2sua29Nb2RhbCcsICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlQWNjZXNzb3IoKShmYWxzZSk7XG5cdFx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQub2ZmKCdzaG93bi5rb01vZGFsJylcblx0XHRcdFx0LmZpbmQoJy5jbG9zZScpXG5cdFx0XHRcdC5vZmYoJ2NsaWNrLmtvTW9kYWwnKTtcblx0XHR9KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblxuXHRcdCQoZWxlbWVudCkubW9kYWwoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpID8gJ3Nob3cnIDogJ2hpZGUnKTtcblxuXHRcdGlmIChHbG9iYWxzLiRodG1sLmhhc0NsYXNzKCdybC1hbmltJykpIHtcblx0XHRcdEdsb2JhbHMuJGh0bWwuYWRkQ2xhc3MoJ3JsLW1vZGFsLWFuaW1hdGlvbicpO1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdEdsb2JhbHMuJGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLW1vZGFsLWFuaW1hdGlvbicpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMubW9tZW50ID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vTW9tZW50b3InKS5tb21lbnRUb05vZGUoXG5cdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdC5hZGRDbGFzcygnbW9tZW50Jylcblx0XHRcdFx0LmRhdGEoJ21vbWVudC10aW1lJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKVxuXHRcdCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL01vbWVudG9yJykubW9tZW50VG9Ob2RlKCQoZWxlbWVudCkuZGF0YSgnbW9tZW50LXRpbWUnLCBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmkxOG5Jbml0ID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4blRvTm9kZXMoZWxlbWVudCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50cmFuc2xhdG9ySW5pdCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG5Ub05vZGVzKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaTE4blVwZGF0ZSA9IHtcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuVG9Ob2RlcyhlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmxpbmsgPSB7XG5cdHVwZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLmF0dHIoJ2hyZWYnLCBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudGl0bGUgPSB7XG5cdHVwZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLmF0dHIoJ3RpdGxlJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRleHRGID0ge1xuXHRpbml0OiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdCQoZWxlbWVudCkudGV4dChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaW5pdERvbSA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHRmVmFsdWVBY2Nlc3NvcigpKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaW5pdEZpeGVkVHJpZ2dlciA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVzID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpLFxuXHRcdFx0JGVsID0gJChlbGVtZW50KSxcblx0XHRcdHRvcCA9IHZhbHVlc1sxXSB8fCAwO1xuXG5cdFx0bGV0ICRjb250YWluZXIgPSAkKHZhbHVlc1swXSB8fCBudWxsKTtcblx0XHQkY29udGFpbmVyID0gJGNvbnRhaW5lclswXSA/ICRjb250YWluZXIgOiBudWxsO1xuXHRcdGlmICgkY29udGFpbmVyKSB7XG5cdFx0XHQkd2luLnJlc2l6ZSgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9mZnNldCA9ICRjb250YWluZXIgPyAkY29udGFpbmVyLm9mZnNldCgpIDogbnVsbDtcblx0XHRcdFx0aWYgKG9mZnNldCAmJiBvZmZzZXQudG9wKSB7XG5cdFx0XHRcdFx0JGVsLmNzcygndG9wJywgb2Zmc2V0LnRvcCArIHRvcCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXRSZXNpemVUcmlnZ2VyID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCB2YWx1ZXMgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cdFx0JChlbGVtZW50KS5jc3Moe1xuXHRcdFx0J2hlaWdodCc6IHZhbHVlc1sxXSxcblx0XHRcdCdtaW4taGVpZ2h0JzogdmFsdWVzWzFdXG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKG9FbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0XHRHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdHZhbHVlcyA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKTtcblxuXHRcdGxldCB2YWx1ZSA9IFV0aWxzLnBJbnQodmFsdWVzWzFdKSxcblx0XHRcdHNpemUgPSAwLFxuXHRcdFx0b2Zmc2V0ID0gJChvRWxlbWVudCkub2Zmc2V0KCkudG9wO1xuXG5cdFx0aWYgKDAgPCBvZmZzZXQpIHtcblx0XHRcdG9mZnNldCArPSBVdGlscy5wSW50KHZhbHVlc1syXSk7XG5cdFx0XHRzaXplID0gR2xvYmFscy4kd2luLmhlaWdodCgpIC0gb2Zmc2V0O1xuXG5cdFx0XHRpZiAodmFsdWUgPCBzaXplKSB7XG5cdFx0XHRcdHZhbHVlID0gc2l6ZTtcblx0XHRcdH1cblxuXHRcdFx0JChvRWxlbWVudCkuY3NzKHtcblx0XHRcdFx0J2hlaWdodCc6IHZhbHVlLFxuXHRcdFx0XHQnbWluLWhlaWdodCc6IHZhbHVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5hcHBlbmREb20gPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmhpZGUoKVxuXHRcdFx0LmVtcHR5KClcblx0XHRcdC5hcHBlbmQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKVxuXHRcdFx0LnNob3coKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmRyYWdnYWJsZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpLFxuXHRcdFx0VXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKTtcblxuXHRcdGlmICghR2xvYmFscy5iTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHRjb25zdCB0cmlnZ2VyWm9uZSA9IDEwMCxcblx0XHRcdFx0c2Nyb2xsU3BlZWQgPSAzLFxuXHRcdFx0XHRmQWxsVmFsdWVGdW5jID0gZkFsbEJpbmRpbmdzQWNjZXNzb3IoKSxcblx0XHRcdFx0ZHJvcHBhYmxlU2VsZWN0b3IgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlU2VsZWN0b3IgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZVNlbGVjdG9yIDogJycsXG5cdFx0XHRcdGNvbmYgPSB7XG5cdFx0XHRcdFx0ZGlzdGFuY2U6IDIwLFxuXHRcdFx0XHRcdGhhbmRsZTogJy5kcmFnSGFuZGxlJyxcblx0XHRcdFx0XHRjdXJzb3JBdDogeyB0b3A6IDIyLCBsZWZ0OiAzIH0sXG5cdFx0XHRcdFx0cmVmcmVzaFBvc2l0aW9uczogdHJ1ZSxcblx0XHRcdFx0XHRzY3JvbGw6IHRydWUsXG5cdFx0XHRcdFx0ZHJhZzogbnVsbCxcblx0XHRcdFx0XHRzdG9wOiBudWxsLFxuXHRcdFx0XHRcdGhlbHBlcjogbnVsbFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoZHJvcHBhYmxlU2VsZWN0b3IpIHtcblx0XHRcdFx0Y29uZi5kcmFnID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0JChkcm9wcGFibGVTZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHRcdFx0b2Zmc2V0ID0gJHRoaXMub2Zmc2V0KCksXG5cdFx0XHRcdFx0XHRcdGJvdHRvbVBvcyA9IG9mZnNldC50b3AgKyAkdGhpcy5oZWlnaHQoKTtcblxuXHRcdFx0XHRcdFx0d2luZG93LmNsZWFySW50ZXJ2YWwoJHRoaXMuZGF0YSgndGltZXJTY3JvbGwnKSk7XG5cdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0aWYgKGV2ZW50LnBhZ2VYID49IG9mZnNldC5sZWZ0ICYmIGV2ZW50LnBhZ2VYIDw9IG9mZnNldC5sZWZ0ICsgJHRoaXMud2lkdGgoKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnQucGFnZVkgPj0gYm90dG9tUG9zIC0gdHJpZ2dlclpvbmUgJiYgZXZlbnQucGFnZVkgPD0gYm90dG9tUG9zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbW92ZVVwID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2Nyb2xsVG9wKCR0aGlzLnNjcm9sbFRvcCgpICsgc2Nyb2xsU3BlZWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0VXRpbHMud2luZG93UmVzaXplKCk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgd2luZG93LnNldEludGVydmFsKG1vdmVVcCwgMTApKTtcblx0XHRcdFx0XHRcdFx0XHRtb3ZlVXAoKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChldmVudC5wYWdlWSA+PSBvZmZzZXQudG9wICYmIGV2ZW50LnBhZ2VZIDw9IG9mZnNldC50b3AgKyB0cmlnZ2VyWm9uZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1vdmVEb3duID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2Nyb2xsVG9wKCR0aGlzLnNjcm9sbFRvcCgpIC0gc2Nyb2xsU3BlZWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0VXRpbHMud2luZG93UmVzaXplKCk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgd2luZG93LnNldEludGVydmFsKG1vdmVEb3duLCAxMCkpO1xuXHRcdFx0XHRcdFx0XHRcdG1vdmVEb3duKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25mLnN0b3AgPSAoKSA9PiB7XG5cdFx0XHRcdFx0JChkcm9wcGFibGVTZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJykpO1xuXHRcdFx0XHRcdFx0JHRoaXMuZGF0YSgndGltZXJTY3JvbGwnLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGNvbmYuaGVscGVyID0gKGV2ZW50KSA9PiBmVmFsdWVBY2Nlc3NvcigpKGV2ZW50ICYmIGV2ZW50LnRhcmdldCA/IGtvLmRhdGFGb3IoZXZlbnQudGFyZ2V0KSA6IG51bGwpO1xuXG5cdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdC5kcmFnZ2FibGUoY29uZilcblx0XHRcdFx0Lm9uKCdtb3VzZWRvd24ua29EcmFnZ2FibGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0VXRpbHMucmVtb3ZlSW5Gb2N1cygpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0XHQub2ZmKCdtb3VzZWRvd24ua29EcmFnZ2FibGUnKVxuXHRcdFx0XHRcdC5kcmFnZ2FibGUoJ2Rlc3Ryb3knKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmRyb3BwYWJsZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXHRcdGlmICghR2xvYmFscy5iTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHRjb25zdCBmVmFsdWVGdW5jID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdFx0ZkFsbFZhbHVlRnVuYyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRcdGZPdmVyQ2FsbGJhY2sgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3ZlciA/IGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3ZlciA6IG51bGwsXG5cdFx0XHRcdGZPdXRDYWxsYmFjayA9IGZBbGxWYWx1ZUZ1bmMgJiYgZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVPdXQgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU91dCA6IG51bGwsXG5cdFx0XHRcdGNvbmYgPSB7XG5cdFx0XHRcdFx0dG9sZXJhbmNlOiAncG9pbnRlcicsXG5cdFx0XHRcdFx0aG92ZXJDbGFzczogJ2Ryb3BwYWJsZUhvdmVyJyxcblx0XHRcdFx0XHRkcm9wOiBudWxsLFxuXHRcdFx0XHRcdG92ZXI6IG51bGwsXG5cdFx0XHRcdFx0b3V0OiBudWxsXG5cdFx0XHRcdH07XG5cblx0XHRcdGlmIChmVmFsdWVGdW5jKSB7XG5cdFx0XHRcdGNvbmYuZHJvcCA9IChldmVudCwgdWkpID0+IHtcblx0XHRcdFx0XHRmVmFsdWVGdW5jKGV2ZW50LCB1aSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKGZPdmVyQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRjb25mLm92ZXIgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0XHRmT3ZlckNhbGxiYWNrKGV2ZW50LCB1aSk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmT3V0Q2FsbGJhY2spIHtcblx0XHRcdFx0XHRjb25mLm91dCA9IChldmVudCwgdWkpID0+IHtcblx0XHRcdFx0XHRcdGZPdXRDYWxsYmFjayhldmVudCwgdWkpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkKGVsZW1lbnQpLmRyb3BwYWJsZShjb25mKTtcblxuXHRcdFx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdFx0XHQkKGVsZW1lbnQpLmRyb3BwYWJsZSgnZGVzdHJveScpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5uYW5vID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpLFxuXHRcdFx0U2V0dGluZ3MgPSByZXF1aXJlKCdTdG9yYWdlL1NldHRpbmdzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYkRpc2FibGVOYW5vU2Nyb2xsICYmICFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndXNlTmF0aXZlU2Nyb2xsYmFycycpKSB7XG5cdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdC5hZGRDbGFzcygnbmFubycpXG5cdFx0XHRcdC5uYW5vU2Nyb2xsZXIoe1xuXHRcdFx0XHRcdGlPU05hdGl2ZVNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdFx0cHJldmVudFBhZ2VTY3JvbGxpbmc6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuc2F2ZVRyaWdnZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblxuXHRcdCRlbC5kYXRhKFxuXHRcdFx0J3NhdmUtdHJpZ2dlci10eXBlJyxcblx0XHRcdCRlbC5pcygnaW5wdXRbdHlwZT10ZXh0XSxpbnB1dFt0eXBlPWVtYWlsXSxpbnB1dFt0eXBlPXBhc3N3b3JkXSxzZWxlY3QsdGV4dGFyZWEnKSA/ICdpbnB1dCcgOiAnY3VzdG9tJ1xuXHRcdCk7XG5cblx0XHRpZiAoJ2N1c3RvbScgPT09ICRlbC5kYXRhKCdzYXZlLXRyaWdnZXItdHlwZScpKSB7XG5cdFx0XHQkZWxcblx0XHRcdFx0LmFwcGVuZChcblx0XHRcdFx0XHQnJm5ic3A7Jm5ic3A7JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLXNwaW5uZXIgYW5pbWF0ZWRcIj48L2k+JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLXJlbW92ZSBlcnJvclwiPjwvaT4nICtcblx0XHRcdFx0XHRcdCc8aSBjbGFzcz1cImljb24tb2sgc3VjY2Vzc1wiPjwvaT4nXG5cdFx0XHRcdClcblx0XHRcdFx0LmFkZENsYXNzKCdzZXR0aW5ncy1zYXZlZC10cmlnZ2VyJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC5hZGRDbGFzcygnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlci1pbnB1dCcpO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCB2YWx1ZSA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHRpZiAoJ2N1c3RvbScgPT09ICRlbC5kYXRhKCdzYXZlLXRyaWdnZXItdHlwZScpKSB7XG5cdFx0XHRzd2l0Y2ggKHZhbHVlLnRvU3RyaW5nKCkpIHtcblx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5lcnJvcicpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzAnOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLmVycm9yJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICctMic6XG5cdFx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3dpdGNoICh2YWx1ZS50b1N0cmluZygpKSB7XG5cdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdCRlbC5hZGRDbGFzcygnc3VjY2VzcycpLnJlbW92ZUNsYXNzKCdlcnJvcicpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHQkZWwuYWRkQ2xhc3MoJ2Vycm9yJykucmVtb3ZlQ2xhc3MoJ3N1Y2Nlc3MnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnLTInOlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdCRlbC5yZW1vdmVDbGFzcygnZXJyb3Igc3VjY2VzcycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmVtYWlsc1RhZ3MgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdFx0RW1haWxNb2RlbCA9IHJlcXVpcmUoJ01vZGVsL0VtYWlsJykuZGVmYXVsdCxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0ZkFsbEJpbmRpbmdzID0gZkFsbEJpbmRpbmdzQWNjZXNzb3IoKSxcblx0XHRcdGZBdXRvQ29tcGxldGVTb3VyY2UgPSBmQWxsQmluZGluZ3MuYXV0b0NvbXBsZXRlU291cmNlIHx8IG51bGwsXG5cdFx0XHRpbnB1dERlbGltaXRlcnMgPSBbJywnLCAnOycsICdcXG4nXSxcblx0XHRcdGZGb2N1c0NhbGxiYWNrID0gKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLmZvY3VzZWQpIHtcblx0XHRcdFx0XHRmVmFsdWUuZm9jdXNlZCghIXZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdCRlbC5pbnB1dG9zYXVydXMoe1xuXHRcdFx0cGFyc2VPbkJsdXI6IHRydWUsXG5cdFx0XHRhbGxvd0RyYWdBbmREcm9wOiB0cnVlLFxuXHRcdFx0Zm9jdXNDYWxsYmFjazogZkZvY3VzQ2FsbGJhY2ssXG5cdFx0XHRpbnB1dERlbGltaXRlcnM6IGlucHV0RGVsaW1pdGVycyxcblx0XHRcdGF1dG9Db21wbGV0ZVNvdXJjZTogZkF1dG9Db21wbGV0ZVNvdXJjZSxcblx0XHRcdHNwbGl0SG9vazogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHYgPSBVdGlscy50cmltKHZhbHVlKTtcblx0XHRcdFx0aWYgKHYgJiYgLTEgPCBpbnB1dERlbGltaXRlcnMuaW5kZXhPZih2LnN1YnN0cigtMSkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIEVtYWlsTW9kZWwuc3BsaXRFbWFpbExpbmUodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fSxcblx0XHRcdHBhcnNlSG9vazogKGlucHV0KSA9PlxuXHRcdFx0XHRfLm1hcChcblx0XHRcdFx0XHRfLmZsYXR0ZW4oXG5cdFx0XHRcdFx0XHRfLm1hcChpbnB1dCwgKGlucHV0VmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdmFsdWVzID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShpbnB1dFZhbHVlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlcy5sZW5ndGggPyB2YWx1ZXMgOiBpbnB1dFZhbHVlO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdChpdGVtKSA9PiAoXy5pc09iamVjdChpdGVtKSA/IFtpdGVtLnRvTGluZShmYWxzZSksIGl0ZW1dIDogW2l0ZW0sIG51bGxdKVxuXHRcdFx0XHQpLFxuXHRcdFx0Y2hhbmdlOiAoZXZlbnQpID0+IHtcblx0XHRcdFx0JGVsLmRhdGEoJ0VtYWlsc1RhZ3NWYWx1ZScsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG5cdFx0XHRcdGZWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYgKGZWYWx1ZSAmJiBmVmFsdWUuZm9jdXNlZCAmJiBmVmFsdWUuZm9jdXNlZC5zdWJzY3JpYmUpIHtcblx0XHRcdGZWYWx1ZS5mb2N1c2VkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0JGVsLmlucHV0b3NhdXJ1cyh2YWx1ZSA/ICdmb2N1cycgOiAnYmx1cicpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRvRWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdHZhbHVlID0ga28udW53cmFwKGZWYWx1ZSk7XG5cblx0XHRpZiAoJG9FbC5kYXRhKCdFbWFpbHNUYWdzVmFsdWUnKSAhPT0gdmFsdWUpIHtcblx0XHRcdCRvRWwudmFsKHZhbHVlKTtcblx0XHRcdCRvRWwuZGF0YSgnRW1haWxzVGFnc1ZhbHVlJywgdmFsdWUpO1xuXHRcdFx0JG9FbC5pbnB1dG9zYXVydXMoJ3JlZnJlc2gnKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5jb21tYW5kID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KSA9PiB7XG5cdFx0Y29uc3QganFFbGVtZW50ID0gJChlbGVtZW50KSxcblx0XHRcdGNvbW1hbmQgPSBmVmFsdWVBY2Nlc3NvcigpO1xuXG5cdFx0aWYgKCFjb21tYW5kIHx8ICFjb21tYW5kLmlzQ29tbWFuZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBzaG91bGQgYmUgYSBjb21tYW5kJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFjb21tYW5kLmVuYWJsZWQpIHtcblx0XHRcdGNvbW1hbmQuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFjb21tYW5kLmNhbkV4ZWN1dGUpIHtcblx0XHRcdGNvbnN0IF9fcmVhbENhbkV4ZWN1dGUgPSBjb21tYW5kLl9fcmVhbENhbkV4ZWN1dGU7XG5cdFx0XHRpZiAoXy5pc0Z1bmN0aW9uKF9fcmVhbENhbkV4ZWN1dGUpKSB7XG5cdFx0XHRcdGNvbW1hbmQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbW1hbmQuZW5hYmxlZCgpICYmIF9fcmVhbENhbkV4ZWN1dGUuY2FsbCh2aWV3TW9kZWwsIHZpZXdNb2RlbCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29tbWFuZC5jYW5FeGVjdXRlID0ga28uY29tcHV0ZWQoKCkgPT4gY29tbWFuZC5lbmFibGVkKCkgJiYgISFfX3JlYWxDYW5FeGVjdXRlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRqcUVsZW1lbnQuYWRkQ2xhc3MoJ2NvbW1hbmQnKTtcblx0XHRrby5iaW5kaW5nSGFuZGxlcnNbanFFbGVtZW50LmlzKCdmb3JtJykgPyAnc3VibWl0JyA6ICdjbGljayddLmluaXQoXG5cdFx0XHRlbGVtZW50LFxuXHRcdFx0ZlZhbHVlQWNjZXNzb3IsXG5cdFx0XHRmQWxsQmluZGluZ3NBY2Nlc3Nvcixcblx0XHRcdHZpZXdNb2RlbCxcblx0XHRcdGJpbmRpbmdDb250ZXh0XG5cdFx0KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBqcUVsZW1lbnQgPSAkKGVsZW1lbnQpLFxuXHRcdFx0Y29tbWFuZCA9IGZWYWx1ZUFjY2Vzc29yKCk7XG5cblx0XHRsZXQgcmVzdWx0ID0gY29tbWFuZC5lbmFibGVkKCk7XG5cblx0XHRqcUVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2NvbW1hbmQtbm90LWVuYWJsZWQnLCAhcmVzdWx0KTtcblxuXHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdHJlc3VsdCA9IGNvbW1hbmQuY2FuRXhlY3V0ZSgpO1xuXHRcdFx0anFFbGVtZW50LnRvZ2dsZUNsYXNzKCdjb21tYW5kLWNhbi1ub3QtYmUtZXhlY3V0ZScsICFyZXN1bHQpO1xuXHRcdH1cblxuXHRcdGpxRWxlbWVudC50b2dnbGVDbGFzcygnY29tbWFuZC1kaXNhYmxlZCBkaXNhYmxlIGRpc2FibGVkJywgIXJlc3VsdCkudG9nZ2xlQ2xhc3MoJ25vLWRpc2FibGVkJywgISFyZXN1bHQpO1xuXG5cdFx0aWYgKGpxRWxlbWVudC5pcygnaW5wdXQnKSB8fCBqcUVsZW1lbnQuaXMoJ2J1dHRvbicpKSB7XG5cdFx0XHRqcUVsZW1lbnQucHJvcCgnZGlzYWJsZWQnLCAhcmVzdWx0KTtcblx0XHR9XG5cdH1cbn07XG5cbi8vIGV4dGVuZGVyc1xuXG5rby5leHRlbmRlcnMudHJpbW1lciA9ICh0YXJnZXQpID0+IHtcblx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRyZXN1bHQgPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0YXJnZXQsXG5cdFx0XHR3cml0ZTogKG5ld1ZhbHVlKSA9PiB7XG5cdFx0XHRcdHRhcmdldChVdGlscy50cmltKG5ld1ZhbHVlLnRvU3RyaW5nKCkpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRyZXN1bHQodGFyZ2V0KCkpO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxua28uZXh0ZW5kZXJzLnBvc0ludGVyZXIgPSAodGFyZ2V0LCBkZWZhdWx0VmFsKSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LFxuXHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHRsZXQgdmFsID0gVXRpbHMucEludChuZXdWYWx1ZS50b1N0cmluZygpLCBkZWZhdWx0VmFsKTtcblx0XHRcdFx0aWYgKDAgPj0gdmFsKSB7XG5cdFx0XHRcdFx0dmFsID0gZGVmYXVsdFZhbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWwgPT09IHRhcmdldCgpICYmICcnICsgdmFsICE9PSAnJyArIG5ld1ZhbHVlKSB7XG5cdFx0XHRcdFx0dGFyZ2V0KHZhbCArIDEpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0KHZhbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmtvLmV4dGVuZGVycy5saW1pdGVkTGlzdCA9ICh0YXJnZXQsIGxpbWl0ZWRMaXN0KSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga29cblx0XHRcdC5jb21wdXRlZCh7XG5cdFx0XHRcdHJlYWQ6IHRhcmdldCxcblx0XHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGtvLnVud3JhcCh0YXJnZXQpLFxuXHRcdFx0XHRcdFx0bGlzdCA9IGtvLnVud3JhcChsaW1pdGVkTGlzdCk7XG5cblx0XHRcdFx0XHRpZiAoVXRpbHMuaXNOb25FbXB0eUFycmF5KGxpc3QpKSB7XG5cdFx0XHRcdFx0XHRpZiAoLTEgPCBVdGlscy5pbkFycmF5KG5ld1ZhbHVlLCBsaXN0KSkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobmV3VmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgtMSA8IFV0aWxzLmluQXJyYXkoY3VycmVudFZhbHVlLCBsaXN0KSkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQoY3VycmVudFZhbHVlICsgJyAnKTtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobGlzdFswXSArICcgJyk7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChsaXN0WzBdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFyZ2V0KCcnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRyZXN1bHQodGFyZ2V0KCkpO1xuXG5cdGlmICghcmVzdWx0LnZhbHVlSGFzTXV0YXRlZCkge1xuXHRcdHJlc3VsdC52YWx1ZUhhc011dGF0ZWQgPSAoKSA9PiB7XG5cdFx0XHR0YXJnZXQudmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5rby5leHRlbmRlcnMucmV2ZXJzaWJsZSA9ICh0YXJnZXQpID0+IHtcblx0bGV0IHZhbHVlID0gdGFyZ2V0KCk7XG5cblx0dGFyZ2V0LmNvbW1pdCA9ICgpID0+IHtcblx0XHR2YWx1ZSA9IHRhcmdldCgpO1xuXHR9O1xuXG5cdHRhcmdldC5yZXZlcnNlID0gKCkgPT4ge1xuXHRcdHRhcmdldCh2YWx1ZSk7XG5cdH07XG5cblx0dGFyZ2V0LmNvbW1pdGVkVmFsdWUgPSAoKSA9PiB2YWx1ZTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy50b2dnbGVTdWJzY3JpYmUgPSAodGFyZ2V0LCBvcHRpb25zKSA9PiB7XG5cdHRhcmdldC5zdWJzY3JpYmUob3B0aW9uc1sxXSwgb3B0aW9uc1swXSwgJ2JlZm9yZUNoYW5nZScpO1xuXHR0YXJnZXQuc3Vic2NyaWJlKG9wdGlvbnNbMl0sIG9wdGlvbnNbMF0pO1xuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLnRvZ2dsZVN1YnNjcmliZVByb3BlcnR5ID0gKHRhcmdldCwgb3B0aW9ucykgPT4ge1xuXHRjb25zdCBwcm9wID0gb3B0aW9uc1sxXTtcblx0aWYgKHByb3ApIHtcblx0XHR0YXJnZXQuc3Vic2NyaWJlKFxuXHRcdFx0KHByZXYpID0+IHtcblx0XHRcdFx0aWYgKHByZXYgJiYgcHJldltwcm9wXSkge1xuXHRcdFx0XHRcdHByZXZbcHJvcF0oZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b3B0aW9uc1swXSxcblx0XHRcdCdiZWZvcmVDaGFuZ2UnXG5cdFx0KTtcblxuXHRcdHRhcmdldC5zdWJzY3JpYmUoKG5leHQpID0+IHtcblx0XHRcdGlmIChuZXh0ICYmIG5leHRbcHJvcF0pIHtcblx0XHRcdFx0bmV4dFtwcm9wXSh0cnVlKTtcblx0XHRcdH1cblx0XHR9LCBvcHRpb25zWzBdKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMuZmFsc2VUaW1lb3V0ID0gKHRhcmdldCwgb3B0aW9uKSA9PiB7XG5cdHRhcmdldC5pRmFsc2VUaW1lb3V0VGltZW91dCA9IDA7XG5cdHRhcmdldC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRhcmdldC5pRmFsc2VUaW1lb3V0VGltZW91dCk7XG5cdFx0XHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRhcmdldChmYWxzZSk7XG5cdFx0XHRcdHRhcmdldC5pRmFsc2VUaW1lb3V0VGltZW91dCA9IDA7XG5cdFx0XHR9LCByZXF1aXJlKCdDb21tb24vVXRpbHMnKS5wSW50KG9wdGlvbikpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy5zcGVjaWFsVGhyb3R0bGUgPSAodGFyZ2V0LCBvcHRpb24pID0+IHtcblx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0VmFsdWUgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKS5wSW50KG9wdGlvbik7XG5cdGlmICgwIDwgdGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0VmFsdWUpIHtcblx0XHR0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQgPSAwO1xuXHRcdHRhcmdldC52YWx1ZUZvclJlYWQgPSBrby5vYnNlcnZhYmxlKCEhdGFyZ2V0KCkpLmV4dGVuZCh7IHRocm90dGxlOiAxMCB9KTtcblxuXHRcdHJldHVybiBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0YXJnZXQudmFsdWVGb3JSZWFkLFxuXHRcdFx0d3JpdGU6IChiVmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKGJWYWx1ZSkge1xuXHRcdFx0XHRcdHRhcmdldC52YWx1ZUZvclJlYWQoYlZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAodGFyZ2V0LnZhbHVlRm9yUmVhZCgpKSB7XG5cdFx0XHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dCk7XG5cdFx0XHRcdFx0XHR0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldC52YWx1ZUZvclJlYWQoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQgPSAwO1xuXHRcdFx0XHRcdFx0fSwgdGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0VmFsdWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGJWYWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLmlkbGVUcmlnZ2VyID0gKHRhcmdldCkgPT4ge1xuXHR0YXJnZXQudHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbi8vIGZ1bmN0aW9uc1xuXG5rby5vYnNlcnZhYmxlLmZuLmlkbGVUcmlnZ2VyID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmV4dGVuZCh7ICdpZGxlVHJpZ2dlcic6IHRydWUgfSk7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlTm9uZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmhhc0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdHJldHVybiB0aGlzO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZUVtYWlsID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHR0aGlzLmhhc0Vycm9yKCcnICE9PSB2YWx1ZSAmJiAhL15bXkBcXHNdK0BbXkBcXHNdKyQvLnRlc3QodmFsdWUpKTtcblx0fSk7XG5cblx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlU2ltcGxlRW1haWwgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5oYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdHRoaXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdHRoaXMuaGFzRXJyb3IoJycgIT09IHZhbHVlICYmICEvXi4rQC4rJC8udGVzdCh2YWx1ZSkpO1xuXHR9KTtcblxuXHR0aGlzLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4uZGVsZXRlQWNjZXNzSGVscGVyID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAzMDAwIH0pLmV4dGVuZCh7IHRvZ2dsZVN1YnNjcmliZVByb3BlcnR5OiBbdGhpcywgJ2RlbGV0ZUFjY2VzcyddIH0pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4udmFsaWRhdGVGdW5jID0gZnVuY3Rpb24oZkZ1bmMpIHtcblx0dGhpcy5oYXNGdW5jRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRpZiAoXy5pc0Z1bmN0aW9uKGZGdW5jKSkge1xuXHRcdHRoaXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0dGhpcy5oYXNGdW5jRXJyb3IoIWZGdW5jKHZhbHVlKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBrbztcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IEF1dG9saW5rZXIgZnJvbSAnQXV0b2xpbmtlcic7XG5cbmltcG9ydCB7ICR3aW4sICRkaXYsICRoY29udCwgZHJvcGRvd25WaXNpYmlsaXR5LCBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgQ29tcG9zZVR5cGUsIEV2ZW50S2V5Q29kZSwgU2F2ZVNldHRpbmdzU3RlcCwgRm9sZGVyVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBNaW1lIH0gZnJvbSAnQ29tbW9uL01pbWUnO1xuaW1wb3J0IHsgamFzc2wgfSBmcm9tICdDb21tb24vSmFzc2wnO1xuXG5jb25zdCB0cmltID0gJC50cmltO1xuY29uc3QgaW5BcnJheSA9ICQuaW5BcnJheTtcbmNvbnN0IGlzQXJyYXkgPSBfLmlzQXJyYXk7XG5jb25zdCBpc09iamVjdCA9IF8uaXNPYmplY3Q7XG5jb25zdCBpc0Z1bmMgPSBfLmlzRnVuY3Rpb247XG5jb25zdCBpc1VuZCA9IF8uaXNVbmRlZmluZWQ7XG5jb25zdCBpc051bGwgPSBfLmlzTnVsbDtcbmNvbnN0IGhhcyA9IF8uaGFzO1xuY29uc3QgYmluZCA9IF8uYmluZDtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdW5jdGlvblxuY29uc3Qgbm9vcFRydWUgPSAoKSA9PiB0cnVlO1xuY29uc3Qgbm9vcEZhbHNlID0gKCkgPT4gZmFsc2U7XG5cbmV4cG9ydCB7IHRyaW0sIGluQXJyYXksIGlzQXJyYXksIGlzT2JqZWN0LCBpc0Z1bmMsIGlzVW5kLCBpc051bGwsIGhhcywgYmluZCwgbm9vcCwgbm9vcFRydWUsIG5vb3BGYWxzZSwgamFzc2wgfTtcblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWxlbnRUcnlDYXRjaChmdW5jKSB7XG5cdHRyeSB7XG5cdFx0ZnVuYygpO1xuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vcm1hbCh2YWx1ZSkge1xuXHRyZXR1cm4gIWlzVW5kKHZhbHVlKSAmJiAhaXNOdWxsKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGluY2x1ZGVaZXJvID0gdHJ1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Bvc051bWVyaWModmFsdWUsIGluY2x1ZGVaZXJvID0gdHJ1ZSkge1xuXHRyZXR1cm4gIWlzTm9ybWFsKHZhbHVlKVxuXHRcdD8gZmFsc2Vcblx0XHQ6IGluY2x1ZGVaZXJvXG5cdFx0PyAvXlswLTldKiQvLnRlc3QodmFsdWUudG9TdHJpbmcoKSlcblx0XHQ6IC9eWzEtOV0rWzAtOV0qJC8udGVzdCh2YWx1ZS50b1N0cmluZygpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IGRlZmF1bHRWYWx1ciA9IDBcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwSW50KHZhbHVlLCBkZWZhdWx0VmFsdXIgPSAwKSB7XG5cdGNvbnN0IHJlc3VsdCA9IGlzTm9ybWFsKHZhbHVlKSAmJiAnJyAhPT0gdmFsdWUgPyB3aW5kb3cucGFyc2VJbnQodmFsdWUsIDEwKSA6IGRlZmF1bHRWYWx1cjtcblx0cmV0dXJuIHdpbmRvdy5pc05hTihyZXN1bHQpID8gZGVmYXVsdFZhbHVyIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwU3RyaW5nKHZhbHVlKSB7XG5cdHJldHVybiBpc05vcm1hbCh2YWx1ZSkgPyAnJyArIHZhbHVlIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwQm9vbCh2YWx1ZSkge1xuXHRyZXR1cm4gISF2YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9vbFRvQWpheCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPyAnMScgOiAnMCc7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb25FbXB0eUFycmF5KHZhbHVlcykge1xuXHRyZXR1cm4gaXNBcnJheSh2YWx1ZXMpICYmIDAgPCB2YWx1ZXMubGVuZ3RoO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KSB7XG5cdHJldHVybiB3aW5kb3cuZW5jb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVVSSUNvbXBvbmVudChjb21wb25lbnQpIHtcblx0cmV0dXJuIHdpbmRvdy5kZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVVJJKHVybCkge1xuXHRyZXR1cm4gd2luZG93LmRlY29kZVVSSSh1cmwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVUkkodXJsKSB7XG5cdHJldHVybiB3aW5kb3cuZW5jb2RlVVJJKHVybCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxlUXVlcnlQYXJzZXIocXVlcnlTdHJpbmcpIHtcblx0bGV0IGluZGV4ID0gMCxcblx0XHRsZW4gPSAwLFxuXHRcdHRlbXAgPSBudWxsO1xuXG5cdGNvbnN0IHF1ZXJpZXMgPSBxdWVyeVN0cmluZy5zcGxpdCgnJicpLFxuXHRcdHBhcmFtcyA9IHt9O1xuXG5cdGZvciAobGVuID0gcXVlcmllcy5sZW5ndGg7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG5cdFx0dGVtcCA9IHF1ZXJpZXNbaW5kZXhdLnNwbGl0KCc9Jyk7XG5cdFx0cGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudCh0ZW1wWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQodGVtcFsxXSk7XG5cdH1cblxuXHRyZXR1cm4gcGFyYW1zO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyPX0gbGVuID0gMzJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWtlTWQ1KGxlbiA9IDMyKSB7XG5cdGNvbnN0IGxpbmUgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jyxcblx0XHRsaW5lTGVuID0gbGluZS5sZW5ndGg7XG5cblx0bGVuID0gcEludChsZW4pO1xuXG5cdGxldCByZXN1bHQgPSAnJztcblx0d2hpbGUgKHJlc3VsdC5sZW5ndGggPCBsZW4pIHtcblx0XHRyZXN1bHQgKz0gbGluZS5zdWJzdHIod2luZG93Lk1hdGgucm91bmQod2luZG93Lk1hdGgucmFuZG9tKCkgKiBsaW5lTGVuKSwgMSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSHRtbCh0ZXh0KSB7XG5cdHJldHVybiBpc05vcm1hbCh0ZXh0KSA/IF8uZXNjYXBlKHRleHQudG9TdHJpbmcoKSkgOiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtudW1iZXI9fSBsZW4gPSAxMDBcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFBsYWluVGV4dCh0ZXh0LCBsZW4gPSAxMDApIHtcblx0bGV0IHByZWZpeCA9ICcnLFxuXHRcdHN1YlRleHQgPSAnJyxcblx0XHRyZXN1bHQgPSB0ZXh0LFxuXHRcdHNwYWNlUG9zID0gMCxcblx0XHRuZXdMaW5lUG9zID0gMDtcblxuXHR3aGlsZSAocmVzdWx0Lmxlbmd0aCA+IGxlbikge1xuXHRcdHN1YlRleHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIGxlbik7XG5cdFx0c3BhY2VQb3MgPSBzdWJUZXh0Lmxhc3RJbmRleE9mKCcgJyk7XG5cdFx0bmV3TGluZVBvcyA9IHN1YlRleHQubGFzdEluZGV4T2YoJ1xcbicpO1xuXG5cdFx0aWYgKC0xICE9PSBuZXdMaW5lUG9zKSB7XG5cdFx0XHRzcGFjZVBvcyA9IG5ld0xpbmVQb3M7XG5cdFx0fVxuXG5cdFx0aWYgKC0xID09PSBzcGFjZVBvcykge1xuXHRcdFx0c3BhY2VQb3MgPSBsZW47XG5cdFx0fVxuXG5cdFx0cHJlZml4ICs9IHN1YlRleHQuc3Vic3RyaW5nKDAsIHNwYWNlUG9zKSArICdcXG4nO1xuXHRcdHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoc3BhY2VQb3MgKyAxKTtcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyByZXN1bHQ7XG59XG5cbmNvbnN0IHRpbWVPdXRBY3Rpb24gPSAoZnVuY3Rpb24oKSB7XG5cdGNvbnN0IHRpbWVPdXRzID0ge307XG5cdHJldHVybiAoYWN0aW9uLCBmRnVuY3Rpb24sIHRpbWVPdXQpID0+IHtcblx0XHR0aW1lT3V0c1thY3Rpb25dID0gaXNVbmQodGltZU91dHNbYWN0aW9uXSkgPyAwIDogdGltZU91dHNbYWN0aW9uXTtcblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVPdXRzW2FjdGlvbl0pO1xuXHRcdHRpbWVPdXRzW2FjdGlvbl0gPSB3aW5kb3cuc2V0VGltZW91dChmRnVuY3Rpb24sIHRpbWVPdXQpO1xuXHR9O1xufSkoKTtcblxuY29uc3QgdGltZU91dEFjdGlvblNlY29uZCA9IChmdW5jdGlvbigpIHtcblx0Y29uc3QgdGltZU91dHMgPSB7fTtcblx0cmV0dXJuIChhY3Rpb24sIGZGdW5jdGlvbiwgdGltZU91dCkgPT4ge1xuXHRcdGlmICghdGltZU91dHNbYWN0aW9uXSkge1xuXHRcdFx0dGltZU91dHNbYWN0aW9uXSA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0ZkZ1bmN0aW9uKCk7XG5cdFx0XHRcdHRpbWVPdXRzW2FjdGlvbl0gPSAwO1xuXHRcdFx0fSwgdGltZU91dCk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuZXhwb3J0IHsgdGltZU91dEFjdGlvbiwgdGltZU91dEFjdGlvblNlY29uZCB9O1xuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBtXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVNb2R1bGUobSkge1xuXHRyZXR1cm4gKG0gJiYgbS5kZWZhdWx0ID8gbS5kZWZhdWx0IDogbSkgfHwgJyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbkZvY3VzKCkge1xuXHR0cnkge1xuXHRcdGlmICh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuXHRcdFx0aWYgKGlzVW5kKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50Ll9faW5Gb2N1c0NhY2hlKSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5fX2luRm9jdXNDYWNoZSA9ICQod2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmlzKFxuXHRcdFx0XHRcdCdpbnB1dCx0ZXh0YXJlYSxpZnJhbWUsLmNrZV9lZGl0YWJsZSdcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICEhd2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuX19pbkZvY3VzQ2FjaGU7XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSW5Gb2N1cyhmb3JjZSkge1xuXHRpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYWN0aXZlRWwgPSAkKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblx0XHRcdGlmIChhY3RpdmVFbCAmJiBhY3RpdmVFbC5pcygnaW5wdXQsdGV4dGFyZWEnKSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGZvcmNlKSB7XG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdH1cbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGlvbigpIHtcblx0dHJ5IHtcblx0XHRpZiAod2luZG93ICYmIHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGlmIChzZWwgJiYgc2VsLnJlbW92ZUFsbFJhbmdlcykge1xuXHRcdFx0XHRzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LnNlbGVjdGlvbiAmJiB3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KSB7XG5cdFx0XHR3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBseVN1YmplY3RBZGQocHJlZml4LCBzdWJqZWN0KSB7XG5cdHByZWZpeCA9IHRyaW0ocHJlZml4LnRvVXBwZXJDYXNlKCkpO1xuXHRzdWJqZWN0ID0gdHJpbShzdWJqZWN0LnJlcGxhY2UoL1tcXHNdKy9nLCAnICcpKTtcblxuXHRsZXQgZHJvcCA9IGZhbHNlLFxuXHRcdHJlID0gJ1JFJyA9PT0gcHJlZml4LFxuXHRcdGZ3ZCA9ICdGV0QnID09PSBwcmVmaXg7XG5cblx0Y29uc3QgcGFydHMgPSBbXSxcblx0XHRwcmVmaXhJc1JlID0gIWZ3ZDtcblxuXHRpZiAoJycgIT09IHN1YmplY3QpIHtcblx0XHRfLmVhY2goc3ViamVjdC5zcGxpdCgnOicpLCAocGFydCkgPT4ge1xuXHRcdFx0Y29uc3QgdHJpbW1lZFBhcnQgPSB0cmltKHBhcnQpO1xuXHRcdFx0aWYgKCFkcm9wICYmICgvXihSRXxGV0QpJC9pLnRlc3QodHJpbW1lZFBhcnQpIHx8IC9eKFJFfEZXRClbWyhdW1xcZF0rW1xcXSldJC9pLnRlc3QodHJpbW1lZFBhcnQpKSkge1xuXHRcdFx0XHRpZiAoIXJlKSB7XG5cdFx0XHRcdFx0cmUgPSAhIS9eUkUvaS50ZXN0KHRyaW1tZWRQYXJ0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghZndkKSB7XG5cdFx0XHRcdFx0ZndkID0gISEvXkZXRC9pLnRlc3QodHJpbW1lZFBhcnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKHBhcnQpO1xuXHRcdFx0XHRkcm9wID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGlmIChwcmVmaXhJc1JlKSB7XG5cdFx0cmUgPSBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRmd2QgPSBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cmltKChwcmVmaXhJc1JlID8gJ1JlOiAnIDogJ0Z3ZDogJykgKyAocmUgPyAnUmU6ICcgOiAnJykgKyAoZndkID8gJ0Z3ZDogJyA6ICcnKSArIHRyaW0ocGFydHMuam9pbignOicpKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICogQHBhcmFtIHtudW1iZXJ9IGRlY1xuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kTnVtYmVyKG51bSwgZGVjKSB7XG5cdHJldHVybiB3aW5kb3cuTWF0aC5yb3VuZChudW0gKiB3aW5kb3cuTWF0aC5wb3coMTAsIGRlYykpIC8gd2luZG93Lk1hdGgucG93KDEwLCBkZWMpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7KG51bWJlcnxzdHJpbmcpfSBzaXplSW5CeXRlc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyaWVuZGx5U2l6ZShzaXplSW5CeXRlcykge1xuXHRzaXplSW5CeXRlcyA9IHBJbnQoc2l6ZUluQnl0ZXMpO1xuXG5cdHN3aXRjaCAodHJ1ZSkge1xuXHRcdGNhc2UgMTA3Mzc0MTgyNCA8PSBzaXplSW5CeXRlczpcblx0XHRcdHJldHVybiByb3VuZE51bWJlcihzaXplSW5CeXRlcyAvIDEwNzM3NDE4MjQsIDEpICsgJ0dCJztcblx0XHRjYXNlIDEwNDg1NzYgPD0gc2l6ZUluQnl0ZXM6XG5cdFx0XHRyZXR1cm4gcm91bmROdW1iZXIoc2l6ZUluQnl0ZXMgLyAxMDQ4NTc2LCAxKSArICdNQic7XG5cdFx0Y2FzZSAxMDI0IDw9IHNpemVJbkJ5dGVzOlxuXHRcdFx0cmV0dXJuIHJvdW5kTnVtYmVyKHNpemVJbkJ5dGVzIC8gMTAyNCwgMCkgKyAnS0InO1xuXHRcdC8vIG5vIGRlZmF1bHRcblx0fVxuXG5cdHJldHVybiBzaXplSW5CeXRlcyArICdCJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nKGRlc2MpIHtcblx0aWYgKHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLmxvZykge1xuXHRcdHdpbmRvdy5jb25zb2xlLmxvZyhkZXNjKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7P30gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZVxuICogQHBhcmFtIHtBcnJheT19IHBhcmFtc1xuICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSA9IDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGVnYXRlUnVuKG9iamVjdCwgbWV0aG9kTmFtZSwgcGFyYW1zLCBkZWxheSA9IDApIHtcblx0aWYgKG9iamVjdCAmJiBvYmplY3RbbWV0aG9kTmFtZV0pIHtcblx0XHRkZWxheSA9IHBJbnQoZGVsYXkpO1xuXHRcdHBhcmFtcyA9IGlzQXJyYXkocGFyYW1zKSA/IHBhcmFtcyA6IFtdO1xuXG5cdFx0aWYgKDAgPj0gZGVsYXkpIHtcblx0XHRcdG9iamVjdFttZXRob2ROYW1lXSguLi5wYXJhbXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0b2JqZWN0W21ldGhvZE5hbWVdKC4uLnBhcmFtcyk7XG5cdFx0XHR9LCBkZWxheSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHs/fSBldmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24ga2lsbEN0cmxBQ3RybFMoZXZlbnQpIHtcblx0ZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7XG5cdGlmIChldmVudCAmJiBldmVudC5jdHJsS2V5ICYmICFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQuYWx0S2V5KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcblx0XHRpZiAoa2V5ID09PSBFdmVudEtleUNvZGUuUykge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9IGVsc2UgaWYgKGtleSA9PT0gRXZlbnRLZXlDb2RlLkEpIHtcblx0XHRcdGNvbnN0IHNlbmRlciA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRzZW5kZXIgJiZcblx0XHRcdFx0KCd0cnVlJyA9PT0gJycgKyBzZW5kZXIuY29udGVudEVkaXRhYmxlIHx8IChzZW5kZXIudGFnTmFtZSAmJiBzZW5kZXIudGFnTmFtZS5tYXRjaCgvSU5QVVR8VEVYVEFSRUEvaSkpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRcdFx0d2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0fSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uICYmIHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24uY2xlYXIpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5jbGVhcigpO1xuXHRcdFx0fVxuXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7KE9iamVjdHxudWxsfHVuZGVmaW5lZCl9IGNvbnRleHRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZFeGVjdXRlXG4gKiBAcGFyYW0geyhGdW5jdGlvbnxib29sZWFufG51bGwpPX0gZkNhbkV4ZWN1dGUgPSB0cnVlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21tYW5kTGVnYWN5KGNvbnRleHQsIGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSA9IHRydWUpIHtcblx0bGV0IGZSZXN1bHQgPSBudWxsO1xuXHRjb25zdCBmTm9uRW1wdHkgPSAoLi4uYXJncykgPT4ge1xuXHRcdGlmIChmUmVzdWx0ICYmIGZSZXN1bHQuY2FuRXhlY3V0ZSAmJiBmUmVzdWx0LmNhbkV4ZWN1dGUoKSkge1xuXHRcdFx0ZkV4ZWN1dGUuYXBwbHkoY29udGV4dCwgYXJncyk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHRmUmVzdWx0ID0gZkV4ZWN1dGUgPyBmTm9uRW1wdHkgOiBub29wO1xuXHRmUmVzdWx0LmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRmUmVzdWx0LmlzQ29tbWFuZCA9IHRydWU7XG5cblx0aWYgKGlzRnVuYyhmQ2FuRXhlY3V0ZSkpIHtcblx0XHRmUmVzdWx0LmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBmUmVzdWx0ICYmIGZSZXN1bHQuZW5hYmxlZCgpICYmIGZDYW5FeGVjdXRlLmNhbGwoY29udGV4dCkpO1xuXHR9IGVsc2Uge1xuXHRcdGZSZXN1bHQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGZSZXN1bHQgJiYgZlJlc3VsdC5lbmFibGVkKCkgJiYgISFmQ2FuRXhlY3V0ZSk7XG5cdH1cblxuXHRyZXR1cm4gZlJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhlbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0VGhlbWVOYW1lID0gXy5tZW1vaXplKCh0aGVtZSkgPT4ge1xuXHRpZiAoJ0BjdXN0b20nID09PSB0aGVtZS5zdWJzdHIoLTcpKSB7XG5cdFx0dGhlbWUgPSB0cmltKHRoZW1lLnN1YnN0cmluZygwLCB0aGVtZS5sZW5ndGggLSA3KSk7XG5cdH1cblxuXHRyZXR1cm4gdHJpbShcblx0XHR0aGVtZVxuXHRcdFx0LnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJyAnKVxuXHRcdFx0LnJlcGxhY2UoLyhbQS1aXSkvZywgJyAkMScpXG5cdFx0XHQucmVwbGFjZSgvW1xcc10rL2csICcgJylcblx0KTtcbn0pO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVvdGVOYW1lKG5hbWUpIHtcblx0cmV0dXJuIG5hbWUucmVwbGFjZSgvW1wiXS9nLCAnXFxcXFwiJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pY3JvdGltZSgpIHtcblx0cmV0dXJuIG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuXHRyZXR1cm4gd2luZG93Lk1hdGgucm91bmQobWljcm90aW1lKCkgLyAxMDAwKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0VuZyA9IGZhbHNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydExhbmdOYW1lKGxhbmd1YWdlLCBpc0VuZyA9IGZhbHNlKSB7XG5cdHJldHVybiByZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG4oXG5cdFx0J0xBTkdTX05BTUVTJyArICh0cnVlID09PSBpc0VuZyA/ICdfRU4nIDogJycpICsgJy9MQU5HXycgKyBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJ18nKSxcblx0XHRudWxsLFxuXHRcdGxhbmd1YWdlXG5cdCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYWdnYWJsZVBsYWNlKCkge1xuXHRyZXR1cm4gJChcblx0XHQnPGRpdiBjbGFzcz1cImRyYWdnYWJsZVBsYWNlXCI+JyArXG5cdFx0XHQnPHNwYW4gY2xhc3M9XCJ0ZXh0XCI+PC9zcGFuPiZuYnNwOycgK1xuXHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1jb3B5IGljb24td2hpdGUgdmlzaWJsZS1vbi1jdHJsXCI+PC9pPicgK1xuXHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1tYWlsIGljb24td2hpdGUgaGlkZGVuLW9uLWN0cmxcIj48L2k+JyArXG5cdFx0XHQnPC9kaXY+J1xuXHQpLmFwcGVuZFRvKCcjcmwtaGlkZGVuJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRvbU9wdGlvblxuICogQHBhcmFtIHtvYmplY3R9IGl0ZW1cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyKGRvbUl0ZW0sIGl0ZW0pIHtcblx0aWYgKGl0ZW0gJiYgIWlzVW5kKGl0ZW0uZGlzYWJsZWQpICYmIGRvbUl0ZW0pIHtcblx0XHQkKGRvbUl0ZW0pXG5cdFx0XHQudG9nZ2xlQ2xhc3MoJ2Rpc2FibGVkJywgaXRlbS5kaXNhYmxlZClcblx0XHRcdC5wcm9wKCdkaXNhYmxlZCcsIGl0ZW0uZGlzYWJsZWQpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG4gKiBAcGFyYW0ge09iamVjdH0gYm9keVxuICogQHBhcmFtIHtib29sZWFufSBpc0h0bWxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJpbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQnFTd2l0Y2hlcihib2R5KSB7XG5cdGJvZHkuZmluZCgnYmxvY2txdW90ZS5ybC1icS1zd2l0Y2hlcicpLnJlbW92ZUNsYXNzKCdybC1icS1zd2l0Y2hlciBoaWRkZW4tYnEnKTtcblx0Ym9keVxuXHRcdC5maW5kKCcucmxCbG9ja3F1b3RlU3dpdGNoZXInKVxuXHRcdC5vZmYoJy5ybEJsb2NrcXVvdGVTd2l0Y2hlcicpXG5cdFx0LnJlbW92ZSgpO1xuXHRib2R5LmZpbmQoJ1tkYXRhLWh0bWwtZWRpdG9yLWZvbnQtd3JhcHBlcl0nKS5yZW1vdmVBdHRyKCdkYXRhLWh0bWwtZWRpdG9yLWZvbnQtd3JhcHBlcicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBtZXNzYWdlRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IGJvZHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIdG1sXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByaW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZpZXdNZXNzYWdlKFxuXHR7IHRpdGxlLCBzdWJqZWN0LCBkYXRlLCBmcm9tQ3JlZHMsIHRvQ3JlZHMsIHRvTGFiZWwsIGNjQ2xhc3MsIGNjQ3JlZHMsIGNjTGFiZWwgfSxcblx0Ym9keSxcblx0aXNIdG1sLFxuXHRwcmludFxuKSB7XG5cdGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKCcnKSxcblx0XHRkb2MgPSB3aW4uZG9jdW1lbnQsXG5cdFx0Ym9keUNsb25lID0gYm9keS5jbG9uZSgpLFxuXHRcdGJvZHlDbGFzcyA9IGlzSHRtbCA/ICdodG1sJyA6ICdwbGFpbic7XG5cblx0Y2xlYXJCcVN3aXRjaGVyKGJvZHlDbG9uZSk7XG5cblx0Y29uc3QgaHRtbCA9IGJvZHlDbG9uZSA/IGJvZHlDbG9uZS5odG1sKCkgOiAnJztcblxuXHRkb2Mud3JpdGUoXG5cdFx0ZGVNb2R1bGUocmVxdWlyZSgnSHRtbC9QcmV2aWV3TWVzc2FnZS5odG1sJykpXG5cdFx0XHQucmVwbGFjZSgne3t0aXRsZX19JywgZW5jb2RlSHRtbCh0aXRsZSkpXG5cdFx0XHQucmVwbGFjZSgne3tzdWJqZWN0fX0nLCBlbmNvZGVIdG1sKHN1YmplY3QpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7ZGF0ZX19JywgZW5jb2RlSHRtbChkYXRlKSlcblx0XHRcdC5yZXBsYWNlKCd7e2Zyb21DcmVkc319JywgZW5jb2RlSHRtbChmcm9tQ3JlZHMpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7dG9DcmVkc319JywgZW5jb2RlSHRtbCh0b0NyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e3RvTGFiZWx9fScsIGVuY29kZUh0bWwodG9MYWJlbCkpXG5cdFx0XHQucmVwbGFjZSgne3tjY0NsYXNzfX0nLCBlbmNvZGVIdG1sKGNjQ2xhc3MpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Y2NDcmVkc319JywgZW5jb2RlSHRtbChjY0NyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e2NjTGFiZWx9fScsIGVuY29kZUh0bWwoY2NMYWJlbCkpXG5cdFx0XHQucmVwbGFjZSgne3tib2R5Q2xhc3N9fScsIGJvZHlDbGFzcylcblx0XHRcdC5yZXBsYWNlKCd7e2h0bWx9fScsIGh0bWwpXG5cdCk7XG5cblx0ZG9jLmNsb3NlKCk7XG5cblx0aWYgKHByaW50KSB7XG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4gd2luLnByaW50KCksIDEwMCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmQ2FsbGJhY2tcbiAqIEBwYXJhbSB7P30ga29UcmlnZ2VyXG4gKiBAcGFyYW0gez99IGNvbnRleHQgPSBudWxsXG4gKiBAcGFyYW0ge251bWJlcj19IHRpbWVyID0gMTAwMFxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24oZkNhbGxiYWNrLCBrb1RyaWdnZXIsIGNvbnRleHQgPSBudWxsLCB0aW1lciA9IDEwMDApIHtcblx0dGltZXIgPSBwSW50KHRpbWVyKTtcblx0cmV0dXJuICh0eXBlLCBkYXRhLCBjYWNoZWQsIHJlcXVlc3RBY3Rpb24sIHJlcXVlc3RQYXJhbWV0ZXJzKSA9PiB7XG5cdFx0a29UcmlnZ2VyLmNhbGwoY29udGV4dCwgZGF0YSAmJiBkYXRhLlJlc3VsdCA/IFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdCA6IFNhdmVTZXR0aW5nc1N0ZXAuRmFsc2VSZXN1bHQpO1xuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjay5jYWxsKGNvbnRleHQsIHR5cGUsIGRhdGEsIGNhY2hlZCwgcmVxdWVzdEFjdGlvbiwgcmVxdWVzdFBhcmFtZXRlcnMpO1xuXHRcdH1cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGtvVHJpZ2dlci5jYWxsKGNvbnRleHQsIFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0fSwgdGltZXIpO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBrb1RyaWdnZXJcbiAqIEBwYXJhbSB7bWl4ZWR9IGNvbnRleHRcbiAqIEByZXR1cm5zIHttaXhlZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKGtvVHJpZ2dlciwgY29udGV4dCkge1xuXHRyZXR1cm4gc2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24obnVsbCwga29UcmlnZ2VyLCBjb250ZXh0LCAxMDAwKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVtb3RlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2V0dGluZ05hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmVHJpZ2dlckZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc1NhdmVIZWxwZXJTdWJzY3JpYmVGdW5jdGlvbihyZW1vdGUsIHNldHRpbmdOYW1lLCB0eXBlLCBmVHJpZ2dlckZ1bmN0aW9uKSB7XG5cdHJldHVybiAodmFsdWUpID0+IHtcblx0XHRpZiAocmVtb3RlKSB7XG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdGNhc2UgJ2Jvb2xlYW4nOlxuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWUgPyAnMScgOiAnMCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2ludCc6XG5cdFx0XHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0XHRcdHZhbHVlID0gcEludCh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3RyaW0nOlxuXHRcdFx0XHRcdHZhbHVlID0gdHJpbSh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dmFsdWUgPSBwU3RyaW5nKHZhbHVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGF0YSA9IHt9O1xuXHRcdFx0ZGF0YVtzZXR0aW5nTmFtZV0gPSB2YWx1ZTtcblxuXHRcdFx0aWYgKHJlbW90ZS5zYXZlQWRtaW5Db25maWcpIHtcblx0XHRcdFx0cmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmVHJpZ2dlckZ1bmN0aW9uIHx8IG51bGwsIGRhdGEpO1xuXHRcdFx0fSBlbHNlIGlmIChyZW1vdGUuc2F2ZVNldHRpbmdzKSB7XG5cdFx0XHRcdHJlbW90ZS5zYXZlU2V0dGluZ3MoZlRyaWdnZXJGdW5jdGlvbiB8fCBudWxsLCBkYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRW1haWxBbmRMaW5rcyhodG1sKSB7XG5cdHJldHVybiBBdXRvbGlua2VyXG5cdFx0PyBBdXRvbGlua2VyLmxpbmsoaHRtbCwge1xuXHRcdFx0XHRuZXdXaW5kb3c6IHRydWUsXG5cdFx0XHRcdHN0cmlwUHJlZml4OiBmYWxzZSxcblx0XHRcdFx0dXJsczogdHJ1ZSxcblx0XHRcdFx0ZW1haWw6IHRydWUsXG5cdFx0XHRcdG1lbnRpb246IGZhbHNlLFxuXHRcdFx0XHRwaG9uZTogZmFsc2UsXG5cdFx0XHRcdGhhc2h0YWc6IGZhbHNlLFxuXHRcdFx0XHRyZXBsYWNlRm46IGZ1bmN0aW9uKG1hdGNoKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEobWF0Y2ggJiYgJ3VybCcgPT09IG1hdGNoLmdldFR5cGUoKSAmJiBtYXRjaC5tYXRjaGVkVGV4dCAmJiAwICE9PSBtYXRjaC5tYXRjaGVkVGV4dC5pbmRleE9mKCdodHRwJykpO1xuXHRcdFx0XHR9XG5cdFx0ICB9KVxuXHRcdDogaHRtbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWxUb1BsYWluKGh0bWwpIHtcblx0bGV0IHBvcyA9IDAsXG5cdFx0bGltaXQgPSAwLFxuXHRcdGlQMSA9IDAsXG5cdFx0aVAyID0gMCxcblx0XHRpUDMgPSAwLFxuXHRcdHRleHQgPSAnJztcblxuXHRjb25zdCBjb252ZXJ0QmxvY2txdW90ZSA9IChibG9ja3F1b3RlVGV4dCkgPT4ge1xuXHRcdGJsb2NrcXVvdGVUZXh0ID0gJz4gJyArIHRyaW0oYmxvY2txdW90ZVRleHQpLnJlcGxhY2UoL1xcbi9nbSwgJ1xcbj4gJyk7XG5cdFx0cmV0dXJuIGJsb2NrcXVvdGVUZXh0LnJlcGxhY2UoLyhefFxcbikoWz4gXSspL2dtLCAoLi4uYXJncykgPT5cblx0XHRcdGFyZ3MgJiYgMiA8IGFyZ3MubGVuZ3RoID8gYXJnc1sxXSArIHRyaW0oYXJnc1syXS5yZXBsYWNlKC9bXFxzXS9nLCAnJykpICsgJyAnIDogJydcblx0XHQpO1xuXHR9O1xuXG5cdGNvbnN0IGNvbnZlcnREaXZzID0gKC4uLmFyZ3MpID0+IHtcblx0XHRpZiAoYXJncyAmJiAxIDwgYXJncy5sZW5ndGgpIHtcblx0XHRcdGxldCBkaXZUZXh0ID0gdHJpbShhcmdzWzFdKTtcblx0XHRcdGlmICgwIDwgZGl2VGV4dC5sZW5ndGgpIHtcblx0XHRcdFx0ZGl2VGV4dCA9IGRpdlRleHQucmVwbGFjZSgvPGRpdltePl0qPihbXFxzXFxTXFxyXFxuXSopPFxcL2Rpdj4vZ2ltLCBjb252ZXJ0RGl2cyk7XG5cdFx0XHRcdGRpdlRleHQgPSAnXFxuJyArIHRyaW0oZGl2VGV4dCkgKyAnXFxuJztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpdlRleHQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXG5cdGNvbnN0IGNvbnZlcnRQcmUgPSAoLi4uYXJncykgPT5cblx0XHRcdGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoXG5cdFx0XHRcdD8gYXJnc1sxXVxuXHRcdFx0XHRcdFx0LnRvU3RyaW5nKClcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9bXFxuXS9nbSwgJzxiciAvPicpXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvW1xccl0vZ20sICcnKVxuXHRcdFx0XHQ6ICcnLFxuXHRcdGZpeEF0dGlidXRlVmFsdWUgPSAoLi4uYXJncykgPT4gKGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoID8gJycgKyBhcmdzWzFdICsgXy5lc2NhcGUoYXJnc1syXSkgOiAnJyksXG5cdFx0Y29udmVydExpbmtzID0gKC4uLmFyZ3MpID0+IChhcmdzICYmIDEgPCBhcmdzLmxlbmd0aCA/IHRyaW0oYXJnc1sxXSkgOiAnJyk7XG5cblx0dGV4dCA9IGh0bWxcblx0XHQucmVwbGFjZSgvPHBbXj5dKj48XFwvcD4vZ2ksICcnKVxuXHRcdC5yZXBsYWNlKC88cHJlW14+XSo+KFtcXHNcXFNcXHJcXG5cXHRdKik8XFwvcHJlPi9naW0sIGNvbnZlcnRQcmUpXG5cdFx0LnJlcGxhY2UoL1tcXHNdKy9nbSwgJyAnKVxuXHRcdC5yZXBsYWNlKC8oKD86aHJlZnxkYXRhKVxccz89XFxzPykoXCJbXlwiXSs/XCJ8J1teJ10rPycpL2dpbSwgZml4QXR0aWJ1dGVWYWx1ZSlcblx0XHQucmVwbGFjZSgvPGJyW14+XSo+L2dpbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9oW1xcZF0+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL3A+L2dpLCAnXFxuXFxuJylcblx0XHQucmVwbGFjZSgvPHVsW14+XSo+L2dpbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC91bD4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88bGlbXj5dKj4vZ2ltLCAnICogJylcblx0XHQucmVwbGFjZSgvPFxcL2xpPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC90ZD4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdHI+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPGhyW14+XSo+L2dpbSwgJ1xcbl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cXG5cXG4nKVxuXHRcdC5yZXBsYWNlKC88ZGl2W14+XSo+KFtcXHNcXFNcXHJcXG5dKik8XFwvZGl2Pi9naW0sIGNvbnZlcnREaXZzKVxuXHRcdC5yZXBsYWNlKC88YmxvY2txdW90ZVtePl0qPi9naW0sICdcXG5fX2JxX19zdGFydF9fXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL2Jsb2NrcXVvdGU+L2dpbSwgJ1xcbl9fYnFfX2VuZF9fXFxuJylcblx0XHQucmVwbGFjZSgvPGEgW14+XSo+KFtcXHNcXFNcXHJcXG5dKj8pPFxcL2E+L2dpbSwgY29udmVydExpbmtzKVxuXHRcdC5yZXBsYWNlKC88XFwvZGl2Pi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLyZuYnNwOy9naSwgJyAnKVxuXHRcdC5yZXBsYWNlKC8mcXVvdDsvZ2ksICdcIicpXG5cdFx0LnJlcGxhY2UoLzxbXj5dKj4vZ20sICcnKTtcblxuXHR0ZXh0ID0gJGRpdi5odG1sKHRleHQpLnRleHQoKTtcblxuXHR0ZXh0ID0gdGV4dFxuXHRcdC5yZXBsYWNlKC9cXG5bIFxcdF0rL2dtLCAnXFxuJylcblx0XHQucmVwbGFjZSgvW1xcbl17Myx9L2dtLCAnXFxuXFxuJylcblx0XHQucmVwbGFjZSgvJmd0Oy9naSwgJz4nKVxuXHRcdC5yZXBsYWNlKC8mbHQ7L2dpLCAnPCcpXG5cdFx0LnJlcGxhY2UoLyZhbXA7L2dpLCAnJicpO1xuXG5cdHRleHQgPSBzcGxpdFBsYWluVGV4dCh0ZXh0KTtcblxuXHRwb3MgPSAwO1xuXHRsaW1pdCA9IDgwMDtcblxuXHR3aGlsZSAoMCA8IGxpbWl0KSB7XG5cdFx0bGltaXQgLT0gMTtcblx0XHRpUDEgPSB0ZXh0LmluZGV4T2YoJ19fYnFfX3N0YXJ0X18nLCBwb3MpO1xuXHRcdGlmICgtMSA8IGlQMSkge1xuXHRcdFx0aVAyID0gdGV4dC5pbmRleE9mKCdfX2JxX19zdGFydF9fJywgaVAxICsgNSk7XG5cdFx0XHRpUDMgPSB0ZXh0LmluZGV4T2YoJ19fYnFfX2VuZF9fJywgaVAxICsgNSk7XG5cblx0XHRcdGlmICgoLTEgPT09IGlQMiB8fCBpUDMgPCBpUDIpICYmIGlQMSA8IGlQMykge1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaVAxKSArIGNvbnZlcnRCbG9ja3F1b3RlKHRleHQuc3Vic3RyaW5nKGlQMSArIDEzLCBpUDMpKSArIHRleHQuc3Vic3RyaW5nKGlQMyArIDExKTtcblxuXHRcdFx0XHRwb3MgPSAwO1xuXHRcdFx0fSBlbHNlIGlmICgtMSA8IGlQMiAmJiBpUDIgPCBpUDMpIHtcblx0XHRcdFx0cG9zID0gaVAyIC0gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBvcyA9IDA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHRleHQgPSB0ZXh0LnJlcGxhY2UoL19fYnFfX3N0YXJ0X18vZ20sICcnKS5yZXBsYWNlKC9fX2JxX19lbmRfXy9nbSwgJycpO1xuXG5cdHJldHVybiB0ZXh0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGFpblxuICogQHBhcmFtIHtib29sZWFufSBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhaW5Ub0h0bWwocGxhaW4sIGZpbmRFbWFpbEFuZExpbmtzSW5UZXh0ID0gZmFsc2UpIHtcblx0cGxhaW4gPSBwbGFpbi50b1N0cmluZygpLnJlcGxhY2UoL1xcci9nLCAnJyk7XG5cdHBsYWluID0gcGxhaW4ucmVwbGFjZSgvXj5bPiBdPisvZ20sIChbbWF0Y2hdKSA9PiAobWF0Y2ggPyBtYXRjaC5yZXBsYWNlKC9bIF0rL2csICcnKSA6IG1hdGNoKSk7XG5cblx0bGV0IGJJbiA9IGZhbHNlLFxuXHRcdGJEbyA9IHRydWUsXG5cdFx0YlN0YXJ0ID0gdHJ1ZSxcblx0XHRhTmV4dFRleHQgPSBbXSxcblx0XHRzTGluZSA9ICcnLFxuXHRcdGlJbmRleCA9IDAsXG5cdFx0YVRleHQgPSBwbGFpbi5zcGxpdCgnXFxuJyk7XG5cblx0ZG8ge1xuXHRcdGJEbyA9IGZhbHNlO1xuXHRcdGFOZXh0VGV4dCA9IFtdO1xuXHRcdGZvciAoaUluZGV4ID0gMDsgaUluZGV4IDwgYVRleHQubGVuZ3RoOyBpSW5kZXgrKykge1xuXHRcdFx0c0xpbmUgPSBhVGV4dFtpSW5kZXhdO1xuXHRcdFx0YlN0YXJ0ID0gJz4nID09PSBzTGluZS5zdWJzdHIoMCwgMSk7XG5cdFx0XHRpZiAoYlN0YXJ0ICYmICFiSW4pIHtcblx0XHRcdFx0YkRvID0gdHJ1ZTtcblx0XHRcdFx0YkluID0gdHJ1ZTtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goJ35+fmJsb2NrcXVvdGV+fn4nKTtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUuc3Vic3RyKDEpKTtcblx0XHRcdH0gZWxzZSBpZiAoIWJTdGFydCAmJiBiSW4pIHtcblx0XHRcdFx0aWYgKCcnICE9PSBzTGluZSkge1xuXHRcdFx0XHRcdGJJbiA9IGZhbHNlO1xuXHRcdFx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn4vYmxvY2txdW90ZX5+ficpO1xuXHRcdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYlN0YXJ0ICYmIGJJbikge1xuXHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZS5zdWJzdHIoMSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChiSW4pIHtcblx0XHRcdGJJbiA9IGZhbHNlO1xuXHRcdFx0YU5leHRUZXh0LnB1c2goJ35+fi9ibG9ja3F1b3Rlfn5+Jyk7XG5cdFx0fVxuXG5cdFx0YVRleHQgPSBhTmV4dFRleHQ7XG5cdH0gd2hpbGUgKGJEbyk7XG5cblx0cGxhaW4gPSBhVGV4dC5qb2luKCdcXG4nKTtcblxuXHRwbGFpbiA9IHBsYWluXG5cdFx0Ly8gLnJlcGxhY2UoL35+flxcL2Jsb2NrcXVvdGV+fn5cXG5+fn5ibG9ja3F1b3Rlfn5+L2csICdcXG4nKVxuXHRcdC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG5cdFx0LnJlcGxhY2UoLz4vZywgJyZndDsnKVxuXHRcdC5yZXBsYWNlKC88L2csICcmbHQ7Jylcblx0XHQucmVwbGFjZSgvfn5+YmxvY2txdW90ZX5+fltcXHNdKi9nLCAnPGJsb2NrcXVvdGU+Jylcblx0XHQucmVwbGFjZSgvW1xcc10qfn5+XFwvYmxvY2txdW90ZX5+fi9nLCAnPC9ibG9ja3F1b3RlPicpXG5cdFx0LnJlcGxhY2UoL1xcbi9nLCAnPGJyIC8+Jyk7XG5cblx0cmV0dXJuIGZpbmRFbWFpbEFuZExpbmtzSW5UZXh0ID8gZmluZEVtYWlsQW5kTGlua3MocGxhaW4pIDogcGxhaW47XG59XG5cbndpbmRvd1sncmFpbmxvb3BfVXRpbHNfaHRtbFRvUGxhaW4nXSA9IGh0bWxUb1BsYWluOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxud2luZG93WydyYWlubG9vcF9VdGlsc19wbGFpblRvSHRtbCddID0gcGxhaW5Ub0h0bWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gYVN5c3RlbVxuICogQHBhcmFtIHtBcnJheX0gYUxpc3RcbiAqIEBwYXJhbSB7QXJyYXk9fSBhRGlzYWJsZWRcbiAqIEBwYXJhbSB7QXJyYXk9fSBhSGVhZGVyTGluZXNcbiAqIEBwYXJhbSB7P251bWJlcj19IGlVbkRlZXBcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBmRGlzYWJsZUNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZlZpc2libGVDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGZSZW5hbWVDYWxsYmFja1xuICogQHBhcmFtIHtib29sZWFuPX0gYlN5c3RlbVxuICogQHBhcmFtIHtib29sZWFuPX0gYkJ1aWxkVW52aXNpYmxlXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkZXJMaXN0T3B0aW9uc0J1aWxkZXIoXG5cdGFTeXN0ZW0sXG5cdGFMaXN0LFxuXHRhRGlzYWJsZWQsXG5cdGFIZWFkZXJMaW5lcyxcblx0aVVuRGVlcCxcblx0ZkRpc2FibGVDYWxsYmFjayxcblx0ZlZpc2libGVDYWxsYmFjayxcblx0ZlJlbmFtZUNhbGxiYWNrLFxuXHRiU3lzdGVtLFxuXHRiQnVpbGRVbnZpc2libGVcbikge1xuXHRsZXQgLyoqXG5cdFx0ICogQHR5cGUgez9Gb2xkZXJNb2RlbH1cblx0XHQgKi9cblx0XHRvSXRlbSA9IG51bGwsXG5cdFx0YlNlcCA9IGZhbHNlLFxuXHRcdGlJbmRleCA9IDAsXG5cdFx0aUxlbiA9IDAsXG5cdFx0YVJlc3VsdCA9IFtdO1xuXG5cdGNvbnN0IHNEZWVwUHJlZml4ID0gJ1xcdTAwQTBcXHUwMEEwXFx1MDBBMCc7XG5cblx0YkJ1aWxkVW52aXNpYmxlID0gaXNVbmQoYkJ1aWxkVW52aXNpYmxlKSA/IGZhbHNlIDogISFiQnVpbGRVbnZpc2libGU7XG5cdGJTeXN0ZW0gPSAhaXNOb3JtYWwoYlN5c3RlbSkgPyAwIDwgYVN5c3RlbS5sZW5ndGggOiBiU3lzdGVtO1xuXHRpVW5EZWVwID0gIWlzTm9ybWFsKGlVbkRlZXApID8gMCA6IGlVbkRlZXA7XG5cdGZEaXNhYmxlQ2FsbGJhY2sgPSBpc05vcm1hbChmRGlzYWJsZUNhbGxiYWNrKSA/IGZEaXNhYmxlQ2FsbGJhY2sgOiBudWxsO1xuXHRmVmlzaWJsZUNhbGxiYWNrID0gaXNOb3JtYWwoZlZpc2libGVDYWxsYmFjaykgPyBmVmlzaWJsZUNhbGxiYWNrIDogbnVsbDtcblx0ZlJlbmFtZUNhbGxiYWNrID0gaXNOb3JtYWwoZlJlbmFtZUNhbGxiYWNrKSA/IGZSZW5hbWVDYWxsYmFjayA6IG51bGw7XG5cblx0aWYgKCFpc0FycmF5KGFEaXNhYmxlZCkpIHtcblx0XHRhRGlzYWJsZWQgPSBbXTtcblx0fVxuXG5cdGlmICghaXNBcnJheShhSGVhZGVyTGluZXMpKSB7XG5cdFx0YUhlYWRlckxpbmVzID0gW107XG5cdH1cblxuXHRmb3IgKGlJbmRleCA9IDAsIGlMZW4gPSBhSGVhZGVyTGluZXMubGVuZ3RoOyBpSW5kZXggPCBpTGVuOyBpSW5kZXgrKykge1xuXHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRpZDogYUhlYWRlckxpbmVzW2lJbmRleF1bMF0sXG5cdFx0XHRuYW1lOiBhSGVhZGVyTGluZXNbaUluZGV4XVsxXSxcblx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHRiU2VwID0gdHJ1ZTtcblx0Zm9yIChpSW5kZXggPSAwLCBpTGVuID0gYVN5c3RlbS5sZW5ndGg7IGlJbmRleCA8IGlMZW47IGlJbmRleCsrKSB7XG5cdFx0b0l0ZW0gPSBhU3lzdGVtW2lJbmRleF07XG5cdFx0aWYgKGZWaXNpYmxlQ2FsbGJhY2sgPyBmVmlzaWJsZUNhbGxiYWNrKG9JdGVtKSA6IHRydWUpIHtcblx0XHRcdGlmIChiU2VwICYmIDAgPCBhUmVzdWx0Lmxlbmd0aCkge1xuXHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdGlkOiAnLS0tJyxcblx0XHRcdFx0XHRuYW1lOiAnLS0tJyxcblx0XHRcdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0XHRcdHNlcG9yYXRvcjogdHJ1ZSxcblx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0YlNlcCA9IGZhbHNlO1xuXHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0aWQ6IG9JdGVtLmZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRuYW1lOiBmUmVuYW1lQ2FsbGJhY2sgPyBmUmVuYW1lQ2FsbGJhY2sob0l0ZW0pIDogb0l0ZW0ubmFtZSgpLFxuXHRcdFx0XHRzeXN0ZW06IHRydWUsXG5cdFx0XHRcdHNlcG9yYXRvcjogZmFsc2UsXG5cdFx0XHRcdGRpc2FibGVkOlxuXHRcdFx0XHRcdCFvSXRlbS5zZWxlY3RhYmxlIHx8XG5cdFx0XHRcdFx0LTEgPCBpbkFycmF5KG9JdGVtLmZ1bGxOYW1lUmF3LCBhRGlzYWJsZWQpIHx8XG5cdFx0XHRcdFx0KGZEaXNhYmxlQ2FsbGJhY2sgPyBmRGlzYWJsZUNhbGxiYWNrKG9JdGVtKSA6IGZhbHNlKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0YlNlcCA9IHRydWU7XG5cdGZvciAoaUluZGV4ID0gMCwgaUxlbiA9IGFMaXN0Lmxlbmd0aDsgaUluZGV4IDwgaUxlbjsgaUluZGV4KyspIHtcblx0XHRvSXRlbSA9IGFMaXN0W2lJbmRleF07XG5cdFx0Ly8gaWYgKG9JdGVtLnN1YlNjcmliZWQoKSB8fCAhb0l0ZW0uZXhpc3RlbiB8fCBiQnVpbGRVbnZpc2libGUpXG5cdFx0aWYgKFxuXHRcdFx0KG9JdGVtLnN1YlNjcmliZWQoKSB8fCAhb0l0ZW0uZXhpc3RlbiB8fCBiQnVpbGRVbnZpc2libGUpICYmXG5cdFx0XHQob0l0ZW0uc2VsZWN0YWJsZSB8fCBvSXRlbS5oYXNTdWJTY3JpYmVkU3ViZm9sZGVycygpKVxuXHRcdCkge1xuXHRcdFx0aWYgKGZWaXNpYmxlQ2FsbGJhY2sgPyBmVmlzaWJsZUNhbGxiYWNrKG9JdGVtKSA6IHRydWUpIHtcblx0XHRcdFx0aWYgKEZvbGRlclR5cGUuVXNlciA9PT0gb0l0ZW0udHlwZSgpIHx8ICFiU3lzdGVtIHx8IG9JdGVtLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzKCkpIHtcblx0XHRcdFx0XHRpZiAoYlNlcCAmJiAwIDwgYVJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGlkOiAnLS0tJyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJy0tLScsXG5cdFx0XHRcdFx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHNlcG9yYXRvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJTZXAgPSBmYWxzZTtcblx0XHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdFx0aWQ6IG9JdGVtLmZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdFx0bmFtZTpcblx0XHRcdFx0XHRcdFx0bmV3IHdpbmRvdy5BcnJheShvSXRlbS5kZWVwICsgMSAtIGlVbkRlZXApLmpvaW4oc0RlZXBQcmVmaXgpICtcblx0XHRcdFx0XHRcdFx0KGZSZW5hbWVDYWxsYmFjayA/IGZSZW5hbWVDYWxsYmFjayhvSXRlbSkgOiBvSXRlbS5uYW1lKCkpLFxuXHRcdFx0XHRcdFx0c3lzdGVtOiBmYWxzZSxcblx0XHRcdFx0XHRcdHNlcG9yYXRvcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRkaXNhYmxlZDpcblx0XHRcdFx0XHRcdFx0IW9JdGVtLnNlbGVjdGFibGUgfHxcblx0XHRcdFx0XHRcdFx0LTEgPCBpbkFycmF5KG9JdGVtLmZ1bGxOYW1lUmF3LCBhRGlzYWJsZWQpIHx8XG5cdFx0XHRcdFx0XHRcdChmRGlzYWJsZUNhbGxiYWNrID8gZkRpc2FibGVDYWxsYmFjayhvSXRlbSkgOiBmYWxzZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChvSXRlbS5zdWJTY3JpYmVkKCkgJiYgMCA8IG9JdGVtLnN1YkZvbGRlcnMoKS5sZW5ndGgpIHtcblx0XHRcdGFSZXN1bHQgPSBhUmVzdWx0LmNvbmNhdChcblx0XHRcdFx0Zm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdG9JdGVtLnN1YkZvbGRlcnMoKSxcblx0XHRcdFx0XHRhRGlzYWJsZWQsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0aVVuRGVlcCxcblx0XHRcdFx0XHRmRGlzYWJsZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGZWaXNpYmxlQ2FsbGJhY2ssXG5cdFx0XHRcdFx0ZlJlbmFtZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGJTeXN0ZW0sXG5cdFx0XHRcdFx0YkJ1aWxkVW52aXNpYmxlXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFSZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0RWxlbWVudChlbGVtZW50KSB7XG5cdGxldCBzZWwgPSBudWxsLFxuXHRcdHJhbmdlID0gbnVsbDtcblxuXHRpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuXHRcdHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cdFx0cmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblx0XHRyYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG5cdFx0c2VsLmFkZFJhbmdlKHJhbmdlKTtcblx0fSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uKSB7XG5cdFx0cmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTtcblx0XHRyYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChlbGVtZW50KTtcblx0XHRyYW5nZS5zZWxlY3QoKTtcblx0fVxufVxuXG5leHBvcnQgY29uc3QgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5ID0gXy5kZWJvdW5jZSgoKSA9PiB7XG5cdGRyb3Bkb3duVmlzaWJpbGl0eSghIV8uZmluZChHbG9iYWxzRGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zLCAoaXRlbSkgPT4gaXRlbS5oYXNDbGFzcygnb3BlbicpKSk7XG59LCA1MCk7XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFuPX0gZGVsYXkgPSBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKGRlbGF5ID0gZmFsc2UpIHtcblx0Y29uc3QgZkZ1bmMgPSAoKSA9PiB7XG5cdFx0JCgnLmNoZWNrQXV0b2NvbXBsZXRlJykudHJpZ2dlcignY2hhbmdlJyk7XG5cdH07XG5cblx0aWYgKGRlbGF5KSB7XG5cdFx0Xy5kZWxheShmRnVuYywgMTAwKTtcblx0fSBlbHNlIHtcblx0XHRmRnVuYygpO1xuXHR9XG59XG5cbmNvbnN0IGNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZSA9IHt9O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbkZyb21TY3JpcHRUYWcoY29uZmlndXJhdGlvbikge1xuXHRpZiAoIWNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZVtjb25maWd1cmF0aW9uXSkge1xuXHRcdGNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZVtjb25maWd1cmF0aW9uXSA9ICQoXG5cdFx0XHQnc2NyaXB0W3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdW2RhdGEtY29uZmlndXJhdGlvbj1cIicgKyBjb25maWd1cmF0aW9uICsgJ1wiXSdcblx0XHQpO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0udGV4dCgpKTtcblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge21peGVkfSBtUHJvcE9yVmFsdWVcbiAqIEBwYXJhbSB7bWl4ZWR9IHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlT25lKHByb3BPclZhbHVlLCB2YWx1ZSkge1xuXHRjb25zdCBkaXNwb3NhYmxlID0gdmFsdWUgfHwgcHJvcE9yVmFsdWU7XG5cdGlmIChkaXNwb3NhYmxlICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBkaXNwb3NhYmxlLmRpc3Bvc2UpIHtcblx0XHRkaXNwb3NhYmxlLmRpc3Bvc2UoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VPYmplY3Qob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRpZiAoaXNBcnJheShvYmplY3QuZGlzcG9zYWJsZXMpKSB7XG5cdFx0XHRfLmVhY2gob2JqZWN0LmRpc3Bvc2FibGVzLCBkaXNwb3NlT25lKTtcblx0XHR9XG5cblx0XHRrby51dGlscy5vYmplY3RGb3JFYWNoKG9iamVjdCwgZGlzcG9zZU9uZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqZWN0T3JPYmplY3RzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGVnYXRlUnVuT25EZXN0cm95KG9iamVjdE9yT2JqZWN0cykge1xuXHRpZiAob2JqZWN0T3JPYmplY3RzKSB7XG5cdFx0aWYgKGlzQXJyYXkob2JqZWN0T3JPYmplY3RzKSkge1xuXHRcdFx0Xy5lYWNoKG9iamVjdE9yT2JqZWN0cywgKGl0ZW0pID0+IHtcblx0XHRcdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3koaXRlbSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKG9iamVjdE9yT2JqZWN0cyAmJiBvYmplY3RPck9iamVjdHMub25EZXN0cm95KSB7XG5cdFx0XHRvYmplY3RPck9iamVjdHMub25EZXN0cm95KCk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9ICRzdHlsZVRhZ1xuICogQHBhcmFtIHtzdHJpbmd9IGNzc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRTdHlsZXMoJHN0eWxlVGFnLCBjc3MpIHtcblx0aWYgKCRzdHlsZVRhZyAmJiAkc3R5bGVUYWdbMF0pIHtcblx0XHRpZiAoJHN0eWxlVGFnWzBdLnN0eWxlU2hlZXQgJiYgIWlzVW5kKCRzdHlsZVRhZ1swXS5zdHlsZVNoZWV0LmNzc1RleHQpKSB7XG5cdFx0XHQkc3R5bGVUYWdbMF0uc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkc3R5bGVUYWcudGV4dChjc3MpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5sZXQgX190aGVtZVRpbWVyID0gMCxcblx0X190aGVtZUFqYXggPSBudWxsO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbj19IHRoZW1lVHJpZ2dlciA9IG5vb3BcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlVGhlbWUodmFsdWUsIHRoZW1lVHJpZ2dlciA9IG5vb3ApIHtcblx0Y29uc3QgdGhlbWVMaW5rID0gJCgnI2FwcC10aGVtZS1saW5rJyksXG5cdFx0Y2xlYXJUaW1lciA9ICgpID0+IHtcblx0XHRcdF9fdGhlbWVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoZW1lVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLklkbGUpLCAxMDAwKTtcblx0XHRcdF9fdGhlbWVBamF4ID0gbnVsbDtcblx0XHR9O1xuXG5cdGxldCB0aGVtZVN0eWxlID0gJCgnI2FwcC10aGVtZS1zdHlsZScpLFxuXHRcdHVybCA9IHRoZW1lTGluay5hdHRyKCdocmVmJyk7XG5cblx0aWYgKCF1cmwpIHtcblx0XHR1cmwgPSB0aGVtZVN0eWxlLmF0dHIoJ2RhdGEtaHJlZicpO1xuXHR9XG5cblx0aWYgKHVybCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpLnJlcGxhY2UoL1xcLy1cXC9bXi9dK1xcLy1cXC8vLCAnLy0vJyArIHZhbHVlICsgJy8tLycpO1xuXHRcdHVybCA9IHVybC5yZXBsYWNlKC9cXC9Dc3NcXC9bXi9dK1xcL1VzZXJcXC8vLCAnL0Nzcy8wL1VzZXIvJyk7XG5cdFx0dXJsID0gdXJsLnJlcGxhY2UoL1xcL0hhc2hcXC9bXi9dK1xcLy8sICcvSGFzaC8tLycpO1xuXG5cdFx0aWYgKCdKc29uLycgIT09IHVybC5zdWJzdHJpbmcodXJsLmxlbmd0aCAtIDUsIHVybC5sZW5ndGgpKSB7XG5cdFx0XHR1cmwgKz0gJ0pzb24vJztcblx0XHR9XG5cblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KF9fdGhlbWVUaW1lcik7XG5cblx0XHR0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5BbmltYXRlKTtcblxuXHRcdGlmIChfX3RoZW1lQWpheCAmJiBfX3RoZW1lQWpheC5hYm9ydCkge1xuXHRcdFx0X190aGVtZUFqYXguYWJvcnQoKTtcblx0XHR9XG5cblx0XHRfX3RoZW1lQWpheCA9ICQuYWpheCh7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdGRhdGFUeXBlOiAnanNvbidcblx0XHR9KVxuXHRcdFx0LnRoZW4oKGRhdGEpID0+IHtcblx0XHRcdFx0aWYgKGRhdGEgJiYgaXNBcnJheShkYXRhKSAmJiAyID09PSBkYXRhLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmICh0aGVtZUxpbmsgJiYgdGhlbWVMaW5rWzBdICYmICghdGhlbWVTdHlsZSB8fCAhdGhlbWVTdHlsZVswXSkpIHtcblx0XHRcdFx0XHRcdHRoZW1lU3R5bGUgPSAkKCc8c3R5bGUgaWQ9XCJhcHAtdGhlbWUtc3R5bGVcIj48L3N0eWxlPicpO1xuXHRcdFx0XHRcdFx0dGhlbWVMaW5rLmFmdGVyKHRoZW1lU3R5bGUpO1xuXHRcdFx0XHRcdFx0dGhlbWVMaW5rLnJlbW92ZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICh0aGVtZVN0eWxlICYmIHRoZW1lU3R5bGVbMF0pIHtcblx0XHRcdFx0XHRcdGlmIChhcHBlbmRTdHlsZXModGhlbWVTdHlsZSwgZGF0YVsxXSkpIHtcblx0XHRcdFx0XHRcdFx0dGhlbWVTdHlsZS5hdHRyKCdkYXRhLWhyZWYnLCB1cmwpLmF0dHIoJ2RhdGEtdGhlbWUnLCBkYXRhWzBdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC50aGVuKGNsZWFyVGltZXIsIGNsZWFyVGltZXIpO1xuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWRQYWdlbmF0b3JIZWxwZXIoa29DdXJyZW50UGFnZSwga29QYWdlQ291bnQpIHtcblx0cmV0dXJuICgpID0+IHtcblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IGtvQ3VycmVudFBhZ2UoKSxcblx0XHRcdHBhZ2VDb3VudCA9IGtvUGFnZUNvdW50KCksXG5cdFx0XHRyZXN1bHQgPSBbXSxcblx0XHRcdGZBZGQgPSAoaW5kZXgsIHB1c2ggPSB0cnVlLCBjdXN0b21OYW1lID0gJycpID0+IHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdFx0XHRjdXJyZW50OiBpbmRleCA9PT0gY3VycmVudFBhZ2UsXG5cdFx0XHRcdFx0bmFtZTogJycgPT09IGN1c3RvbU5hbWUgPyBpbmRleC50b1N0cmluZygpIDogY3VzdG9tTmFtZS50b1N0cmluZygpLFxuXHRcdFx0XHRcdGN1c3RvbTogJycgIT09IGN1c3RvbU5hbWUsXG5cdFx0XHRcdFx0dGl0bGU6ICcnID09PSBjdXN0b21OYW1lID8gJycgOiBpbmRleC50b1N0cmluZygpLFxuXHRcdFx0XHRcdHZhbHVlOiBpbmRleC50b1N0cmluZygpXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKHB1c2gpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChkYXRhKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQudW5zaGlmdChkYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGxldCBwcmV2ID0gMCxcblx0XHRcdG5leHQgPSAwLFxuXHRcdFx0bGltaXQgPSAyO1xuXG5cdFx0aWYgKDEgPCBwYWdlQ291bnQgfHwgKDAgPCBwYWdlQ291bnQgJiYgcGFnZUNvdW50IDwgY3VycmVudFBhZ2UpKSB7XG5cdFx0XHRpZiAocGFnZUNvdW50IDwgY3VycmVudFBhZ2UpIHtcblx0XHRcdFx0ZkFkZChwYWdlQ291bnQpO1xuXHRcdFx0XHRwcmV2ID0gcGFnZUNvdW50O1xuXHRcdFx0XHRuZXh0ID0gcGFnZUNvdW50O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKDMgPj0gY3VycmVudFBhZ2UgfHwgcGFnZUNvdW50IC0gMiA8PSBjdXJyZW50UGFnZSkge1xuXHRcdFx0XHRcdGxpbWl0ICs9IDI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmQWRkKGN1cnJlbnRQYWdlKTtcblx0XHRcdFx0cHJldiA9IGN1cnJlbnRQYWdlO1xuXHRcdFx0XHRuZXh0ID0gY3VycmVudFBhZ2U7XG5cdFx0XHR9XG5cblx0XHRcdHdoaWxlICgwIDwgbGltaXQpIHtcblx0XHRcdFx0cHJldiAtPSAxO1xuXHRcdFx0XHRuZXh0ICs9IDE7XG5cblx0XHRcdFx0aWYgKDAgPCBwcmV2KSB7XG5cdFx0XHRcdFx0ZkFkZChwcmV2LCBmYWxzZSk7XG5cdFx0XHRcdFx0bGltaXQgLT0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwYWdlQ291bnQgPj0gbmV4dCkge1xuXHRcdFx0XHRcdGZBZGQobmV4dCwgdHJ1ZSk7XG5cdFx0XHRcdFx0bGltaXQgLT0gMTtcblx0XHRcdFx0fSBlbHNlIGlmICgwID49IHByZXYpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoMyA9PT0gcHJldikge1xuXHRcdFx0XHRmQWRkKDIsIGZhbHNlKTtcblx0XHRcdH0gZWxzZSBpZiAoMyA8IHByZXYpIHtcblx0XHRcdFx0ZkFkZChNYXRoLnJvdW5kKChwcmV2IC0gMSkgLyAyKSwgZmFsc2UsICcuLi4nKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhZ2VDb3VudCAtIDIgPT09IG5leHQpIHtcblx0XHRcdFx0ZkFkZChwYWdlQ291bnQgLSAxLCB0cnVlKTtcblx0XHRcdH0gZWxzZSBpZiAocGFnZUNvdW50IC0gMiA+IG5leHQpIHtcblx0XHRcdFx0ZkFkZChNYXRoLnJvdW5kKChwYWdlQ291bnQgKyBuZXh0KSAvIDIpLCB0cnVlLCAnLi4uJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZpcnN0IGFuZCBsYXN0XG5cdFx0XHRpZiAoMSA8IHByZXYpIHtcblx0XHRcdFx0ZkFkZCgxLCBmYWxzZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYWdlQ291bnQgPiBuZXh0KSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50LCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWUpIHtcblx0ZmlsZU5hbWUgPSB0cmltKGZpbGVOYW1lKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGNvbnN0IHJlc3VsdCA9IGZpbGVOYW1lLnNwbGl0KCcuJykucG9wKCk7XG5cdHJldHVybiByZXN1bHQgPT09IGZpbGVOYW1lID8gJycgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWltZUNvbnRlbnRUeXBlKGZpbGVOYW1lKSB7XG5cdGxldCBleHQgPSAnJyxcblx0XHRyZXN1bHQgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcblxuXHRmaWxlTmFtZSA9IHRyaW0oZmlsZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG5cblx0aWYgKCd3aW5tYWlsLmRhdCcgPT09IGZpbGVOYW1lKSB7XG5cdFx0cmV0dXJuICdhcHBsaWNhdGlvbi9tcy10bmVmJztcblx0fVxuXG5cdGV4dCA9IGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWUpO1xuXHRpZiAoZXh0ICYmIDAgPCBleHQubGVuZ3RoICYmICFpc1VuZChNaW1lW2V4dF0pKSB7XG5cdFx0cmVzdWx0ID0gTWltZVtleHRdO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUcmFuc3BhcmVudChjb2xvcikge1xuXHRyZXR1cm4gJ3JnYmEoMCwgMCwgMCwgMCknID09PSBjb2xvciB8fCAndHJhbnNwYXJlbnQnID09PSBjb2xvcjtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gJGVsXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVhbEhlaWdodCgkZWwpIHtcblx0JGVsXG5cdFx0LmNsb25lKClcblx0XHQuc2hvdygpXG5cdFx0LmFwcGVuZFRvKCRoY29udCk7XG5cdGNvbnN0IHJlc3VsdCA9ICRoY29udC5oZWlnaHQoKTtcblx0JGhjb250LmVtcHR5KCk7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmQ2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUFuZENyb3AodXJsLCB2YWx1ZSwgZkNhbGxiYWNrKSB7XG5cdGNvbnN0IGltZyA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcblx0aW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRcdGxldCBkaWZmID0gWzAsIDBdO1xuXG5cdFx0Y29uc3QgY2FudmFzID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuXHRcdFx0Y3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cblx0XHRjYW52YXMud2lkdGggPSB2YWx1ZTtcblx0XHRjYW52YXMuaGVpZ2h0ID0gdmFsdWU7XG5cblx0XHRpZiAodGhpcy53aWR0aCA+IHRoaXMuaGVpZ2h0KSB7XG5cdFx0XHRkaWZmID0gW3RoaXMud2lkdGggLSB0aGlzLmhlaWdodCwgMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpZmYgPSBbMCwgdGhpcy5oZWlnaHQgLSB0aGlzLndpZHRoXTtcblx0XHR9XG5cblx0XHRjdHguZmlsbFN0eWxlID0gJyNmZmYnO1xuXHRcdGN0eC5maWxsUmVjdCgwLCAwLCB2YWx1ZSwgdmFsdWUpO1xuXHRcdGN0eC5kcmF3SW1hZ2UodGhpcywgZGlmZlswXSAvIDIsIGRpZmZbMV0gLyAyLCB0aGlzLndpZHRoIC0gZGlmZlswXSwgdGhpcy5oZWlnaHQgLSBkaWZmWzFdLCAwLCAwLCB2YWx1ZSwgdmFsdWUpO1xuXG5cdFx0ZkNhbGxiYWNrKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKSk7XG5cdH07XG5cblx0aW1nLnNyYyA9IHVybDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFpbFRvVXJsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBQb3B1cENvbXBvc2VWaWV3TW9kZWxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFpbFRvSGVscGVyKG1haWxUb1VybCwgUG9wdXBDb21wb3NlVmlld01vZGVsKSB7XG5cdGlmIChcblx0XHRtYWlsVG9VcmwgJiZcblx0XHQnbWFpbHRvOicgPT09XG5cdFx0XHRtYWlsVG9Vcmxcblx0XHRcdFx0LnRvU3RyaW5nKClcblx0XHRcdFx0LnN1YnN0cigwLCA3KVxuXHRcdFx0XHQudG9Mb3dlckNhc2UoKVxuXHQpIHtcblx0XHRpZiAoIVBvcHVwQ29tcG9zZVZpZXdNb2RlbCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bWFpbFRvVXJsID0gbWFpbFRvVXJsLnRvU3RyaW5nKCkuc3Vic3RyKDcpO1xuXG5cdFx0bGV0IHRvID0gW10sXG5cdFx0XHRjYyA9IG51bGwsXG5cdFx0XHRiY2MgPSBudWxsLFxuXHRcdFx0cGFyYW1zID0ge307XG5cblx0XHRjb25zdCBlbWFpbCA9IG1haWxUb1VybC5yZXBsYWNlKC9cXD8uKyQvLCAnJyksXG5cdFx0XHRxdWVyeSA9IG1haWxUb1VybC5yZXBsYWNlKC9eW14/XSpcXD8vLCAnJyksXG5cdFx0XHRFbWFpbE1vZGVsID0gcmVxdWlyZSgnTW9kZWwvRW1haWwnKS5kZWZhdWx0O1xuXG5cdFx0cGFyYW1zID0gc2ltcGxlUXVlcnlQYXJzZXIocXVlcnkpO1xuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMudG8pKSB7XG5cdFx0XHR0byA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KGVtYWlsICsgJywnICsgcGFyYW1zLnRvKSk7XG5cdFx0XHR0byA9IF8udmFsdWVzKFxuXHRcdFx0XHR0by5yZWR1Y2UoKHJlc3VsdCwgdmFsdWUpID0+IHtcblx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdGlmIChyZXN1bHRbdmFsdWUuZW1haWxdKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghcmVzdWx0W3ZhbHVlLmVtYWlsXS5uYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0W3ZhbHVlLmVtYWlsXSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRbdmFsdWUuZW1haWxdID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sIHt9KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dG8gPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGVtYWlsKTtcblx0XHR9XG5cblx0XHRpZiAoIWlzVW5kKHBhcmFtcy5jYykpIHtcblx0XHRcdGNjID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLmNjKSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMuYmNjKSkge1xuXHRcdFx0YmNjID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLmJjYykpO1xuXHRcdH1cblxuXHRcdHJlcXVpcmUoJ0tub2luL0tub2luJykuc2hvd1NjcmVlblBvcHVwKFBvcHVwQ29tcG9zZVZpZXdNb2RlbCwgW1xuXHRcdFx0Q29tcG9zZVR5cGUuRW1wdHksXG5cdFx0XHRudWxsLFxuXHRcdFx0dG8sXG5cdFx0XHRjYyxcblx0XHRcdGJjYyxcblx0XHRcdGlzVW5kKHBhcmFtcy5zdWJqZWN0KSA/IG51bGwgOiBwU3RyaW5nKGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMuc3ViamVjdCkpLFxuXHRcdFx0aXNVbmQocGFyYW1zLmJvZHkpID8gbnVsbCA6IHBsYWluVG9IdG1sKHBTdHJpbmcoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5ib2R5KSkpXG5cdFx0XSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb21SZWFkeShmbikge1xuXHQkKCgpID0+IGZuKCkpO1xuXHQvL1xuXHQvL1x0aWYgKCdsb2FkaW5nJyAhPT0gd2luZG93LmRvY3VtZW50LnJlYWR5U3RhdGUpXG5cdC8vXHR7XG5cdC8vXHRcdGZuKCk7XG5cdC8vXHR9XG5cdC8vXHRlbHNlXG5cdC8vXHR7XG5cdC8vXHRcdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZm4pO1xuXHQvL1x0fVxufVxuXG5leHBvcnQgY29uc3Qgd2luZG93UmVzaXplID0gXy5kZWJvdW5jZSgodGltZW91dCkgPT4ge1xuXHRpZiAoaXNVbmQodGltZW91dCkgfHwgaXNOdWxsKHRpbWVvdXQpKSB7XG5cdFx0JHdpbi5yZXNpemUoKTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHQkd2luLnJlc2l6ZSgpO1xuXHRcdH0sIHRpbWVvdXQpO1xuXHR9XG59LCA1MCk7XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dSZXNpemVDYWxsYmFjaygpIHtcblx0d2luZG93UmVzaXplKCk7XG59XG5cbmxldCBzdWJzdHIgPSB3aW5kb3cuU3RyaW5nLnN1YnN0cjtcbmlmICgnYicgIT09ICdhYicuc3Vic3RyKC0xKSkge1xuXHRzdWJzdHIgPSAoc3RyLCBzdGFydCwgbGVuZ3RoKSA9PiB7XG5cdFx0c3RhcnQgPSAwID4gc3RhcnQgPyBzdHIubGVuZ3RoICsgc3RhcnQgOiBzdGFydDtcblx0XHRyZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuZ3RoKTtcblx0fTtcblxuXHR3aW5kb3cuU3RyaW5nLnN1YnN0ciA9IHN1YnN0cjtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Ll87IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3c7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgaXNVbmQsIGlzTm9ybWFsLCBpc0FycmF5LCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxubGV0IFNFVFRJTkdTID0gd2luZG93Ll9fcmxhaF9kYXRhKCkgfHwgbnVsbDtcblNFVFRJTkdTID0gaXNOb3JtYWwoU0VUVElOR1MpID8gU0VUVElOR1MgOiB7fTtcblxubGV0IEFQUF9TRVRUSU5HUyA9IFNFVFRJTkdTLlN5c3RlbSB8fCBudWxsO1xuQVBQX1NFVFRJTkdTID0gaXNOb3JtYWwoQVBQX1NFVFRJTkdTKSA/IEFQUF9TRVRUSU5HUyA6IHt9O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzR2V0KG5hbWUpIHtcblx0cmV0dXJuIGlzVW5kKFNFVFRJTkdTW25hbWVdKSA/IG51bGwgOiBTRVRUSU5HU1tuYW1lXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTZXQobmFtZSwgdmFsdWUpIHtcblx0U0VUVElOR1NbbmFtZV0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBTZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBpc1VuZChBUFBfU0VUVElOR1NbbmFtZV0pID8gbnVsbCA6IEFQUF9TRVRUSU5HU1tuYW1lXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXBhKG5hbWUpIHtcblx0Y29uc3QgdmFsdWVzID0gc2V0dGluZ3NHZXQoJ0NhcGEnKTtcblx0cmV0dXJuIGlzQXJyYXkodmFsdWVzKSAmJiBpc05vcm1hbChuYW1lKSAmJiAtMSA8IGluQXJyYXkobmFtZSwgdmFsdWVzKTtcbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jb25zdCAkd2luID0gJCh3aW5kb3cpO1xuJHdpbi5fX3NpemVzID0gWzAsIDBdO1xuXG5leHBvcnQgeyAkd2luIH07XG5cbmV4cG9ydCBjb25zdCAkZG9jID0gJCh3aW5kb3cuZG9jdW1lbnQpO1xuXG5leHBvcnQgY29uc3QgJGh0bWwgPSAkKCdodG1sJyk7XG5cbmV4cG9ydCBjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblxuZXhwb3J0IGNvbnN0ICRkaXYgPSAkKCc8ZGl2PjwvZGl2PicpO1xuXG5leHBvcnQgY29uc3QgJGhjb250ID0gJCgnPGRpdj48L2Rpdj4nKTtcbiRoY29udFxuXHQuYXR0cignYXJlYScsICdoaWRkZW4nKVxuXHQuY3NzKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IC01MDAwIH0pXG5cdC5hcHBlbmRUbygkYm9keSk7XG5cbmV4cG9ydCBjb25zdCBzdGFydE1pY3JvdGltZSA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbW11bml0eSA9IFJMX0NPTU1VTklUWTtcblxuLyoqXG4gKiBAdHlwZSB7P31cbiAqL1xuZXhwb3J0IGNvbnN0IGRyb3Bkb3duVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUtleWJvYXJkU2hvcnRjdXRzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3Qgc1VzZXJBZ2VudCA9XG5cdCgnbmF2aWdhdG9yJyBpbiB3aW5kb3cgJiYgJ3VzZXJBZ2VudCcgaW4gd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSB8fCAnJztcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJJRSA9IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdtc2llJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiQ2hyb21lID0gLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYlNhZmFyaSA9ICFiQ2hyb21lICYmIC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdzYWZhcmknKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJNb2JpbGVEZXZpY2UgPVxuXHQoL2FuZHJvaWQvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwaG9uZS9pKS50ZXN0KHNVc2VyQWdlbnQpIHx8XG5cdCgvaXBvZC9pKS50ZXN0KHNVc2VyQWdlbnQpIHx8XG5cdCgvaXBhZC9pKS50ZXN0KHNVc2VyQWdlbnQpIHx8XG5cdCgvYmxhY2tiZXJyeS9pKS50ZXN0KHNVc2VyQWdlbnQpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYkRpc2FibGVOYW5vU2Nyb2xsID0gYk1vYmlsZURldmljZTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJBbmltYXRpb25TdXBwb3J0ZWQgPVxuXHQhYk1vYmlsZURldmljZSAmJiAkaHRtbC5oYXNDbGFzcygnY3NzdHJhbnNpdGlvbnMnKSAmJiAkaHRtbC5oYXNDbGFzcygnY3NzYW5pbWF0aW9ucycpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkID0gISF3aW5kb3cuWE1MSHR0cFJlcXVlc3Q7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiSXNIdHRwcyA9XG5cdHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQubG9jYXRpb24gPyAnaHR0cHM6JyA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sIDogZmFsc2U7XG5cbi8qKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxFZGl0b3JEZWZhdWx0Q29uZmlnID0ge1xuXHQndGl0bGUnOiBmYWxzZSxcblx0J3N0eWxlc1NldCc6IGZhbHNlLFxuXHQnY3VzdG9tQ29uZmlnJzogJycsXG5cdCdjb250ZW50c0Nzcyc6ICcnLFxuXHQndG9vbGJhckdyb3Vwcyc6IFtcblx0XHR7IG5hbWU6ICdzcGVjJyB9LFxuXHRcdHsgbmFtZTogJ3N0eWxlcycgfSxcblx0XHR7IG5hbWU6ICdiYXNpY3N0eWxlcycsIGdyb3VwczogWydiYXNpY3N0eWxlcycsICdjbGVhbnVwJywgJ2JpZGknXSB9LFxuXHRcdHsgbmFtZTogJ2NvbG9ycycgfSxcblx0XHRiTW9iaWxlRGV2aWNlID8ge30gOiB7IG5hbWU6ICdwYXJhZ3JhcGgnLCBncm91cHM6IFsnbGlzdCcsICdpbmRlbnQnLCAnYmxvY2tzJywgJ2FsaWduJ10gfSxcblx0XHR7IG5hbWU6ICdsaW5rcycgfSxcblx0XHR7IG5hbWU6ICdpbnNlcnQnIH0sXG5cdFx0eyBuYW1lOiAnZG9jdW1lbnQnLCBncm91cHM6IFsnbW9kZScsICdkb2N1bWVudCcsICdkb2N0b29scyddIH0sXG5cdFx0eyBuYW1lOiAnb3RoZXJzJyB9XG5cdF0sXG5cblx0J3JlbW92ZVBsdWdpbnMnOiAnbGlzdHN0eWxlJyxcblx0J3JlbW92ZUJ1dHRvbnMnOiAnRm9ybWF0LFVuZG8sUmVkbyxDdXQsQ29weSxQYXN0ZSxBbmNob3IsU3RyaWtlLFN1YnNjcmlwdCxTdXBlcnNjcmlwdCxJbWFnZSxTZWxlY3RBbGwsU291cmNlJyxcblx0J3JlbW92ZURpYWxvZ1RhYnMnOiAnbGluazphZHZhbmNlZDtsaW5rOnRhcmdldDtpbWFnZTphZHZhbmNlZDtpbWFnZXM6YWR2YW5jZWQnLFxuXG5cdCdleHRyYVBsdWdpbnMnOiAncGxhaW4sc2lnbmF0dXJlJyxcblxuXHQnYWxsb3dlZENvbnRlbnQnOiB0cnVlLFxuXHQnZXh0cmFBbGxvd2VkQ29udGVudCc6IHRydWUsXG5cblx0J2ZpbGxFbXB0eUJsb2Nrcyc6IGZhbHNlLFxuXHQnaWdub3JlRW1wdHlQYXJhZ3JhcGgnOiB0cnVlLFxuXHQnZGlzYWJsZU5hdGl2ZVNwZWxsQ2hlY2tlcic6IGZhbHNlLFxuXG5cdCdjb2xvckJ1dHRvbl9lbmFibGVBdXRvbWF0aWMnOiBmYWxzZSxcblx0J2NvbG9yQnV0dG9uX2VuYWJsZU1vcmUnOiB0cnVlLFxuXG5cdCdmb250X2RlZmF1bHRMYWJlbCc6ICdBcmlhbCcsXG5cdCdmb250U2l6ZV9kZWZhdWx0TGFiZWwnOiAnMTMnLFxuXHQnZm9udFNpemVfc2l6ZXMnOiAnMTAvMTBweDsxMi8xMnB4OzEzLzEzcHg7MTQvMTRweDsxNi8xNnB4OzE4LzE4cHg7MjAvMjBweDsyNC8yNHB4OzI4LzI4cHg7MzYvMzZweDs0OC80OHB4J1xufTtcblxuLyoqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgaHRtbEVkaXRvckxhbmdzTWFwID0ge1xuXHQnYXJfc2EnOiAnYXItc2EnLFxuXHQnYmdfYmcnOiAnYmcnLFxuXHQnY3NfQ1onOiAnY3MnLFxuXHQnZGVfZGUnOiAnZGUnLFxuXHQnZWxfZ3InOiAnZWwnLFxuXHQnZXNfZXMnOiAnZXMnLFxuXHQnZXRfZWUnOiAnZXQnLFxuXHQnZnJfZnInOiAnZnInLFxuXHQnaHVfaHUnOiAnaHUnLFxuXHQnaXNfaXMnOiAnaXMnLFxuXHQnaXRfaXQnOiAnaXQnLFxuXHQnamFfanAnOiAnamEnLFxuXHQna29fa3InOiAna28nLFxuXHQnbHRfbHQnOiAnbHQnLFxuXHQnbHZfbHYnOiAnbHYnLFxuXHQnZmFfaXInOiAnZmEnLFxuXHQnbmJfbm8nOiAnbmInLFxuXHQnbmxfbmwnOiAnbmwnLFxuXHQncGxfcGwnOiAncGwnLFxuXHQncHRfYnInOiAncHQtYnInLFxuXHQncHRfcHQnOiAncHQnLFxuXHQncm9fcm8nOiAncm8nLFxuXHQncnVfcnUnOiAncnUnLFxuXHQnc2tfc2snOiAnc2snLFxuXHQnc2xfc2knOiAnc2wnLFxuXHQnc3Zfc2UnOiAnc3YnLFxuXHQndHJfdHInOiAndHInLFxuXHQndWtfdWEnOiAndWsnLFxuXHQnemhfY24nOiAnemgtY24nLFxuXHQnemhfdHcnOiAnemgnXG59O1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5sZXQgYkFsbG93UGRmUHJldmlldyA9ICFiTW9iaWxlRGV2aWNlO1xuXG5pZiAoYkFsbG93UGRmUHJldmlldyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzKSB7XG5cdGJBbGxvd1BkZlByZXZpZXcgPSAhIV8uZmluZCh3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcywgKHR5cGUpID0+IHR5cGUgJiYgJ2FwcGxpY2F0aW9uL3BkZicgPT09IHR5cGUudHlwZSk7XG5cblx0aWYgKCFiQWxsb3dQZGZQcmV2aWV3KSB7XG5cdFx0YkFsbG93UGRmUHJldmlldyA9ICd1bmRlZmluZWQnICE9PSB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXNbJ2FwcGxpY2F0aW9uL3BkZiddO1xuXHR9XG59XG5cbmV4cG9ydCB7IGJBbGxvd1BkZlByZXZpZXcgfTtcblxuZXhwb3J0IGNvbnN0IFZJRVdfTU9ERUxTID0ge1xuXHRzZXR0aW5nczogW10sXG5cdCdzZXR0aW5ncy1yZW1vdmVkJzogW10sXG5cdCdzZXR0aW5ncy1kaXNhYmxlZCc6IFtdXG59O1xuXG5leHBvcnQgY29uc3QgbW92ZUFjdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbERpc2FibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5leHBvcnQgY29uc3QgbGVmdFBhbmVsVHlwZSA9IGtvLm9ic2VydmFibGUoJycpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbFdpZHRoID0ga28ub2JzZXJ2YWJsZSgwKTtcblxubGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUgJiYgbW92ZUFjdGlvbigpKSB7XG5cdFx0bW92ZUFjdGlvbihmYWxzZSk7XG5cdH1cbn0pO1xuXG5tb3ZlQWN0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlICYmIGxlZnRQYW5lbERpc2FibGVkKCkpIHtcblx0XHRsZWZ0UGFuZWxEaXNhYmxlZChmYWxzZSk7XG5cdH1cbn0pO1xuXG4vLyBwb3B1cHNcbmV4cG9ydCBjb25zdCBwb3B1cFZpc2liaWxpdHlOYW1lcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cbmV4cG9ydCBjb25zdCBwb3B1cFZpc2liaWxpdHkgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgcG9wdXBWaXNpYmlsaXR5TmFtZXMoKS5sZW5ndGgpO1xuXG5wb3B1cFZpc2liaWxpdHkuc3Vic2NyaWJlKChiVmFsdWUpID0+IHtcblx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLW1vZGFsJywgYlZhbHVlKTtcbn0pO1xuXG4vLyBrZXlzXG5leHBvcnQgY29uc3Qga2V5U2NvcGVSZWFsID0ga28ub2JzZXJ2YWJsZShLZXlTdGF0ZS5BbGwpO1xuZXhwb3J0IGNvbnN0IGtleVNjb3BlRmFrZSA9IGtvLm9ic2VydmFibGUoS2V5U3RhdGUuQWxsKTtcblxuZXhwb3J0IGNvbnN0IGtleVNjb3BlID0ga28uY29tcHV0ZWQoe1xuXHRyZWFkOiAoKSA9PiBrZXlTY29wZUZha2UoKSxcblx0d3JpdGU6ICh2YWx1ZSkgPT4ge1xuXHRcdGlmIChLZXlTdGF0ZS5NZW51ICE9PSB2YWx1ZSkge1xuXHRcdFx0aWYgKEtleVN0YXRlLkNvbXBvc2UgPT09IHZhbHVlKSB7XG5cdFx0XHRcdC8vIGRpc2FibGVLZXlGaWx0ZXJcblx0XHRcdFx0a2V5LmZpbHRlciA9ICgpID0+IHVzZUtleWJvYXJkU2hvcnRjdXRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZXN0b3JlS2V5RmlsdGVyXG5cdFx0XHRcdGtleS5maWx0ZXIgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRpZiAodXNlS2V5Ym9hcmRTaG9ydGN1dHMoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZWwgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudCxcblx0XHRcdFx0XHRcdFx0dGFnTmFtZSA9IGVsID8gZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpIDogJyc7XG5cblx0XHRcdFx0XHRcdHJldHVybiAhKFxuXHRcdFx0XHRcdFx0XHQnSU5QVVQnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdCdTRUxFQ1QnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdCdURVhUQVJFQScgPT09IHRhZ05hbWUgfHxcblx0XHRcdFx0XHRcdFx0KGVsICYmICdESVYnID09PSB0YWdOYW1lICYmICgnZWRpdG9ySHRtbEFyZWEnID09PSBlbC5jbGFzc05hbWUgfHwgJ3RydWUnID09PSAnJyArIGVsLmNvbnRlbnRFZGl0YWJsZSkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0a2V5U2NvcGVGYWtlKHZhbHVlKTtcblx0XHRcdGlmIChkcm9wZG93blZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHR2YWx1ZSA9IEtleVN0YXRlLk1lbnU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0a2V5U2NvcGVSZWFsKHZhbHVlKTtcblx0fVxufSk7XG5cbmtleVNjb3BlUmVhbC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdC8vXHR3aW5kb3cuY29uc29sZS5sb2coJ2tleVNjb3BlPScgKyBzVmFsdWUpOyAvLyBERUJVR1xuXHRrZXkuc2V0U2NvcGUodmFsdWUpO1xufSk7XG5cbmRyb3Bkb3duVmlzaWJpbGl0eS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSkge1xuXHRcdGtleVNjb3BlKEtleVN0YXRlLk1lbnUpO1xuXHR9IGVsc2UgaWYgKEtleVN0YXRlLk1lbnUgPT09IGtleS5nZXRTY29wZSgpKSB7XG5cdFx0a2V5U2NvcGUoa2V5U2NvcGVGYWtlKCkpO1xuXHR9XG59KTtcblxuLyoqXG4gKiBAdHlwZSB7Kn1cbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGEgPSB7XG5cdF9fQVBQX186IG51bGwsXG5cdGlBamF4RXJyb3JDb3VudDogMCxcblx0aVRva2VuRXJyb3JDb3VudDogMCxcblx0YUJvb3RzdHJhcERyb3Bkb3duczogW10sXG5cdGlNZXNzYWdlQm9keUNhY2hlQ291bnQ6IDAsXG5cdGJVbmxvYWQ6IGZhbHNlXG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgaGFzaGVyIGZyb20gJ2hhc2hlcic7XG5pbXBvcnQgY3Jvc3Nyb2FkcyBmcm9tICdjcm9zc3JvYWRzJztcblxuaW1wb3J0IHsgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHJ1bkhvb2sgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5pbXBvcnQgeyAkaHRtbCwgVklFV19NT0RFTFMsIHBvcHVwVmlzaWJpbGl0eU5hbWVzIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc1VuZCwgcFN0cmluZywgbG9nLCBpc0Z1bmMsIGNyZWF0ZUNvbW1hbmRMZWdhY3ksIGRlbGVnYXRlUnVuLCBpc05vbkVtcHR5QXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5sZXQgY3VycmVudFNjcmVlbiA9IG51bGwsXG5cdGRlZmF1bHRTY3JlZW5OYW1lID0gJyc7XG5cbmNvbnN0IFNDUkVFTlMgPSB7fTtcblxuZXhwb3J0IGNvbnN0IFZpZXdUeXBlID0ge1xuXHRQb3B1cDogJ1BvcHVwcycsXG5cdExlZnQ6ICdMZWZ0Jyxcblx0UmlnaHQ6ICdSaWdodCcsXG5cdENlbnRlcjogJ0NlbnRlcidcbn07XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlTG9hZGluZygpIHtcblx0JCgnI3JsLWNvbnRlbnQnKS5hZGRDbGFzcygncmwtY29udGVudC1zaG93Jyk7XG5cdCQoJyNybC1sb2FkaW5nJylcblx0XHQuaGlkZSgpXG5cdFx0LnJlbW92ZSgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZFeGVjdXRlXG4gKiBAcGFyYW0geyhGdW5jdGlvbnxib29sZWFufG51bGwpPX0gZkNhbkV4ZWN1dGUgPSB0cnVlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21tYW5kKGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSA9IHRydWUpIHtcblx0cmV0dXJuIGNyZWF0ZUNvbW1hbmRMZWdhY3kobnVsbCwgZkV4ZWN1dGUsIGZDYW5FeGVjdXRlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZVxuICogQHBhcmFtIHtib29sZWFuPX0gaXNEZWZhdWx0ID0gZmFsc2VcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUsIGlzRGVmYXVsdCA9IGZhbHNlKSB7XG5cdFNldHRpbmdzVmlld01vZGVsQ2xhc3MuX19ybFNldHRpbmdzRGF0YSA9IHtcblx0XHRMYWJlbDogbGFiZWxOYW1lLFxuXHRcdFRlbXBsYXRlOiB0ZW1wbGF0ZSxcblx0XHRSb3V0ZTogcm91dGUsXG5cdFx0SXNEZWZhdWx0OiAhIWlzRGVmYXVsdFxuXHR9O1xuXG5cdFZJRVdfTU9ERUxTLnNldHRpbmdzLnB1c2goU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzKSB7XG5cdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1yZW1vdmVkJ10ucHVzaChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVTZXR0aW5nc1ZpZXdNb2RlbChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzKSB7XG5cdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1kaXNhYmxlZCddLnB1c2goU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3V0ZU9mZigpIHtcblx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gZmFsc2U7XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3V0ZU9uKCkge1xuXHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSB0cnVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JlZW5OYW1lXG4gKiBAcmV0dXJucyB7P09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmVlbihzY3JlZW5OYW1lKSB7XG5cdHJldHVybiAnJyAhPT0gc2NyZWVuTmFtZSAmJiAhaXNVbmQoU0NSRUVOU1tzY3JlZW5OYW1lXSkgPyBTQ1JFRU5TW3NjcmVlbk5hbWVdIDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHJldHVybnMge0Z1bmN0aW9ufG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JlZW5Qb3B1cChQb3B1Vmlld01vZGVsQ2xhc3MpIHtcblx0bGV0IHJlc3VsdCA9IG51bGw7XG5cdGlmIChQb3B1Vmlld01vZGVsQ2xhc3MpIHtcblx0XHRyZXN1bHQgPSBQb3B1Vmlld01vZGVsQ2xhc3M7XG5cdFx0aWYgKFBvcHVWaWV3TW9kZWxDbGFzcy5kZWZhdWx0KSB7XG5cdFx0XHRyZXN1bHQgPSBQb3B1Vmlld01vZGVsQ2xhc3MuZGVmYXVsdDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9IaWRlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZGVTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvSGlkZSkge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvSGlkZSk7XG5cdGlmIChNb2RhbFZpZXcgJiYgTW9kYWxWaWV3Ll9fdm0gJiYgTW9kYWxWaWV3Ll9fZG9tKSB7XG5cdFx0TW9kYWxWaWV3Ll9fdm0ubW9kYWxWaXNpYmlsaXR5KGZhbHNlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBob29rTmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7bWl4ZWQ9fSBwYXJhbXMgPSBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2bVJ1bkhvb2soaG9va05hbWUsIFZpZXdNb2RlbENsYXNzLCBwYXJhbXMgPSBudWxsKSB7XG5cdF8uZWFjaChWaWV3TW9kZWxDbGFzcy5fX25hbWVzLCAobmFtZSkgPT4ge1xuXHRcdHJ1bkhvb2soaG9va05hbWUsIFtuYW1lLCBWaWV3TW9kZWxDbGFzcy5fX3ZtLCBwYXJhbXNdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7T2JqZWN0PX0gdm1TY3JlZW5cbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRWaWV3TW9kZWwoVmlld01vZGVsQ2xhc3MsIHZtU2NyZWVuKSB7XG5cdGlmIChWaWV3TW9kZWxDbGFzcyAmJiAhVmlld01vZGVsQ2xhc3MuX19idWlsZGVkKSB7XG5cdFx0bGV0IHZtRG9tID0gbnVsbDtcblx0XHRjb25zdCB2bSA9IG5ldyBWaWV3TW9kZWxDbGFzcyh2bVNjcmVlbiksXG5cdFx0XHRwb3NpdGlvbiA9IFZpZXdNb2RlbENsYXNzLl9fdHlwZSB8fCAnJyxcblx0XHRcdHZtUGxhY2UgPSBwb3NpdGlvbiA/ICQoJyNybC1jb250ZW50ICNybC0nICsgcG9zaXRpb24udG9Mb3dlckNhc2UoKSkgOiBudWxsO1xuXG5cdFx0Vmlld01vZGVsQ2xhc3MuX19idWlsZGVkID0gdHJ1ZTtcblx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtID0gdm07XG5cblx0XHR2bS5vblNob3dUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dm0ub25IaWRlVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dm0udmlld01vZGVsTmFtZSA9IFZpZXdNb2RlbENsYXNzLl9fbmFtZTtcblx0XHR2bS52aWV3TW9kZWxOYW1lcyA9IFZpZXdNb2RlbENsYXNzLl9fbmFtZXM7XG5cdFx0dm0udmlld01vZGVsVGVtcGxhdGVJRCA9IFZpZXdNb2RlbENsYXNzLl9fdGVtcGxhdGVJRDtcblx0XHR2bS52aWV3TW9kZWxQb3NpdGlvbiA9IFZpZXdNb2RlbENsYXNzLl9fdHlwZTtcblxuXHRcdGlmICh2bVBsYWNlICYmIDEgPT09IHZtUGxhY2UubGVuZ3RoKSB7XG5cdFx0XHR2bURvbSA9ICQoJzxkaXY+PC9kaXY+Jylcblx0XHRcdFx0LmFkZENsYXNzKCdybC12aWV3LW1vZGVsJylcblx0XHRcdFx0LmFkZENsYXNzKCdSTC0nICsgdm0udmlld01vZGVsVGVtcGxhdGVJRClcblx0XHRcdFx0LmhpZGUoKTtcblx0XHRcdHZtRG9tLmFwcGVuZFRvKHZtUGxhY2UpO1xuXG5cdFx0XHR2bS52aWV3TW9kZWxEb20gPSB2bURvbTtcblx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tID0gdm1Eb207XG5cblx0XHRcdGlmIChWaWV3VHlwZS5Qb3B1cCA9PT0gcG9zaXRpb24pIHtcblx0XHRcdFx0dm0uY2FuY2VsQ29tbWFuZCA9IHZtLmNsb3NlQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmQoKCkgPT4ge1xuXHRcdFx0XHRcdGhpZGVTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzcyk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHZtLm1vZGFsVmlzaWJpbGl0eS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHR2bS52aWV3TW9kZWxEb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0dm0uc3RvcmVBbmRTZXRLZXlTY29wZSgpO1xuXG5cdFx0XHRcdFx0XHRwb3B1cFZpc2liaWxpdHlOYW1lcy5wdXNoKHZtLnZpZXdNb2RlbE5hbWUpO1xuXHRcdFx0XHRcdFx0dm0udmlld01vZGVsRG9tLmNzcygnei1pbmRleCcsIDMwMDAgKyBwb3B1cFZpc2liaWxpdHlOYW1lcygpLmxlbmd0aCArIDEwKTtcblxuXHRcdFx0XHRcdFx0aWYgKHZtLm9uU2hvd1RyaWdnZXIpIHtcblx0XHRcdFx0XHRcdFx0dm0ub25TaG93VHJpZ2dlcighdm0ub25TaG93VHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odm0sICdvblNob3dXaXRoRGVsYXknLCBbXSwgNTAwKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odm0sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25IaWRlV2l0aERlbGF5JywgW10sIDUwMCk7XG5cblx0XHRcdFx0XHRcdGlmICh2bS5vbkhpZGVUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdHZtLm9uSGlkZVRyaWdnZXIoIXZtLm9uSGlkZVRyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZtLnJlc3RvcmVLZXlTY29wZSgpO1xuXG5cdFx0XHRcdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtb24taGlkZScsIFZpZXdNb2RlbENsYXNzKTtcblxuXHRcdFx0XHRcdFx0cG9wdXBWaXNpYmlsaXR5TmFtZXMucmVtb3ZlKHZtLnZpZXdNb2RlbE5hbWUpO1xuXHRcdFx0XHRcdFx0dm0udmlld01vZGVsRG9tLmNzcygnei1pbmRleCcsIDIwMDApO1xuXG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHZtLnZpZXdNb2RlbERvbS5oaWRlKCksIDMwMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLXByZS1idWlsZCcsIFZpZXdNb2RlbENsYXNzLCB2bURvbSk7XG5cblx0XHRcdGtvLmFwcGx5QmluZGluZ0FjY2Vzc29yc1RvTm9kZShcblx0XHRcdFx0dm1Eb21bMF0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0cmFuc2xhdG9ySW5pdDogdHJ1ZSxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogKCkgPT4gKHsgbmFtZTogdm0udmlld01vZGVsVGVtcGxhdGVJRCB9KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR2bVxuXHRcdFx0KTtcblxuXHRcdFx0ZGVsZWdhdGVSdW4odm0sICdvbkJ1aWxkJywgW3ZtRG9tXSk7XG5cdFx0XHRpZiAodm0gJiYgVmlld1R5cGUuUG9wdXAgPT09IHBvc2l0aW9uKSB7XG5cdFx0XHRcdHZtLnJlZ2lzdGVyUG9wdXBLZXlEb3duKCk7XG5cdFx0XHR9XG5cblx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1wb3N0LWJ1aWxkJywgVmlld01vZGVsQ2xhc3MsIHZtRG9tKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9nKCdDYW5ub3QgZmluZCB2aWV3IG1vZGVsIHBvc2l0aW9uOiAnICsgcG9zaXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBWaWV3TW9kZWxDbGFzcyA/IFZpZXdNb2RlbENsYXNzLl9fdm0gOiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcGFyYW0ge0FycmF5PX0gcGFyYW1zXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdywgcGFyYW1zID0gW10pIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3cpO1xuXHRpZiAoTW9kYWxWaWV3KSB7XG5cdFx0YnVpbGRWaWV3TW9kZWwoTW9kYWxWaWV3KTtcblxuXHRcdGlmIChNb2RhbFZpZXcuX192bSAmJiBNb2RhbFZpZXcuX19kb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKE1vZGFsVmlldy5fX3ZtLCAnb25CZWZvcmVTaG93JywgcGFyYW1zIHx8IFtdKTtcblxuXHRcdFx0TW9kYWxWaWV3Ll9fdm0ubW9kYWxWaXNpYmlsaXR5KHRydWUpO1xuXG5cdFx0XHRkZWxlZ2F0ZVJ1bihNb2RhbFZpZXcuX192bSwgJ29uU2hvdycsIHBhcmFtcyB8fCBbXSk7XG5cblx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1vbi1zaG93JywgTW9kYWxWaWV3LCBwYXJhbXMgfHwgW10pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhcm1VcFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0aWYgKE1vZGFsVmlldykge1xuXHRcdGJ1aWxkVmlld01vZGVsKE1vZGFsVmlldyk7XG5cblx0XHRpZiAoTW9kYWxWaWV3Ll9fdm0gJiYgTW9kYWxWaWV3Ll9fZG9tKSB7XG5cdFx0XHRkZWxlZ2F0ZVJ1bihNb2RhbFZpZXcuX192bSwgJ29uV2FybVVwJyk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb3B1cFZpc2libGUoVmlld01vZGVsQ2xhc3NUb1Nob3cpIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3cpO1xuXHRyZXR1cm4gTW9kYWxWaWV3ICYmIE1vZGFsVmlldy5fX3ZtID8gTW9kYWxWaWV3Ll9fdm0ubW9kYWxWaXNpYmlsaXR5KCkgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHN1YlBhcnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NyZWVuT25Sb3V0ZShzY3JlZW5OYW1lLCBzdWJQYXJ0KSB7XG5cdGxldCB2bVNjcmVlbiA9IG51bGwsXG5cdFx0aXNTYW1lU2NyZWVuID0gZmFsc2UsXG5cdFx0Y3Jvc3MgPSBudWxsO1xuXG5cdGlmICgnJyA9PT0gcFN0cmluZyhzY3JlZW5OYW1lKSkge1xuXHRcdHNjcmVlbk5hbWUgPSBkZWZhdWx0U2NyZWVuTmFtZTtcblx0fVxuXG5cdGlmICgnJyAhPT0gc2NyZWVuTmFtZSkge1xuXHRcdHZtU2NyZWVuID0gc2NyZWVuKHNjcmVlbk5hbWUpO1xuXHRcdGlmICghdm1TY3JlZW4pIHtcblx0XHRcdHZtU2NyZWVuID0gc2NyZWVuKGRlZmF1bHRTY3JlZW5OYW1lKTtcblx0XHRcdGlmICh2bVNjcmVlbikge1xuXHRcdFx0XHRzdWJQYXJ0ID0gc2NyZWVuTmFtZSArICcvJyArIHN1YlBhcnQ7XG5cdFx0XHRcdHNjcmVlbk5hbWUgPSBkZWZhdWx0U2NyZWVuTmFtZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodm1TY3JlZW4gJiYgdm1TY3JlZW4uX19zdGFydGVkKSB7XG5cdFx0XHRpc1NhbWVTY3JlZW4gPSBjdXJyZW50U2NyZWVuICYmIHZtU2NyZWVuID09PSBjdXJyZW50U2NyZWVuO1xuXG5cdFx0XHRpZiAoIXZtU2NyZWVuLl9fYnVpbGRlZCkge1xuXHRcdFx0XHR2bVNjcmVlbi5fX2J1aWxkZWQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkodm1TY3JlZW4udmlld01vZGVscygpKSkge1xuXHRcdFx0XHRcdF8uZWFjaCh2bVNjcmVlbi52aWV3TW9kZWxzKCksIChWaWV3TW9kZWxDbGFzcykgPT4ge1xuXHRcdFx0XHRcdFx0YnVpbGRWaWV3TW9kZWwoVmlld01vZGVsQ2xhc3MsIHZtU2NyZWVuKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGVnYXRlUnVuKHZtU2NyZWVuLCAnb25CdWlsZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0Ly8gaGlkZSBzY3JlZW5cblx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4gJiYgIWlzU2FtZVNjcmVlbikge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKGN1cnJlbnRTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihjdXJyZW50U2NyZWVuLCAnb25IaWRlV2l0aERlbGF5JywgW10sIDUwMCk7XG5cblx0XHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbi5vbkhpZGVUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50U2NyZWVuLm9uSGlkZVRyaWdnZXIoIWN1cnJlbnRTY3JlZW4ub25IaWRlVHJpZ2dlcigpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpKSkge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdUeXBlLlBvcHVwICE9PSBWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFBvc2l0aW9uXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tLmhpZGUoKTtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFZpc2liaWxpdHkoZmFsc2UpO1xuXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uSGlkZScpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkhpZGVXaXRoRGVsYXknLCBbXSwgNTAwKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uSGlkZVRyaWdnZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0ub25IaWRlVHJpZ2dlcighVmlld01vZGVsQ2xhc3MuX192bS5vbkhpZGVUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIC0tXG5cblx0XHRcdFx0Y3VycmVudFNjcmVlbiA9IHZtU2NyZWVuO1xuXG5cdFx0XHRcdC8vIHNob3cgc2NyZWVuXG5cdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuICYmICFpc1NhbWVTY3JlZW4pIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihjdXJyZW50U2NyZWVuLCAnb25TaG93Jyk7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4ub25TaG93VHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0Y3VycmVudFNjcmVlbi5vblNob3dUcmlnZ2VyKCFjdXJyZW50U2NyZWVuLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cnVuSG9vaygnc2NyZWVuLW9uLXNob3cnLCBbY3VycmVudFNjcmVlbi5zY3JlZW5OYW1lKCksIGN1cnJlbnRTY3JlZW5dKTtcblxuXHRcdFx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkoY3VycmVudFNjcmVlbi52aWV3TW9kZWxzKCkpKSB7XG5cdFx0XHRcdFx0XHRfLmVhY2goY3VycmVudFNjcmVlbi52aWV3TW9kZWxzKCksIChWaWV3TW9kZWxDbGFzcykgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld1R5cGUuUG9wdXAgIT09IFZpZXdNb2RlbENsYXNzLl9fdm0udmlld01vZGVsUG9zaXRpb25cblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uQmVmb3JlU2hvdycpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0udmlld01vZGVsVmlzaWJpbGl0eSh0cnVlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvblNob3cnKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoVmlld01vZGVsQ2xhc3MuX192bS5vblNob3dUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uU2hvd1RyaWdnZXIoIVZpZXdNb2RlbENsYXNzLl9fdm0ub25TaG93VHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25TaG93V2l0aERlbGF5JywgW10sIDIwMCk7XG5cdFx0XHRcdFx0XHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLW9uLXNob3cnLCBWaWV3TW9kZWxDbGFzcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdGNyb3NzID0gdm1TY3JlZW4gJiYgdm1TY3JlZW4uX19jcm9zcyA/IHZtU2NyZWVuLl9fY3Jvc3MoKSA6IG51bGw7XG5cdFx0XHRcdGlmIChjcm9zcykge1xuXHRcdFx0XHRcdGNyb3NzLnBhcnNlKHN1YlBhcnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBzY3JlZW5zQ2xhc3Nlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFNjcmVlbnMoc2NyZWVuc0NsYXNzZXMpIHtcblx0Xy5lYWNoKHNjcmVlbnNDbGFzc2VzLCAoQ1NjcmVlbikgPT4ge1xuXHRcdGlmIChDU2NyZWVuKSB7XG5cdFx0XHRjb25zdCB2bVNjcmVlbiA9IG5ldyBDU2NyZWVuKCksXG5cdFx0XHRcdHNjcmVlbk5hbWUgPSB2bVNjcmVlbiA/IHZtU2NyZWVuLnNjcmVlbk5hbWUoKSA6ICcnO1xuXG5cdFx0XHRpZiAodm1TY3JlZW4gJiYgJycgIT09IHNjcmVlbk5hbWUpIHtcblx0XHRcdFx0aWYgKCcnID09PSBkZWZhdWx0U2NyZWVuTmFtZSkge1xuXHRcdFx0XHRcdGRlZmF1bHRTY3JlZW5OYW1lID0gc2NyZWVuTmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdFNDUkVFTlNbc2NyZWVuTmFtZV0gPSB2bVNjcmVlbjtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdF8uZWFjaChTQ1JFRU5TLCAodm1TY3JlZW4pID0+IHtcblx0XHRpZiAodm1TY3JlZW4gJiYgIXZtU2NyZWVuLl9fc3RhcnRlZCAmJiB2bVNjcmVlbi5fX3N0YXJ0KSB7XG5cdFx0XHR2bVNjcmVlbi5fX3N0YXJ0ZWQgPSB0cnVlO1xuXHRcdFx0dm1TY3JlZW4uX19zdGFydCgpO1xuXG5cdFx0XHRydW5Ib29rKCdzY3JlZW4tcHJlLXN0YXJ0JywgW3ZtU2NyZWVuLnNjcmVlbk5hbWUoKSwgdm1TY3JlZW5dKTtcblx0XHRcdGRlbGVnYXRlUnVuKHZtU2NyZWVuLCAnb25TdGFydCcpO1xuXHRcdFx0cnVuSG9vaygnc2NyZWVuLXBvc3Qtc3RhcnQnLCBbdm1TY3JlZW4uc2NyZWVuTmFtZSgpLCB2bVNjcmVlbl0pO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgY3Jvc3MgPSBjcm9zc3JvYWRzLmNyZWF0ZSgpO1xuXHRjcm9zcy5hZGRSb3V0ZSgvXihbYS16QS1aMC05LV0qKVxcLz8oLiopJC8sIHNjcmVlbk9uUm91dGUpO1xuXG5cdGhhc2hlci5pbml0aWFsaXplZC5hZGQoY3Jvc3MucGFyc2UsIGNyb3NzKTtcblx0aGFzaGVyLmNoYW5nZWQuYWRkKGNyb3NzLnBhcnNlLCBjcm9zcyk7XG5cdGhhc2hlci5pbml0KCk7XG5cblx0Xy5kZWxheSgoKSA9PiAkaHRtbC5yZW1vdmVDbGFzcygncmwtc3RhcnRlZC10cmlnZ2VyJykuYWRkQ2xhc3MoJ3JsLXN0YXJ0ZWQnKSwgMTAwKTtcblx0Xy5kZWxheSgoKSA9PiAkaHRtbC5hZGRDbGFzcygncmwtc3RhcnRlZC1kZWxheScpLCAyMDApO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzSGFzaFxuICogQHBhcmFtIHtib29sZWFuPX0gc2lsZW5jZSA9IGZhbHNlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSByZXBsYWNlID0gZmFsc2VcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SGFzaChoYXNoLCBzaWxlbmNlID0gZmFsc2UsIHJlcGxhY2UgPSBmYWxzZSkge1xuXHRoYXNoID0gJyMnID09PSBoYXNoLnN1YnN0cigwLCAxKSA/IGhhc2guc3Vic3RyKDEpIDogaGFzaDtcblx0aGFzaCA9ICcvJyA9PT0gaGFzaC5zdWJzdHIoMCwgMSkgPyBoYXNoLnN1YnN0cigxKSA6IGhhc2g7XG5cblx0Y29uc3QgY21kID0gcmVwbGFjZSA/ICdyZXBsYWNlSGFzaCcgOiAnc2V0SGFzaCc7XG5cblx0aWYgKHNpbGVuY2UpIHtcblx0XHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSBmYWxzZTtcblx0XHRoYXNoZXJbY21kXShoYXNoKTtcblx0XHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IHRydWU7XG5cdFx0aGFzaGVyW2NtZF0oaGFzaCk7XG5cdFx0aGFzaGVyLnNldEhhc2goaGFzaCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHZpZXdEZWNvcmF0b3IoeyBuYW1lLCB0eXBlLCB0ZW1wbGF0ZUlEIH0pIHtcblx0cmV0dXJuICh0YXJnZXQpID0+IHtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRpZiAobmFtZSkge1xuXHRcdFx0XHRpZiAoaXNBcnJheShuYW1lKSkge1xuXHRcdFx0XHRcdHRhcmdldC5fX25hbWVzID0gbmFtZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXQuX19uYW1lcyA9IFtuYW1lXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldC5fX25hbWUgPSB0YXJnZXQuX19uYW1lc1swXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGUpIHtcblx0XHRcdFx0dGFyZ2V0Ll9fdHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZW1wbGF0ZUlEKSB7XG5cdFx0XHRcdHRhcmdldC5fX3RlbXBsYXRlSUQgPSB0ZW1wbGF0ZUlEO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHBvcHVwRGVjb3JhdG9yKHsgbmFtZSwgdGVtcGxhdGVJRCB9KSB7XG5cdHJldHVybiB2aWV3RGVjb3JhdG9yKHsgbmFtZSwgdHlwZTogVmlld1R5cGUuUG9wdXAsIHRlbXBsYXRlSUQgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FuRXhlY3V0ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBjb21tYW5kRGVjb3JhdG9yKGNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdHJldHVybiAodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpID0+IHtcblx0XHRpZiAoIWtleSB8fCAha2V5Lm1hdGNoKC9Db21tYW5kJC8pKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYG5hbWUgXCIke2tleX1cIiBzaG91bGQgZW5kIHdpdGggQ29tbWFuZCBzdWZmaXhgKTtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZSA9IGRlc2NyaXB0b3IudmFsdWUgfHwgZGVzY3JpcHRvci5pbml0aWFsaXplcigpLFxuXHRcdFx0bm9ybUNhbkV4ZWN1dGUgPSBpc0Z1bmMoY2FuRXhlY3V0ZSkgPyBjYW5FeGVjdXRlIDogKCkgPT4gISFjYW5FeGVjdXRlO1xuXG5cdFx0ZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0XHRcdGlmIChub3JtQ2FuRXhlY3V0ZS5jYWxsKHRoaXMsIHRoaXMpKSB7XG5cdFx0XHRcdHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHRcdGRlc2NyaXB0b3IudmFsdWUuX19yZWFsQ2FuRXhlY3V0ZSA9IG5vcm1DYW5FeGVjdXRlO1xuXHRcdGRlc2NyaXB0b3IudmFsdWUuaXNDb21tYW5kID0gdHJ1ZTtcblxuXHRcdHJldHVybiBkZXNjcmlwdG9yO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bWljZWR9ICRpdGVtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzZXR0aW5nc01lbnVLZXlzSGFuZGxlcigkaXRlbXMpIHtcblx0cmV0dXJuIF8udGhyb3R0bGUoKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG5cdFx0Y29uc3QgdXAgPSBoYW5kbGVyICYmICd1cCcgPT09IGhhbmRsZXIuc2hvcnRjdXQ7XG5cblx0XHRpZiAoZXZlbnQgJiYgJGl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0bGV0IGluZGV4ID0gJGl0ZW1zLmluZGV4KCRpdGVtcy5maWx0ZXIoJy5zZWxlY3RlZCcpKTtcblx0XHRcdGlmICh1cCAmJiAwIDwgaW5kZXgpIHtcblx0XHRcdFx0aW5kZXggLT0gMTtcblx0XHRcdH0gZWxzZSBpZiAoIXVwICYmIGluZGV4IDwgJGl0ZW1zLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0aW5kZXggKz0gMTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcmVzdWx0SGFzaCA9ICRpdGVtcy5lcShpbmRleCkuYXR0cignaHJlZicpO1xuXHRcdFx0aWYgKHJlc3VsdEhhc2gpIHtcblx0XHRcdFx0c2V0SGFzaChyZXN1bHRIYXNoLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCBNYWdpY3MuVGltZTIwMG1zKTtcbn1cblxuZXhwb3J0IHtcblx0Y29tbWFuZERlY29yYXRvcixcblx0Y29tbWFuZERlY29yYXRvciBhcyBjb21tYW5kLFxuXHR2aWV3RGVjb3JhdG9yLFxuXHR2aWV3RGVjb3JhdG9yIGFzIHZpZXcsXG5cdHZpZXdEZWNvcmF0b3IgYXMgdmlld01vZGVsLFxuXHRwb3B1cERlY29yYXRvcixcblx0cG9wdXBEZWNvcmF0b3IgYXMgcG9wdXAsXG5cdHNldHRpbmdzTWVudUtleXNIYW5kbGVyXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cualF1ZXJ5OyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uLCBVcGxvYWRFcnJvckNvZGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcEludCwgaXNVbmQsIGlzTnVsbCwgaGFzLCBtaWNyb3RpbWUsIGluQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgJGh0bWwsIGJBbmltYXRpb25TdXBwb3J0ZWQgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyByZWxvYWQgYXMgbW9tZW50b3JSZWxvYWQgfSBmcm9tICdDb21tb24vTW9tZW50b3InO1xuaW1wb3J0IHsgbGFuZ0xpbmsgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5sZXQgSTE4Tl9EQVRBID0gd2luZG93LnJhaW5sb29wSTE4TiB8fCB7fTtcblxuY29uc3QgSTE4Tl9OT1RJRklDQVRJT05fREFUQSA9IHt9O1xuY29uc3QgSTE4Tl9OT1RJRklDQVRJT05fTUFQID0gW1xuXHRbTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9UT0tFTiddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9UT0tFTiddLFxuXHRbTm90aWZpY2F0aW9uLkF1dGhFcnJvciwgJ05PVElGSUNBVElPTlMvQVVUSF9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLkFjY2Vzc0Vycm9yLCAnTk9USUZJQ0FUSU9OUy9BQ0NFU1NfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Db25uZWN0aW9uRXJyb3IsICdOT1RJRklDQVRJT05TL0NPTk5FQ1RJT05fRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5DYXB0Y2hhRXJyb3IsICdOT1RJRklDQVRJT05TL0NBUFRDSEFfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Tb2NpYWxGYWNlYm9va0xvZ2luQWNjZXNzRGlzYWJsZSwgJ05PVElGSUNBVElPTlMvU09DSUFMX0ZBQ0VCT09LX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSwgJ05PVElGSUNBVElPTlMvU09DSUFMX1RXSVRURVJfTE9HSU5fQUNDRVNTX0RJU0FCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5Tb2NpYWxHb29nbGVMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9HT09HTEVfTE9HSU5fQUNDRVNTX0RJU0FCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5Eb21haW5Ob3RBbGxvd2VkLCAnTk9USUZJQ0FUSU9OUy9ET01BSU5fTk9UX0FMTE9XRUQnXSxcblx0W05vdGlmaWNhdGlvbi5BY2NvdW50Tm90QWxsb3dlZCwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9OT1RfQUxMT1dFRCddLFxuXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9UV09fRkFDVE9SX0FVVEhfUkVRVUlSRUQnXSxcblx0W05vdGlmaWNhdGlvbi5BY2NvdW50VHdvRmFjdG9yQXV0aEVycm9yLCAnTk9USUZJQ0FUSU9OUy9BQ0NPVU5UX1RXT19GQUNUT1JfQVVUSF9FUlJPUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ291bGROb3RTYXZlTmV3UGFzc3dvcmQsICdOT1RJRklDQVRJT05TL0NPVUxEX05PVF9TQVZFX05FV19QQVNTV09SRCddLFxuXHRbTm90aWZpY2F0aW9uLkN1cnJlbnRQYXNzd29yZEluY29ycmVjdCwgJ05PVElGSUNBVElPTlMvQ1VSUkVOVF9QQVNTV09SRF9JTkNPUlJFQ1QnXSxcblx0W05vdGlmaWNhdGlvbi5OZXdQYXNzd29yZFNob3J0LCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfU0hPUlQnXSxcblx0W05vdGlmaWNhdGlvbi5OZXdQYXNzd29yZFdlYWssICdOT1RJRklDQVRJT05TL05FV19QQVNTV09SRF9XRUFLJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRGb3JiaWRkZW4sICdOT1RJRklDQVRJT05TL05FV19QQVNTV09SRF9GT1JCSURERU5UJ10sXG5cblx0W05vdGlmaWNhdGlvbi5Db250YWN0c1N5bmNFcnJvciwgJ05PVElGSUNBVElPTlMvQ09OVEFDVFNfU1lOQ19FUlJPUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudEdldE1lc3NhZ2VMaXN0LCAnTk9USUZJQ0FUSU9OUy9DQU5UX0dFVF9NRVNTQUdFX0xJU1QnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50R2V0TWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnREZWxldGVNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudE1vdmVNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX01PVkVfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRDb3B5TWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9NT1ZFX01FU1NBR0UnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50U2VuZE1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfU0VORF9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uSW52YWxpZFJlY2lwaWVudHMsICdOT1RJRklDQVRJT05TL0lOVkFMSURfUkVDSVBJRU5UUyddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVGaWx0ZXJzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NBVkVfRklMVEVSUyddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRHZXRGaWx0ZXJzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0dFVF9GSUxURVJTJ10sXG5cdFtOb3RpZmljYXRpb24uRmlsdGVyc0FyZU5vdENvcnJlY3QsICdOT1RJRklDQVRJT05TL0ZJTFRFUlNfQVJFX05PVF9DT1JSRUNUJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50Q3JlYXRlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0NSRUFURV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50UmVuYW1lRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1JFTkFNRV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlTm9uRW1wdHlGb2xkZXIsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX05PTl9FTVBUWV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50U3Vic2NyaWJlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NVQlNDUklCRV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50VW5zdWJzY3JpYmVGb2xkZXIsICdOT1RJRklDQVRJT05TL0NBTlRfVU5TVUJTQ1JJQkVfRk9MREVSJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZVNldHRpbmdzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NBVkVfU0VUVElOR1MnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZVBsdWdpblNldHRpbmdzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NBVkVfUExVR0lOX1NFVFRJTkdTJ10sXG5cblx0W05vdGlmaWNhdGlvbi5Eb21haW5BbHJlYWR5RXhpc3RzLCAnTk9USUZJQ0FUSU9OUy9ET01BSU5fQUxSRUFEWV9FWElTVFMnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRJbnN0YWxsUGFja2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9JTlNUQUxMX1BBQ0tBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlUGFja2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfUEFDS0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRQbHVnaW5QYWNrYWdlLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1BMVUdJTl9QQUNLQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlLCAnTk9USUZJQ0FUSU9OUy9VTlNVUFBPUlRFRF9QTFVHSU5fUEFDS0FHRSddLFxuXG5cdFtOb3RpZmljYXRpb24uTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSwgJ05PVElGSUNBVElPTlMvTElDRU5TSU5HX1NFUlZFUl9JU19VTkFWQUlMQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ0V4cGlyZWQsICdOT1RJRklDQVRJT05TL0xJQ0VOU0lOR19FWFBJUkVEJ10sXG5cdFtOb3RpZmljYXRpb24uTGljZW5zaW5nQmFubmVkLCAnTk9USUZJQ0FUSU9OUy9MSUNFTlNJTkdfQkFOTkVEJ10sXG5cblx0W05vdGlmaWNhdGlvbi5EZW1vU2VuZE1lc3NhZ2VFcnJvciwgJ05PVElGSUNBVElPTlMvREVNT19TRU5EX01FU1NBR0VfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5EZW1vQWNjb3VudEVycm9yLCAnTk9USUZJQ0FUSU9OUy9ERU1PX0FDQ09VTlRfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkFjY291bnRBbHJlYWR5RXhpc3RzLCAnTk9USUZJQ0FUSU9OUy9BQ0NPVU5UX0FMUkVBRFlfRVhJU1RTJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudERvZXNOb3RFeGlzdCwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9ET0VTX05PVF9FWElTVCddLFxuXG5cdFtOb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yLCAnTk9USUZJQ0FUSU9OUy9NQUlMX1NFUlZFUl9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRJbnB1dEFyZ3VtZW50LCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX0lOUFVUX0FSR1VNRU5UJ10sXG5cdFtOb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbiwgJ05PVElGSUNBVElPTlMvVU5LTk9XTl9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLlVua25vd25FcnJvciwgJ05PVElGSUNBVElPTlMvVU5LTk9XTl9FUlJPUiddXG5dO1xuXG5leHBvcnQgY29uc3QgdHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7T2JqZWN0PX0gdmFsdWVMaXN0XG4gKiBAcGFyYW0ge3N0cmluZz19IGRlZmF1bFZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaTE4bihrZXksIHZhbHVlTGlzdCwgZGVmYXVsVmFsdWUpIHtcblx0bGV0IHZhbHVlTmFtZSA9ICcnLFxuXHRcdHJlc3VsdCA9IEkxOE5fREFUQVtrZXldO1xuXG5cdGlmIChpc1VuZChyZXN1bHQpKSB7XG5cdFx0cmVzdWx0ID0gaXNVbmQoZGVmYXVsVmFsdWUpID8ga2V5IDogZGVmYXVsVmFsdWU7XG5cdH1cblxuXHRpZiAoIWlzVW5kKHZhbHVlTGlzdCkgJiYgIWlzTnVsbCh2YWx1ZUxpc3QpKSB7XG5cdFx0Zm9yICh2YWx1ZU5hbWUgaW4gdmFsdWVMaXN0KSB7XG5cdFx0XHRpZiAoaGFzKHZhbHVlTGlzdCwgdmFsdWVOYW1lKSkge1xuXHRcdFx0XHRyZXN1bHQgPSByZXN1bHQucmVwbGFjZSgnJScgKyB2YWx1ZU5hbWUgKyAnJScsIHZhbHVlTGlzdFt2YWx1ZU5hbWVdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBpMThuVG9Ob2RlID0gKGVsZW1lbnQpID0+IHtcblx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRrZXkgPSAkZWwuZGF0YSgnaTE4bicpO1xuXG5cdGlmIChrZXkpIHtcblx0XHRpZiAoJ1snID09PSBrZXkuc3Vic3RyKDAsIDEpKSB7XG5cdFx0XHRzd2l0Y2ggKGtleS5zdWJzdHIoMCwgNikpIHtcblx0XHRcdFx0Y2FzZSAnW2h0bWxdJzpcblx0XHRcdFx0XHQkZWwuaHRtbChpMThuKGtleS5zdWJzdHIoNikpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnW3BsYWNlJzpcblx0XHRcdFx0XHQkZWwuYXR0cigncGxhY2Vob2xkZXInLCBpMThuKGtleS5zdWJzdHIoMTMpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1t0aXRsZSc6XG5cdFx0XHRcdFx0JGVsLmF0dHIoJ3RpdGxlJywgaTE4bihrZXkuc3Vic3RyKDcpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLnRleHQoaTE4bihrZXkpKTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBhbmltYXRlID0gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGkxOG5Ub05vZGVzKGVsZW1lbnRzLCBhbmltYXRlID0gZmFsc2UpIHtcblx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0JCgnW2RhdGEtaTE4bl0nLCBlbGVtZW50cykuZWFjaCgoaW5kZXgsIGl0ZW0pID0+IHtcblx0XHRcdGkxOG5Ub05vZGUoaXRlbSk7XG5cdFx0fSk7XG5cblx0XHRpZiAoYW5pbWF0ZSAmJiBiQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG5cdFx0XHQkKCcuaTE4bi1hbmltYXRpb25bZGF0YS1pMThuXScsIGVsZW1lbnRzKS5sZXR0ZXJmeCh7XG5cdFx0XHRcdCdmeCc6ICdmYWxsIGZhZGUnLFxuXHRcdFx0XHQnYmFja3dhcmRzJzogZmFsc2UsXG5cdFx0XHRcdCd0aW1pbmcnOiA1MCxcblx0XHRcdFx0J2Z4X2R1cmF0aW9uJzogJzUwbXMnLFxuXHRcdFx0XHQnbGV0dGVyX2VuZCc6ICdyZXN0b3JlJyxcblx0XHRcdFx0J2VsZW1lbnRfZW5kJzogJ3Jlc3RvcmUnXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuXG5jb25zdCByZWxvYWREYXRhID0gKCkgPT4ge1xuXHRpZiAod2luZG93LnJhaW5sb29wSTE4Tikge1xuXHRcdEkxOE5fREFUQSA9IHdpbmRvdy5yYWlubG9vcEkxOE4gfHwge307XG5cblx0XHRpMThuVG9Ob2Rlcyh3aW5kb3cuZG9jdW1lbnQsIHRydWUpO1xuXG5cdFx0bW9tZW50b3JSZWxvYWQoKTtcblx0XHR0cmlnZ2VyKCF0cmlnZ2VyKCkpO1xuXHR9XG5cblx0d2luZG93LnJhaW5sb29wSTE4TiA9IG51bGw7XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlKCkge1xuXHRJMThOX05PVElGSUNBVElPTl9NQVAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbaXRlbVswXV0gPSBpMThuKGl0ZW1bMV0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdGFydENhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gbGFuZ0NhbGxiYWNrID0gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdE9uU3RhcnRPckxhbmdDaGFuZ2Uoc3RhcnRDYWxsYmFjaywgbGFuZ0NhbGxiYWNrID0gbnVsbCkge1xuXHRpZiAoc3RhcnRDYWxsYmFjaykge1xuXHRcdHN0YXJ0Q2FsbGJhY2soKTtcblx0fVxuXG5cdGlmIChsYW5nQ2FsbGJhY2spIHtcblx0XHR0cmlnZ2VyLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAoc3RhcnRDYWxsYmFjaykge1xuXHRcdFx0XHRzdGFydENhbGxiYWNrKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobGFuZ0NhbGxiYWNrKSB7XG5cdFx0XHRcdGxhbmdDYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHR0cmlnZ2VyLnN1YnNjcmliZShzdGFydENhbGxiYWNrKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcGFyYW0geyo9fSBtZXNzYWdlID0gJydcbiAqIEBwYXJhbSB7Kj19IGRlZkNvZGUgPSBudWxsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uKGNvZGUsIG1lc3NhZ2UgPSAnJywgZGVmQ29kZSA9IG51bGwpIHtcblx0Y29kZSA9IHdpbmRvdy5wYXJzZUludChjb2RlLCAxMCkgfHwgMDtcblx0aWYgKE5vdGlmaWNhdGlvbi5DbGllbnRWaWV3RXJyb3IgPT09IGNvZGUgJiYgbWVzc2FnZSkge1xuXHRcdHJldHVybiBtZXNzYWdlO1xuXHR9XG5cblx0ZGVmQ29kZSA9IGRlZkNvZGUgPyB3aW5kb3cucGFyc2VJbnQoZGVmQ29kZSwgMTApIHx8IDAgOiAwO1xuXHRyZXR1cm4gaXNVbmQoSTE4Tl9OT1RJRklDQVRJT05fREFUQVtjb2RlXSlcblx0XHQ/IGRlZkNvZGUgJiYgaXNVbmQoSTE4Tl9OT1RJRklDQVRJT05fREFUQVtkZWZDb2RlXSlcblx0XHRcdD8gSTE4Tl9OT1RJRklDQVRJT05fREFUQVtkZWZDb2RlXVxuXHRcdFx0OiAnJ1xuXHRcdDogSTE4Tl9OT1RJRklDQVRJT05fREFUQVtjb2RlXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWZDb2RlID0gTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsIGRlZkNvZGUgPSBOb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbikge1xuXHRyZXR1cm4gcmVzcG9uc2UgJiYgcmVzcG9uc2UuRXJyb3JDb2RlXG5cdFx0PyBnZXROb3RpZmljYXRpb24ocEludChyZXNwb25zZS5FcnJvckNvZGUpLCByZXNwb25zZS5FcnJvck1lc3NhZ2UgfHwgJycpXG5cdFx0OiBnZXROb3RpZmljYXRpb24oZGVmQ29kZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBjb2RlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlKGNvZGUpIHtcblx0bGV0IHJlc3VsdCA9ICcnO1xuXHRzd2l0Y2ggKHdpbmRvdy5wYXJzZUludChjb2RlLCAxMCkgfHwgMCkge1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVJc1Rvb0JpZzpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX0lTX1RPT19CSUcnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVQYXJ0aWFsbHlVcGxvYWRlZDpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX1BBUlRJQUxMWV9VUExPQURFRCcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZU5vVXBsb2FkZWQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfTk9fRklMRV9VUExPQURFRCcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuTWlzc2luZ1RlbXBGb2xkZXI6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfTUlTU0lOR19URU1QX0ZPTERFUicpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZU9uU2F2ZWluZ0Vycm9yOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX09OX1NBVklOR19GSUxFJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlVHlwZTpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX1RZUEUnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfVU5LTk9XTicpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRtaW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkKGFkbWluLCBsYW5ndWFnZSkge1xuXHRjb25zdCBzdGFydCA9IG1pY3JvdGltZSgpO1xuXG5cdCRodG1sLmFkZENsYXNzKCdybC1jaGFuZ2luZy1sYW5ndWFnZScpO1xuXG5cdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdCQuYWpheCh7XG5cdFx0XHR1cmw6IGxhbmdMaW5rKGxhbmd1YWdlLCBhZG1pbiksXG5cdFx0XHRkYXRhVHlwZTogJ3NjcmlwdCcsXG5cdFx0XHRjYWNoZTogdHJ1ZVxuXHRcdH0pLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdF8uZGVsYXkoXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmVsb2FkRGF0YSgpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBpc1J0bCA9IC0xIDwgaW5BcnJheSgobGFuZ3VhZ2UgfHwgJycpLnRvTG93ZXJDYXNlKCksIFsnYXInLCAnYXJfc2EnLCAnaGUnLCAnaGVfaGUnLCAndXInLCAndXJfaXInXSk7XG5cblx0XHRcdFx0XHRcdCRodG1sXG5cdFx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKVxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3JsLXJ0bCBybC1sdHInKVxuXHRcdFx0XHRcdFx0XHQvLyAuYXR0cignZGlyJywgaXNSdGwgPyAncnRsJyA6ICdsdHInKVxuXHRcdFx0XHRcdFx0XHQuYWRkQ2xhc3MoaXNSdGwgPyAncmwtcnRsJyA6ICdybC1sdHInKTtcblxuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0NTAwIDwgbWljcm90aW1lKCkgLSBzdGFydCA/IDEgOiA1MDBcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdybC1jaGFuZ2luZy1sYW5ndWFnZScpO1xuXHRcdFx0XHR3aW5kb3cucmFpbmxvb3BJMThOID0gbnVsbDtcblx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHR9XG5cdFx0KTtcblx0fSk7XG59XG5cbi8vIGluaXQgc2VjdGlvblxuJGh0bWwuYWRkQ2xhc3MoJ3JsLScgKyAoJGh0bWwuYXR0cignZGlyJykgfHwgJ2x0cicpKTtcbiIsInZhciBfT2JqZWN0JGNyZWF0ZSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9jcmVhdGVcIik7XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzTG9vc2U7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maW5kXCIpOyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCB7IHBTdHJpbmcsIHBJbnQsIGlzVW5kLCBpc05vcm1hbCwgdHJpbSwgZW5jb2RlVVJJQ29tcG9uZW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jb25zdCBST09UID0gJy4vJyxcblx0SEFTSF9QUkVGSVggPSAnIy8nLFxuXHRTRVJWRVJfUFJFRklYID0gJy4vPycsXG5cdFNVQl9RVUVSWV9QUkVGSVggPSAnJnFbXT0nLFxuXHRWRVJTSU9OID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSxcblx0V0VCX1BSRUZJWCA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd3ZWJQYXRoJykgfHwgJycsXG5cdFZFUlNJT05fUFJFRklYID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3dlYlZlcnNpb25QYXRoJykgfHwgJ3JhaW5sb29wL3YvJyArIFZFUlNJT04gKyAnLycsXG5cdFNUQVRJQ19QUkVGSVggPSBWRVJTSU9OX1BSRUZJWCArICdzdGF0aWMvJyxcblx0QURNSU5fSE9TVF9VU0UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhZG1pbkhvc3RVc2UnKSxcblx0QURNSU5fUEFUSCA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhZG1pblBhdGgnKSB8fCAnYWRtaW4nO1xuXG5sZXQgQVVUSF9QUkVGSVggPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXV0aEFjY291bnRIYXNoJykgfHwgJzAnO1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVBdXRoU3VmZml4KCkge1xuXHRBVVRIX1BSRUZJWCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoQWNjb3VudEhhc2gnKSB8fCAnMCc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YlF1ZXJ5UHJlZml4KCkge1xuXHRyZXR1cm4gU1VCX1FVRVJZX1BSRUZJWDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZz19IHN0YXJ0dXBVcmxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290KHN0YXJ0dXBVcmwgPSAnJykge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyBwU3RyaW5nKHN0YXJ0dXBVcmwpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290QWRtaW4oKSB7XG5cdHJldHVybiBBRE1JTl9IT1NUX1VTRSA/IFJPT1QgOiBTRVJWRVJfUFJFRklYICsgQURNSU5fUEFUSDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdFVzZXIoKSB7XG5cdHJldHVybiBST09UO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRSYXcodHlwZSwgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0Y3VzdG9tU3BlY1N1ZmZpeCA9IGlzVW5kKGN1c3RvbVNwZWNTdWZmaXgpID8gQVVUSF9QUkVGSVggOiBjdXN0b21TcGVjU3VmZml4O1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggK1xuXHRcdCcvUmF3LycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0Y3VzdG9tU3BlY1N1ZmZpeCArXG5cdFx0Jy8nICtcblx0XHR0eXBlICtcblx0XHQnLycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0ZG93bmxvYWRcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnREb3dubG9hZChkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnRG93bmxvYWQnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50UHJldmlldyhkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnVmlldycsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRUaHVtYm5haWxQcmV2aWV3KGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdWaWV3VGh1bWJuYWlsJywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFByZXZpZXdBc1BsYWluKGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdWaWV3QXNQbGFpbicsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRGcmFtZWQoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ0ZyYW1lZFZpZXcnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZXJSZXF1ZXN0KHR5cGUpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnLycgKyB0eXBlICsgJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWQoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdVcGxvYWQnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkQ29udGFjdHMoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdVcGxvYWRDb250YWN0cycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRCYWNrZ3JvdW5kKCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnVXBsb2FkQmFja2dyb3VuZCcpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdBcHBlbmQnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2UoZW1haWwpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ0NoYW5nZScpICsgZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKSArICcvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWpheChhZGQpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ0FqYXgnKSArIGFkZDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdEhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXNzYWdlVmlld0xpbmsocmVxdWVzdEhhc2gpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICtcblx0XHQnL1Jhdy8nICtcblx0XHRTVUJfUVVFUllfUFJFRklYICtcblx0XHQnLycgK1xuXHRcdEFVVEhfUFJFRklYICtcblx0XHQnL1ZpZXdBc1BsYWluLycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0cmVxdWVzdEhhc2hcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdEhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXNzYWdlRG93bmxvYWRMaW5rKHJlcXVlc3RIYXNoKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArICcvUmF3LycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnL0Rvd25sb2FkLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgcmVxdWVzdEhhc2hcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdmF0YXJMaW5rKGVtYWlsKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9SYXcvMC9BdmF0YXIvJyArIGVuY29kZVVSSUNvbXBvbmVudChlbWFpbCkgKyAnLyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaWNMaW5rKGhhc2gpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8wL1B1YmxpYy8nICsgaGFzaCArICcvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJCYWNrZ3JvdW5kKGhhc2gpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvVXNlckJhY2tncm91bmQvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBoYXNoXG5cdCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBocEluZm8oKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9JbmZvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ1xuICogQHBhcmFtIHtib29sZWFufSBpc0FkbWluXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGFuZ0xpbmsobGFuZywgaXNBZG1pbikge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvTGFuZy8wLycgKyAoaXNBZG1pbiA/ICdBZG1pbicgOiAnQXBwJykgKyAnLycgKyB3aW5kb3cuZW5jb2RlVVJJKGxhbmcpICsgJy8nICsgVkVSU0lPTiArICcvJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q29udGFjdHNWY2YoKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvQ29udGFjdHNWY2YvJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q29udGFjdHNDc3YoKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvQ29udGFjdHNDc3YvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHhhdXRoID0gZmFsc2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2NpYWxHb29nbGUoeGF1dGggPSBmYWxzZSkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggK1xuXHRcdCdTb2NpYWxHb29nbGUnICtcblx0XHQoJycgIT09IEFVVEhfUFJFRklYID8gJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nIDogJycpICtcblx0XHQoeGF1dGggPyAnJnhhdXRoPTEnIDogJycpXG5cdCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvY2lhbFR3aXR0ZXIoKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJ1NvY2lhbFR3aXR0ZXInICsgKCcnICE9PSBBVVRIX1BSRUZJWCA/ICcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29jaWFsRmFjZWJvb2soKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArICdTb2NpYWxGYWNlYm9vaycgKyAoJycgIT09IEFVVEhfUFJFRklYID8gJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nIDogJycpXG5cdCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGF0aWNQcmVmaXgocGF0aCkge1xuXHRyZXR1cm4gU1RBVElDX1BSRUZJWCArIHBhdGg7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5Q29udGFjdFBpYygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnY3NzL2ltYWdlcy9lbXB0eS1jb250YWN0LnBuZycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvdW5kKGZpbGVOYW1lKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ3NvdW5kcy8nICsgZmlsZU5hbWUpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3RpZmljYXRpb25NYWlsSWNvbigpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnY3NzL2ltYWdlcy9pY29tLW1lc3NhZ2Utbm90aWZpY2F0aW9uLnBuZycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuUGdwSnMoKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ2pzL21pbi9vcGVucGdwLm1pbi5qcycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuUGdwV29ya2VySnMoKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ2pzL21pbi9vcGVucGdwLndvcmtlci5taW4uanMnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlblBncFdvcmtlclBhdGgoKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ2pzL21pbi8nKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhlbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aGVtZVByZXZpZXdMaW5rKHRoZW1lKSB7XG5cdGxldCBwcmVmaXggPSBWRVJTSU9OX1BSRUZJWDtcblx0aWYgKCdAY3VzdG9tJyA9PT0gdGhlbWUuc3Vic3RyKC03KSkge1xuXHRcdHRoZW1lID0gdHJpbSh0aGVtZS5zdWJzdHJpbmcoMCwgdGhlbWUubGVuZ3RoIC0gNykpO1xuXHRcdHByZWZpeCA9IFdFQl9QUkVGSVg7XG5cdH1cblxuXHRyZXR1cm4gcHJlZml4ICsgJ3RoZW1lcy8nICsgd2luZG93LmVuY29kZVVSSSh0aGVtZSkgKyAnL2ltYWdlcy9wcmV2aWV3LnBuZyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGluYm94Rm9sZGVyTmFtZSA9ICdJTkJPWCdcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmJveChpbmJveEZvbGRlck5hbWUgPSAnSU5CT1gnKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArICdtYWlsYm94LycgKyBpbmJveEZvbGRlck5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmc9fSBzY3JlZW5OYW1lID0gJydcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5ncyhzY3JlZW5OYW1lID0gJycpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ3NldHRpbmdzJyArIChzY3JlZW5OYW1lID8gJy8nICsgc2NyZWVuTmFtZSA6ICcnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWJvdXQoKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArICdhYm91dCc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbk5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZG1pbihzY3JlZW5OYW1lKSB7XG5cdGxldCByZXN1bHQgPSBIQVNIX1BSRUZJWDtcblx0c3dpdGNoIChzY3JlZW5OYW1lKSB7XG5cdFx0Y2FzZSAnQWRtaW5Eb21haW5zJzpcblx0XHRcdHJlc3VsdCArPSAnZG9tYWlucyc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdBZG1pblNlY3VyaXR5Jzpcblx0XHRcdHJlc3VsdCArPSAnc2VjdXJpdHknO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnQWRtaW5MaWNlbnNpbmcnOlxuXHRcdFx0cmVzdWx0ICs9ICdsaWNlbnNpbmcnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Ly8gbm8gZGVmYXVsdFxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyXG4gKiBAcGFyYW0ge251bWJlcj19IHBhZ2UgPSAxXG4gKiBAcGFyYW0ge3N0cmluZz19IHNlYXJjaCA9ICcnXG4gKiBAcGFyYW0ge3N0cmluZz19IHRocmVhZFVpZCA9ICcnXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFpbEJveChmb2xkZXIsIHBhZ2UgPSAxLCBzZWFyY2ggPSAnJywgdGhyZWFkVWlkID0gJycpIHtcblx0cGFnZSA9IGlzTm9ybWFsKHBhZ2UpID8gcEludChwYWdlKSA6IDE7XG5cdHNlYXJjaCA9IHBTdHJpbmcoc2VhcmNoKTtcblxuXHRsZXQgcmVzdWx0ID0gSEFTSF9QUkVGSVggKyAnbWFpbGJveC8nO1xuXG5cdGlmICgnJyAhPT0gZm9sZGVyKSB7XG5cdFx0Y29uc3QgcmVzdWx0VGhyZWFkVWlkID0gcEludCh0aHJlYWRVaWQpO1xuXHRcdHJlc3VsdCArPSB3aW5kb3cuZW5jb2RlVVJJKGZvbGRlcikgKyAoMCA8IHJlc3VsdFRocmVhZFVpZCA/ICd+JyArIHJlc3VsdFRocmVhZFVpZCA6ICcnKTtcblx0fVxuXG5cdGlmICgxIDwgcGFnZSkge1xuXHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bL10rJC8sICcnKTtcblx0XHRyZXN1bHQgKz0gJy9wJyArIHBhZ2U7XG5cdH1cblxuXHRpZiAoJycgIT09IHNlYXJjaCkge1xuXHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bL10rJC8sICcnKTtcblx0XHRyZXN1bHQgKz0gJy8nICsgd2luZG93LmVuY29kZVVSSShzZWFyY2gpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsInZhciBfT2JqZWN0JGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTtcblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL21hcFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JcIik7IiwidmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpO1xuXG52YXIgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL2luc3RhbmNlL3NsaWNlXCIpO1xuXG52YXIgX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvaW5zdGFuY2UvcmV2ZXJzZVwiKTtcblxudmFyIF9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvaW5zdGFuY2UvcmVkdWNlXCIpO1xuXG52YXIgX09iamVjdCRrZXlzID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2tleXNcIik7XG5cbnZhciBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9pbnN0YW5jZS9mb3ItZWFjaFwiKTtcblxuZnVuY3Rpb24gX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5LCBkZWNvcmF0b3JzLCBkZXNjcmlwdG9yLCBjb250ZXh0KSB7XG4gIHZhciBfY29udGV4dCwgX2NvbnRleHQyLCBfY29udGV4dDM7XG5cbiAgdmFyIGRlc2MgPSB7fTtcblxuICBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBfT2JqZWN0JGtleXMoZGVzY3JpcHRvcikpLmNhbGwoX2NvbnRleHQsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBkZXNjW2tleV0gPSBkZXNjcmlwdG9yW2tleV07XG4gIH0pO1xuXG4gIGRlc2MuZW51bWVyYWJsZSA9ICEhZGVzYy5lbnVtZXJhYmxlO1xuICBkZXNjLmNvbmZpZ3VyYWJsZSA9ICEhZGVzYy5jb25maWd1cmFibGU7XG5cbiAgaWYgKCd2YWx1ZScgaW4gZGVzYyB8fCBkZXNjLmluaXRpYWxpemVyKSB7XG4gICAgZGVzYy53cml0YWJsZSA9IHRydWU7XG4gIH1cblxuICBkZXNjID0gX3JlZHVjZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQyID0gX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0MyA9IF9zbGljZUluc3RhbmNlUHJvcGVydHkoZGVjb3JhdG9ycykuY2FsbChkZWNvcmF0b3JzKSkuY2FsbChfY29udGV4dDMpKS5jYWxsKF9jb250ZXh0MiwgZnVuY3Rpb24gKGRlc2MsIGRlY29yYXRvcikge1xuICAgIHJldHVybiBkZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzYykgfHwgZGVzYztcbiAgfSwgZGVzYyk7XG5cbiAgaWYgKGNvbnRleHQgJiYgZGVzYy5pbml0aWFsaXplciAhPT0gdm9pZCAwKSB7XG4gICAgZGVzYy52YWx1ZSA9IGRlc2MuaW5pdGlhbGl6ZXIgPyBkZXNjLmluaXRpYWxpemVyLmNhbGwoY29udGV4dCkgOiB2b2lkIDA7XG4gICAgZGVzYy5pbml0aWFsaXplciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChkZXNjLmluaXRpYWxpemVyID09PSB2b2lkIDApIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIGRlc2MpO1xuXG4gICAgZGVzYyA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gZGVzYztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmtleTsiLCJpbXBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUgfSBmcm9tICdSZW1vdGUvQWJzdHJhY3RBamF4JztcblxuY2xhc3MgUmVtb3RlQWRtaW5BamF4IGV4dGVuZHMgQWJzdHJhY3RBamF4UmVtb3RlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0xvZ2luXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGFzc3dvcmRcblx0ICovXG5cdGFkbWluTG9naW4oZkNhbGxiYWNrLCBzTG9naW4sIHNQYXNzd29yZCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Mb2dpbicsIHtcblx0XHRcdCdMb2dpbic6IHNMb2dpbixcblx0XHRcdCdQYXNzd29yZCc6IHNQYXNzd29yZFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGFkbWluTG9nb3V0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Mb2dvdXQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHNhdmVBZG1pbkNvbmZpZyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblNldHRpbmdzVXBkYXRlJywgb0RhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IHZhbHVlRm5cblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZuXG5cdCAqL1xuXHRzYXZlQWRtaW5Db25maWdIZWxwZXIoa2V5LCB2YWx1ZUZuLCBmbikge1xuXHRcdHJldHVybiAodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGFba2V5XSA9IHZhbHVlRm4gPyB2YWx1ZUZuKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0dGhpcy5zYXZlQWRtaW5Db25maWcoZm4gfHwgbnVsbCwgZGF0YSk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJJbmNsdWRlQWxpYXNlcyA9IHRydWVcblx0ICovXG5cdGRvbWFpbkxpc3QoZkNhbGxiYWNrLCBiSW5jbHVkZUFsaWFzZXMgPSB0cnVlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkxpc3QnLCB7XG5cdFx0XHQnSW5jbHVkZUFsaWFzZXMnOiBiSW5jbHVkZUFsaWFzZXMgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRwbHVnaW5MaXN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QbHVnaW5MaXN0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0cGFja2FnZXNMaXN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QYWNrYWdlc0xpc3QnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRjb3JlRGF0YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluQ29yZURhdGEnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHR1cGRhdGVDb3JlRGF0YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluVXBkYXRlQ29yZURhdGEnLCB7fSwgOTAwMDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYWNrYWdlXG5cdCAqL1xuXHRwYWNrYWdlSW5zdGFsbChmQ2FsbGJhY2ssIG9QYWNrYWdlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdBZG1pblBhY2thZ2VJbnN0YWxsJyxcblx0XHRcdHtcblx0XHRcdFx0J0lkJzogb1BhY2thZ2UuaWQsXG5cdFx0XHRcdCdUeXBlJzogb1BhY2thZ2UudHlwZSxcblx0XHRcdFx0J0ZpbGUnOiBvUGFja2FnZS5maWxlXG5cdFx0XHR9LFxuXHRcdFx0NjAwMDBcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYWNrYWdlXG5cdCAqL1xuXHRwYWNrYWdlRGVsZXRlKGZDYWxsYmFjaywgb1BhY2thZ2UpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFja2FnZURlbGV0ZScsIHtcblx0XHRcdCdJZCc6IG9QYWNrYWdlLmlkXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdGRvbWFpbihmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkxvYWQnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdHBsdWdpbihmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpbkxvYWQnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdGRvbWFpbkRlbGV0ZShmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkRlbGV0ZScsIHtcblx0XHRcdCdOYW1lJzogc05hbWVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTmFtZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJEaXNhYmxlZFxuXHQgKi9cblx0ZG9tYWluRGlzYWJsZShmQ2FsbGJhY2ssIHNOYW1lLCBiRGlzYWJsZWQpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkRpc2FibGUnLCB7XG5cdFx0XHROYW1lOiBzTmFtZSxcblx0XHRcdERpc2FibGVkOiBiRGlzYWJsZWQgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvQ29uZmlnXG5cdCAqL1xuXHRwbHVnaW5TZXR0aW5nc1VwZGF0ZShmQ2FsbGJhY2ssIG9Db25maWcpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpblNldHRpbmdzVXBkYXRlJywgb0NvbmZpZyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJGb3JjZVxuXHQgKi9cblx0bGljZW5zaW5nKGZDYWxsYmFjaywgYkZvcmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5MaWNlbnNpbmcnLCB7XG5cdFx0XHRGb3JjZTogYkZvcmNlID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0RvbWFpblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0tleVxuXHQgKi9cblx0bGljZW5zaW5nQWN0aXZhdGUoZkNhbGxiYWNrLCBzRG9tYWluLCBzS2V5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5MaWNlbnNpbmdBY3RpdmF0ZScsIHtcblx0XHRcdERvbWFpbjogc0RvbWFpbixcblx0XHRcdEtleTogc0tleVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRpc2FibGVkXG5cdCAqL1xuXHRwbHVnaW5EaXNhYmxlKGZDYWxsYmFjaywgc05hbWUsIGJEaXNhYmxlZCkge1xuXHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGx1Z2luRGlzYWJsZScsIHtcblx0XHRcdE5hbWU6IHNOYW1lLFxuXHRcdFx0RGlzYWJsZWQ6IGJEaXNhYmxlZCA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlRG9tYWluQWxpYXMoZkNhbGxiYWNrLCBzTmFtZSwgc0FsaWFzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkFsaWFzU2F2ZScsIHtcblx0XHRcdE5hbWU6IHNOYW1lLFxuXHRcdFx0QWxpYXM6IHNBbGlhc1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlT3JVcGRhdGVEb21haW4oXG5cdFx0ZkNhbGxiYWNrLFxuXHRcdGJDcmVhdGUsXG5cdFx0c05hbWUsXG5cdFx0c0luY0hvc3QsXG5cdFx0aUluY1BvcnQsXG5cdFx0c0luY1NlY3VyZSxcblx0XHRiSW5jU2hvcnRMb2dpbixcblx0XHRiVXNlU2lldmUsXG5cdFx0c1NpZXZlQWxsb3dSYXcsXG5cdFx0c1NpZXZlSG9zdCxcblx0XHRpU2lldmVQb3J0LFxuXHRcdHNTaWV2ZVNlY3VyZSxcblx0XHRzT3V0SG9zdCxcblx0XHRpT3V0UG9ydCxcblx0XHRzT3V0U2VjdXJlLFxuXHRcdGJPdXRTaG9ydExvZ2luLFxuXHRcdGJPdXRBdXRoLFxuXHRcdGJPdXRQaHBNYWlsLFxuXHRcdHNXaGl0ZUxpc3Rcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpblNhdmUnLCB7XG5cdFx0XHQnQ3JlYXRlJzogYkNyZWF0ZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdOYW1lJzogc05hbWUsXG5cblx0XHRcdCdJbmNIb3N0Jzogc0luY0hvc3QsXG5cdFx0XHQnSW5jUG9ydCc6IGlJbmNQb3J0LFxuXHRcdFx0J0luY1NlY3VyZSc6IHNJbmNTZWN1cmUsXG5cdFx0XHQnSW5jU2hvcnRMb2dpbic6IGJJbmNTaG9ydExvZ2luID8gJzEnIDogJzAnLFxuXG5cdFx0XHQnVXNlU2lldmUnOiBiVXNlU2lldmUgPyAnMScgOiAnMCcsXG5cdFx0XHQnU2lldmVBbGxvd1Jhdyc6IHNTaWV2ZUFsbG93UmF3ID8gJzEnIDogJzAnLFxuXHRcdFx0J1NpZXZlSG9zdCc6IHNTaWV2ZUhvc3QsXG5cdFx0XHQnU2lldmVQb3J0JzogaVNpZXZlUG9ydCxcblx0XHRcdCdTaWV2ZVNlY3VyZSc6IHNTaWV2ZVNlY3VyZSxcblxuXHRcdFx0J091dEhvc3QnOiBzT3V0SG9zdCxcblx0XHRcdCdPdXRQb3J0JzogaU91dFBvcnQsXG5cdFx0XHQnT3V0U2VjdXJlJzogc091dFNlY3VyZSxcblx0XHRcdCdPdXRTaG9ydExvZ2luJzogYk91dFNob3J0TG9naW4gPyAnMScgOiAnMCcsXG5cdFx0XHQnT3V0QXV0aCc6IGJPdXRBdXRoID8gJzEnIDogJzAnLFxuXHRcdFx0J091dFVzZVBocE1haWwnOiBiT3V0UGhwTWFpbCA/ICcxJyA6ICcwJyxcblxuXHRcdFx0J1doaXRlTGlzdCc6IHNXaGl0ZUxpc3Rcblx0XHR9KTtcblx0fVxuXG5cdHRlc3RDb25uZWN0aW9uRm9yRG9tYWluKFxuXHRcdGZDYWxsYmFjayxcblx0XHRzTmFtZSxcblx0XHRzSW5jSG9zdCxcblx0XHRpSW5jUG9ydCxcblx0XHRzSW5jU2VjdXJlLFxuXHRcdGJVc2VTaWV2ZSxcblx0XHRzU2lldmVIb3N0LFxuXHRcdGlTaWV2ZVBvcnQsXG5cdFx0c1NpZXZlU2VjdXJlLFxuXHRcdHNPdXRIb3N0LFxuXHRcdGlPdXRQb3J0LFxuXHRcdHNPdXRTZWN1cmUsXG5cdFx0Yk91dEF1dGgsXG5cdFx0Yk91dFBocE1haWxcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpblRlc3QnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lLFxuXHRcdFx0J0luY0hvc3QnOiBzSW5jSG9zdCxcblx0XHRcdCdJbmNQb3J0JzogaUluY1BvcnQsXG5cdFx0XHQnSW5jU2VjdXJlJzogc0luY1NlY3VyZSxcblx0XHRcdCdVc2VTaWV2ZSc6IGJVc2VTaWV2ZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdTaWV2ZUhvc3QnOiBzU2lldmVIb3N0LFxuXHRcdFx0J1NpZXZlUG9ydCc6IGlTaWV2ZVBvcnQsXG5cdFx0XHQnU2lldmVTZWN1cmUnOiBzU2lldmVTZWN1cmUsXG5cdFx0XHQnT3V0SG9zdCc6IHNPdXRIb3N0LFxuXHRcdFx0J091dFBvcnQnOiBpT3V0UG9ydCxcblx0XHRcdCdPdXRTZWN1cmUnOiBzT3V0U2VjdXJlLFxuXHRcdFx0J091dEF1dGgnOiBiT3V0QXV0aCA/ICcxJyA6ICcwJyxcblx0XHRcdCdPdXRVc2VQaHBNYWlsJzogYk91dFBocE1haWwgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHRlc3RDb250YWN0cyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkNvbnRhY3RzVGVzdCcsIG9EYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHNhdmVOZXdBZG1pblBhc3N3b3JkKGZDYWxsYmFjaywgb0RhdGEpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFzc3dvcmRVcGRhdGUnLCBvRGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0YWRtaW5QaW5nKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QaW5nJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFJlbW90ZUFkbWluQWpheCgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmNvbnN0IFNVQlMgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViKG5hbWUsIGZ1bmMsIGNvbnRleHQpIHtcblx0aWYgKGlzT2JqZWN0KG5hbWUpKSB7XG5cdFx0Y29udGV4dCA9IGZ1bmMgfHwgbnVsbDtcblx0XHRmdW5jID0gbnVsbDtcblxuXHRcdF8uZWFjaChuYW1lLCAoc3ViRnVuYywgc3ViTmFtZSkgPT4ge1xuXHRcdFx0c3ViKHN1Yk5hbWUsIHN1YkZ1bmMsIGNvbnRleHQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdFx0U1VCU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNVQlNbbmFtZV0ucHVzaChbZnVuYywgY29udGV4dF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWIobmFtZSwgYXJncykge1xuXHRQbHVnaW5zLnJ1bkhvb2soJ3JsLXB1YicsIFtuYW1lLCBhcmdzXSk7XG5cblx0aWYgKCFpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdF8uZWFjaChTVUJTW25hbWVdLCAoaXRlbXMpID0+IHtcblx0XHRcdGlmIChpdGVtc1swXSkge1xuXHRcdFx0XHRpdGVtc1swXS5hcHBseShpdGVtc1sxXSB8fCBudWxsLCBhcmdzIHx8IFtdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiZXhwb3J0IGNvbnN0IE1FU1NBR0VTX1BFUl9QQUdFID0gMjA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMgPSBbMTAsIDIwLCAzMCwgNTAsIDEwMF07XG5cbmV4cG9ydCBjb25zdCBDT05UQUNUU19QRVJfUEFHRSA9IDUwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BSkFYX1RJTUVPVVQgPSAzMDAwMDtcblxuZXhwb3J0IGNvbnN0IFNFQVJDSF9BSkFYX1RJTUVPVVQgPSAzMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUID0gMzAwMDAwO1xuXG5leHBvcnQgY29uc3QgU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCA9IDIwMDAwMDtcblxuZXhwb3J0IGNvbnN0IENPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUID0gMjAwMDAwO1xuXG5leHBvcnQgY29uc3QgVU5VU0VEX09QVElPTl9WQUxVRSA9ICdfX1VOVVNFX18nO1xuXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FID0gJ3JsY3NjJztcblxuZXhwb3J0IGNvbnN0IElNQVBfREVGQVVMVF9QT1JUID0gMTQzO1xuXG5leHBvcnQgY29uc3QgSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUID0gOTkzO1xuXG5leHBvcnQgY29uc3QgU01UUF9ERUZBVUxUX1BPUlQgPSAyNTtcblxuZXhwb3J0IGNvbnN0IFNNVFBfREVGQVVMVF9TRUNVUkVfUE9SVCA9IDQ2NTtcblxuZXhwb3J0IGNvbnN0IFNJRVZFX0RFRkFVTFRfUE9SVCA9IDQxOTA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQgPSAxNTtcblxuZXhwb3J0IGNvbnN0IEFKQVhfRVJST1JfTElNSVQgPSA3O1xuXG5leHBvcnQgY29uc3QgVE9LRU5fRVJST1JfTElNSVQgPSAxMDtcblxuZXhwb3J0IGNvbnN0IFJBSU5MT09QX1RSSUFMX0tFWSA9ICdSQUlOTE9PUC1UUklBTC1LRVknO1xuXG4vKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuZXhwb3J0IGNvbnN0IERBVEFfSU1BR0VfVVNFUl9ET1RfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQzRBQUFBdUNBWUFBQUJYdVNzM0FBQUhIa2xFUVZSb1E3VlpXMDhiVnhDZVhSdXdJYlRHWEl3TnRCQmFxandnVlVpUjhsRGxiemE5cWUxRHBWWjlhTlEvMEtwUGVhSkswN1NwY3VFZUNFbVVBT2JtMjFiZnJMOWxPTmpleFNZcldmYnVuajM3elhkbXZwa3o5b0lnQ0tURDBXZzB4UGQ5NFREUDgzUTB6dldhNTB2emtsU3JkYW5WYW5xZjQvRDg0R0JHcitGK09wM1M4ZnFvSnhMT2RuWmdUdnNPL25ZaGVuSEErVUM3Q1dGMXVYd2tiOSsrbGRQVFV3VmVyVmJWcUZRcXBSOFlQalEwSkNNakk1TE5EaWpvUmdQM1BRVnU1KzVFb3IyWEdMZzdJVjRHa0lkSEovTG16UnM1T0RpSXdOYnJkUjBPMEdDY3E0WHo0ZUZobVp5Y2xQNyt0RFFhSWlrL0JHNVhLUW40U3dHM3pKVExaWG45K3JVY2xJOFVIRDVZVm9ERE44YlN6WGhPTndMNDhmRnhHUjRlaWx6RlpUMXVGUklCNXlUOEJxQ2RuUjNaM2QwVlA5VW42WFJhd1lKcGdnVnJaQnYzOE1FNFhLdFVLbkx0MmpVcGxVb3kxUFIvbDNVN1Q2c1ZTQVFjZ01Ba2o4UERROW5lM3Bham95TVJMN3plS3NZWldIZ1dZREdtdjc4L21tZHdjRkErbUpsU2d6aUhEV3JFUnJzakVYRFhlZ1RpMXRaVytETHhJMmJ4SXJxRk5ZVFh5RHlDRndlTUFIQ3diOGU0Um5UTnVPc3FlM3Q3c3JhMjFwVEQwS2N0NjY2RThYbGNaeXp3OS9SVVVYSzVuSzVvVWluVVFJNlRRM2N5bk8vdjc4dnE2cXJLWENOd2xUaUpKcHlOR2MzblpIcDZ1cVYyZHdyUVdPQ3RaQkRBVjFaV3dzUWs3ZjB3aVFuNWtmZmJBdS8wL0tXQll6SUMxK1h1a2ZHeDBSR1ptcHBLbEMydElWMEJoNGFEY1pXN0hoa2ZIOHVyTExaTDdUMnBpaHZsa01Obno1NkZpYWRIeGljTDQxSXNGcE40MWJreHNZeGJSZEZvOWp3QjhLZFBuMTRKOEtuU3BCUUtoUXM2M25QbWJDVlJjQlVBUjJMcTFWVm1wa3N5TVRGeEFYamNFc1F5YmllZ0VTaW9uang1b3NDWk9lTmUxTzQrRWhDQVg3YlFTZ1FjeFJIVE1nQWdjejUrL0Rpcy9oTDR1SFUzL0I0WUdOQVNHSElLeHVFcWwwaytsMDVBZUlBRjF2UG56NVZ4RkZtZERsYUpyTXRaSVRKZVNzWENPVGxNdW5LeGpMdE1ZT0tOalExNThlSkZ1QXVLa1VPYjVzRXdnZmYxOVNrSlVCVmtUaFpVYm5YWnJ0Q0tCUTZnYm5XSWtqWnB5bmUzZWpBV29HbkE3SWN6NmlydkJMZ2JPTWljQ002VGt4UHgvTEFrYlhmZ1djc2F6dUUya0ZSc0tENVorQ2lxRHVtS25jcFp2aWVXY1M2ZERWRDh4aVlDTmZscEpkd2Nkd0pPZjlhaXJMbVZRN0RQek14SVlXTHNYR1hvVnFMdDVrME0zSzNKVVZQRFpkYldOenNDcDQ4VFBGZHZkblpXVXozMm5EaGE3Yko2M2tnQUpQelNkUmtzOS9LZjl4TUpBUTFncTJOcGFVbXkyWXo0emFyNG5RQzN4Yjk5QVF3Q2NHekxBQXd1aEc4WWlXdmNPS3RzK3I0R09lNW5NaG01ZWZPbTlsVUEzRTN2U1pKUnJLdkUwZm5Qdi8vSnk1Y3ZvNWNUSElQUWJTamhPb3FxNjlldlMxOWY2bHhES0s0K3NWaGlnWlB0S0pxYnJRZXF4ZDUrV1I0K2ZLZ3FnVDBrMlhYM25oaVBnRVRXWEZoWWtGenVQWjJ5VnExR1RTT1hwRTQ3L1ZqZ05uRDRtNEdHNy9MaHNUeDY5RWl3RDRWcjJNd0lJeGdiQUgxOGZLeDF5Zno4dkVvZ052R3RXbkN1aExaYTlVVEFyZVZXRnNIeS9iLytWcmJkbDdFNVJFTVFEMmpEb1ViQnl0eSsvWm5VNjRHa1UySHp5Skxoa3RVMWNMdjhuQVJna1lTMmQzYWpBZ3dHOHFVMm9MbURaOTJDTWFPam83SzR1Q2laZ2JEV2FSV2duWmhQeExock1VQ3ZyNjlyaXdLWmsxTEhGN1hxcldBTzloSnhINm96TnpjbkN4L1BxenRaZzltZjZTUU1zY0N0bTJDNWtlNEJHTWxIV1RVcDM2MDM2QUphakRWckZNekJyaGhXc2xRc1NyRllpT3FWcE1yaU5ZSWdxRlJxMmozRkFiL3pmZlQ2enV4Rlh4c056czNOVFhuMTZsVzRnWWlXOTZ3MUZ5ZWRGKzgzeEcvMkZOR0NScFU0TmphbU1zbitPWjl4RTVSWHFkYURkUHBpYjZSV0N6dXdLRjlSeHFJMkFWTlFCd1FZSm9LMHdkQmVqbnF0RWlrUDNwZlA1MVhqVVRFU2wxMkZxSkVLeHNFb3JBUllERDQ0T05UZUlEN1lwc0VuclJ2UWZXQUkyZThXZkRhVFVTSXdKMGlCQ21GT3RPVUFIdlZNUHAvVFB3dllGVllGSXVQOGwrREJnd2RhYTJNaXF3YTBHZ1l3ZmVNbHRvdmJEZmg2YzF2SWdNWWNsaVNzS3Y0SVdGcjZWREh4dmxkdkJBSCsxc0ErY25sNVdZT1BtbXI5aXIrMWw5STBDZ3oweWpoWGpmSkowSlJPbm1leldibDE2NWF5ci81ZnF3Y0JOcjdJZmhqTXFLY3ZFU1NNNGVSY0Nhc1EzYkROT2JtS1BMZEdVR3Bac04yNGNVTkxCbTl6YXp1NGQrK2U2cXBOQkZhVHVVUzI2VTVkcHVSMUN4eUE3SjlkZHJNUnFsejRwd0xMWWF3eW1QZCsrLzJQQUR0MnVnY0d3cTlnQ0NkaFE5NkM2eFd3YTZqMWNldXErSTBFaFcwaThNQUlWSmZlTDNkL0RWRDhFS2kxMlA2LzJTMmpWL0VjY1ZCNTRPL2Vqei85SEdDcG9CQk10YTVyWE1YTHU1M0QxWEF3amhYd3Z2ditoNEJBWFZlNGJPdTNPM0NoeEYwOExpWkZHM2ZlbDE5OUc5Q0gzZkx5cXYyNE5jQjQ0TVJocGRLNzg4VTNDcHlLd3NDdzU5MHhtZlNwenNCdDBGcWMzdWQzdnRaaWd4V2NWWkNrbFZwU2lOMHczcTVFL2g5VEdNSVV1QTMrRVFBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG5leHBvcnQgY29uc3QgREFUQV9JTUFHRV9UUkFOU1BfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRSVcyTmtBQUlBQUFvQUFnZ0E5R2tBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmV4cG9ydCBjb25zdCBEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc1FBQUE3RUFaVXJEaHNBQUFBTlNVUkJWQmhYWXpoOCtQQi9BQWZmQTBuTlB1Q0xBQUFBQUVsRlRrU3VRbUNDJztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZFwiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1biwgaW5Gb2N1cyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBLZXlTdGF0ZSwgRXZlbnRLZXlDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7ICR3aW4sIGtleVNjb3BlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGJEaXNhYmVDbG9zZU9uRXNjID0gZmFsc2U7XG5cdHNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Ob25lO1xuXHRzQ3VycmVudEtleVNjb3BlID0gS2V5U3RhdGUuTm9uZTtcblxuXHR2aWV3TW9kZWxWaXNpYmlsaXR5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdG1vZGFsVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblxuXHR2aWV3TW9kZWxOYW1lID0gJyc7XG5cdHZpZXdNb2RlbE5hbWVzID0gW107XG5cdHZpZXdNb2RlbERvbSA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0c3RvcmVBbmRTZXRLZXlTY29wZSgpIHtcblx0XHR0aGlzLnNDdXJyZW50S2V5U2NvcGUgPSBrZXlTY29wZSgpO1xuXHRcdGtleVNjb3BlKHRoaXMuc0RlZmF1bHRLZXlTY29wZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZXN0b3JlS2V5U2NvcGUoKSB7XG5cdFx0a2V5U2NvcGUodGhpcy5zQ3VycmVudEtleVNjb3BlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHJlZ2lzdGVyUG9wdXBLZXlEb3duKCkge1xuXHRcdCR3aW4ub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiB0aGlzLm1vZGFsVmlzaWJpbGl0eSAmJiB0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdGlmICghdGhpcy5iRGlzYWJlQ2xvc2VPbkVzYyAmJiBFdmVudEtleUNvZGUuRXNjID09PSBldmVudC5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2NhbmNlbENvbW1hbmQnKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSBpZiAoRXZlbnRLZXlDb2RlLkJhY2tzcGFjZSA9PT0gZXZlbnQua2V5Q29kZSAmJiAhaW5Gb2N1cygpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXHR9XG5cblx0Y2FuY2VsQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cblx0Y2xvc2VDb21tYW5kKCkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdW5jdGlvblxufVxuIiwidmFyIE8gPSAnb2JqZWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09IE8gJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSBPICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gTyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09IE8gJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBTb2NpYWxTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZ29vZ2xlID0ge307XG5cdFx0dGhpcy50d2l0dGVyID0ge307XG5cdFx0dGhpcy5mYWNlYm9vayA9IHt9O1xuXHRcdHRoaXMuZHJvcGJveCA9IHt9O1xuXG5cdFx0Ly8gR29vZ2xlXG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5nb29nbGUuY2xpZW50SUQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5hcGlLZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS51c2VyTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5nb29nbGUubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5nb29nbGUudXNlck5hbWUoKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhID0ge307XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoRmFzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLnByZXZpZXcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZ29vZ2xlLnJlcXVpcmUgPSB7fTtcblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlLmNsaWVudFNldHRpbmdzID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiB0aGlzLmdvb2dsZS5lbmFibGVkKCkgJiYgKHRoaXMuZ29vZ2xlLmNhcGEuYXV0aCgpIHx8IHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5hcGlLZXlTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuZ29vZ2xlLmVuYWJsZWQoKSAmJiB0aGlzLmdvb2dsZS5jYXBhLmRyaXZlKCkpO1xuXG5cdFx0Ly8gRmFjZWJvb2tcblx0XHR0aGlzLmZhY2Vib29rLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcElEID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZmFjZWJvb2subG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5mYWNlYm9vay51c2VyTmFtZSgpKTtcblxuXHRcdC8vIFR3aXR0ZXJcblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lclNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d2l0dGVyLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnR3aXR0ZXIubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy50d2l0dGVyLnVzZXJOYW1lKCkpO1xuXG5cdFx0Ly8gRHJvcGJveFxuXHRcdHRoaXMuZHJvcGJveC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2xpZW50U2VjcmV0KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRTZWNyZXQnKSk7XG5cdFx0dGhpcy5nb29nbGUuYXBpS2V5KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVBcGlLZXknKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGgoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aEZhc3QoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoRmFzdCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmRyaXZlKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsRHJpdmUnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5wcmV2aWV3KCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsUHJldmlldycpKTtcblxuXHRcdHRoaXMuZmFjZWJvb2suZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0ZhY2Vib29rU29jaWFsJykpO1xuXHRcdHRoaXMuZmFjZWJvb2suYXBwSUQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0ZhY2Vib29rQXBwSUQnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBTZWNyZXQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0ZhY2Vib29rQXBwU2VjcmV0JykpO1xuXHRcdHRoaXMuZmFjZWJvb2suc3VwcG9ydGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1N1cHBvcnRlZEZhY2Vib29rU29jaWFsJykpO1xuXG5cdFx0dGhpcy50d2l0dGVyLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93VHdpdHRlclNvY2lhbCcpKTtcblx0XHR0aGlzLnR3aXR0ZXIuY29uc3VtZXJLZXkgPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUd2l0dGVyQ29uc3VtZXJLZXknKSk7XG5cdFx0dGhpcy50d2l0dGVyLmNvbnN1bWVyU2VjcmV0ID0ga28ub2JzZXJ2YWJsZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVHdpdHRlckNvbnN1bWVyU2VjcmV0JykpO1xuXG5cdFx0dGhpcy5kcm9wYm94LmVuYWJsZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dEcm9wYm94U29jaWFsJykpO1xuXHRcdHRoaXMuZHJvcGJveC5hcGlLZXkoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0Ryb3Bib3hBcGlLZXknKSk7XG5cdH1cblxuXHRhcHBlbmREcm9wYm94KCkge1xuXHRcdGlmICghd2luZG93LkRyb3Bib3ggJiYgdGhpcy5kcm9wYm94LmVuYWJsZWQoKSAmJiB0aGlzLmRyb3Bib3guYXBpS2V5KCkpIHtcblx0XHRcdGlmICghd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkcm9wYm94anMnKSkge1xuXHRcdFx0XHRjb25zdCBzY3JpcHQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cdFx0XHRcdHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG5cdFx0XHRcdHNjcmlwdC5zcmMgPSAnaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc3RhdGljL2FwaS8yL2Ryb3BpbnMuanMnO1xuXHRcdFx0XHQkKHNjcmlwdClcblx0XHRcdFx0XHQuYXR0cignaWQnLCAnZHJvcGJveGpzJylcblx0XHRcdFx0XHQuYXR0cignZGF0YS1hcHAta2V5JywgdGhpcy5kcm9wYm94LmFwaUtleSgpKTtcblxuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgU29jaWFsU3RvcmUoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvaW5kZXgtb2ZcIik7IiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBzdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdXG4gICAgfHwgKE5BVElWRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG4iLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXJcIik7IiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuVG9Ob2RlcyB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuY2xhc3MgQWJzdHJhY3RDb21wb25lbnQge1xuXHRkaXNwb3NhYmxlID0gW107XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmRpc3Bvc2FibGUuZm9yRWFjaCgoZnVuY1RvRGlzcG9zZSkgPT4ge1xuXHRcdFx0aWYgKGZ1bmNUb0Rpc3Bvc2UgJiYgZnVuY1RvRGlzcG9zZS5kaXNwb3NlKSB7XG5cdFx0XHRcdGZ1bmNUb0Rpc3Bvc2UuZGlzcG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBDbGFzc09iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlSUQgPSAnJ1xuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgY29tcG9uZW50RXhwb3J0SGVscGVyID0gKENsYXNzT2JqZWN0LCB0ZW1wbGF0ZUlEID0gJycpID0+ICh7XG5cdHRlbXBsYXRlOiB0ZW1wbGF0ZUlEID8geyBlbGVtZW50OiB0ZW1wbGF0ZUlEIH0gOiAnPGI+PC9iPicsXG5cdHZpZXdNb2RlbDoge1xuXHRcdGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuXHRcdFx0cGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXHRcdFx0cGFyYW1zLmVsZW1lbnQgPSBudWxsO1xuXG5cdFx0XHRpZiAoY29tcG9uZW50SW5mbyAmJiBjb21wb25lbnRJbmZvLmVsZW1lbnQpIHtcblx0XHRcdFx0cGFyYW1zLmNvbXBvbmVudCA9IGNvbXBvbmVudEluZm87XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50ID0gJChjb21wb25lbnRJbmZvLmVsZW1lbnQpO1xuXG5cdFx0XHRcdGkxOG5Ub05vZGVzKHBhcmFtcy5lbGVtZW50KTtcblxuXHRcdFx0XHRpZiAoIWlzVW5kKHBhcmFtcy5pbmxpbmUpICYmIGtvLnVud3JhcChwYXJhbXMuaW5saW5lKSkge1xuXHRcdFx0XHRcdHBhcmFtcy5lbGVtZW50LmNzcygnZGlzcGxheScsICdpbmxpbmUtYmxvY2snKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IENsYXNzT2JqZWN0KHBhcmFtcyk7XG5cdFx0fVxuXHR9XG59KTtcblxuZXhwb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgaXNGdW5jLCBpc0FycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFNJTVBMRV9IT09LUyA9IHt9LFxuXHRVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTID0gW10sXG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTID0gW107XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKG5hbWUsIGNhbGxiYWNrKSB7XG5cdGlmIChpc0Z1bmMoY2FsbGJhY2spKSB7XG5cdFx0aWYgKCFpc0FycmF5KFNJTVBMRV9IT09LU1tuYW1lXSkpIHtcblx0XHRcdFNJTVBMRV9IT09LU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNJTVBMRV9IT09LU1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0FycmF5PX0gYXJncyA9IFtdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Ib29rKG5hbWUsIGFyZ3MgPSBbXSkge1xuXHRpZiAoaXNBcnJheShTSU1QTEVfSE9PS1NbbmFtZV0pKSB7XG5cdFx0Xy5lYWNoKFNJTVBMRV9IT09LU1tuYW1lXSwgKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRjYWxsYmFjayguLi5hcmdzKTtcblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haW5TZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBTZXR0aW5ncy5zZXR0aW5nc0dldChuYW1lKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3Q9fSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gez9udW1iZXI9fSB0aW1lb3V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdGVSZXF1ZXN0KGNhbGxiYWNrLCBhY3Rpb24sIHBhcmFtZXRlcnMsIHRpbWVvdXQpIHtcblx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18pIHtcblx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLnJlbW90ZSgpLmRlZmF1bHRSZXF1ZXN0KGNhbGxiYWNrLCAnUGx1Z2luJyArIGFjdGlvbiwgcGFyYW1ldGVycywgdGltZW91dCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUpIHtcblx0VVNFUl9WSUVXX01PREVMU19IT09LUy5wdXNoKFtTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZV0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlKSB7XG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTLnB1c2goW1NldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBhZG1pblxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyhhZG1pbikge1xuXHRjb25zdCBLbm9pbiA9IHJlcXVpcmUoJ0tub2luL0tub2luJyk7XG5cdF8uZWFjaChhZG1pbiA/IEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTIDogVVNFUl9WSUVXX01PREVMU19IT09LUywgKHZpZXcpID0+IHtcblx0XHRLbm9pbi5hZGRTZXR0aW5nc1ZpZXdNb2RlbCh2aWV3WzBdLCB2aWV3WzFdLCB2aWV3WzJdLCB2aWV3WzNdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpblNlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzR2V0KHBsdWdpblNlY3Rpb24sIG5hbWUpIHtcblx0bGV0IHBsdWdpbnMgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnUGx1Z2lucycpO1xuXHRwbHVnaW5zID0gcGx1Z2lucyAmJiAhaXNVbmQocGx1Z2luc1twbHVnaW5TZWN0aW9uXSkgPyBwbHVnaW5zW3BsdWdpblNlY3Rpb25dIDogbnVsbDtcblx0cmV0dXJuIHBsdWdpbnMgPyAoaXNVbmQocGx1Z2luc1tuYW1lXSkgPyBudWxsIDogcGx1Z2luc1tuYW1lXSkgOiBudWxsO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIENvcmVBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jb3JlUmVhbCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jb3JlQ2hhbm5lbCA9IGtvLm9ic2VydmFibGUoJ3N0YWJsZScpO1xuXHRcdHRoaXMuY29yZVR5cGUgPSBrby5vYnNlcnZhYmxlKCdzdGFibGUnKTtcblx0XHR0aGlzLmNvcmVVcGRhdGFibGUgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuY29yZUFjY2VzcyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jb3JlV2FybmluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY29yZUNoZWNraW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblx0XHR0aGlzLmNvcmVVcGRhdGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cdFx0dGhpcy5jb3JlVmVyc2lvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvcmVSZW1vdGVSZWxlYXNlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb3JlVmVyc2lvbkNvbXBhcmUgPSBrby5vYnNlcnZhYmxlKC0yKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZUFkbWluU3RvcmUoKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYmluZC1jb250ZXh0Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIE5hdGl2ZUNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IChwYXRoW1RBUkdFVF0gPSB7fSk7XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXMobmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ3MgaW4gdGhpcyB2ZXJzaW9uXG4gICAgZWxzZSBpZiAob3B0aW9ucy53cmFwICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gd3JhcENvbnN0cnVjdG9yKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICBlbHNlIGlmIChQUk9UTyAmJiB0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gJ2Z1bmN0aW9uJykgcmVzdWx0UHJvcGVydHkgPSBiaW5kKEZ1bmN0aW9uLmNhbGwsIHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBoaWRlKHJlc3VsdFByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cblxuICAgIHRhcmdldFtrZXldID0gcmVzdWx0UHJvcGVydHk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhcyhwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIGhpZGUocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBwYXRoW1ZJUlRVQUxfUFJPVE9UWVBFXVtrZXldID0gc291cmNlUHJvcGVydHk7XG4gICAgICAvLyBleHBvcnQgcmVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgaWYgKG9wdGlvbnMucmVhbCAmJiB0YXJnZXRQcm90b3R5cGUgJiYgIXRhcmdldFByb3RvdHlwZVtrZXldKSBoaWRlKHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgfVxuICB9XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgaGlkZShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBleGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBGdW5jdGlvblByb3RvdHlwZVRvU3RyaW5nID0gRnVuY3Rpb25Qcm90b3R5cGUudG9TdHJpbmc7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIEZ1bmN0aW9uIGluc3RhbmNlcyBgLm5hbWVgIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi1pbnN0YW5jZXMtbmFtZVxuaWYgKERFU0NSSVBUT1JTICYmICEoTkFNRSBpbiBGdW5jdGlvblByb3RvdHlwZSkpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE5BTUUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZy5jYWxsKHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IpIHtcbiAgcmV0dXJuIHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgbmF0aXZlRnVuY3Rpb25Ub1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgVEVNUExBVEUgPSBTdHJpbmcobmF0aXZlRnVuY3Rpb25Ub1N0cmluZykuc3BsaXQoJ3RvU3RyaW5nJyk7XG5cbnNoYXJlZCgnaW5zcGVjdFNvdXJjZScsIGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gbmF0aXZlRnVuY3Rpb25Ub1N0cmluZy5jYWxsKGl0KTtcbn0pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdW5zYWZlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy51bnNhZmUgOiBmYWxzZTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMuZW51bWVyYWJsZSA6IGZhbHNlO1xuICB2YXIgbm9UYXJnZXRHZXQgPSBvcHRpb25zID8gISFvcHRpb25zLm5vVGFyZ2V0R2V0IDogZmFsc2U7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnICYmICFoYXModmFsdWUsICduYW1lJykpIGhpZGUodmFsdWUsICduYW1lJywga2V5KTtcbiAgICBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSkuc291cmNlID0gVEVNUExBVEUuam9pbih0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogJycpO1xuICB9XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIHNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIXVuc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gIH0gZWxzZSBpZiAoIW5vVGFyZ2V0R2V0ICYmIE9ba2V5XSkge1xuICAgIHNpbXBsZSA9IHRydWU7XG4gIH1cbiAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gIGVsc2UgaGlkZShPLCBrZXksIHZhbHVlKTtcbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgbmF0aXZlRnVuY3Rpb25Ub1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAodG9TdHJpbmcgIT09IE9iamVjdFByb3RvdHlwZS50b1N0cmluZykge1xuICByZWRlZmluZShPYmplY3RQcm90b3R5cGUsICd0b1N0cmluZycsIHRvU3RyaW5nLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmJ2BdfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmJ2BdfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChSRVBMQUNFLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciByZXBsYWNlciA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyByZXBsYWNlci5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogbmF0aXZlUmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVSZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcblxuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuXG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gbmF0aXZlUmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmxldCBfbW9tZW50ID0gbnVsbDtcbmxldCBfbW9tZW50Tm93ID0gMDtcblxuY29uc3QgdXBkYXRlTW9tZW50Tm93ID0gXy5kZWJvdW5jZShcblx0KCkgPT4ge1xuXHRcdF9tb21lbnQgPSBtb21lbnQoKTtcblx0fSxcblx0NTAwLFxuXHR0cnVlXG4pO1xuXG5jb25zdCB1cGRhdGVNb21lbnROb3dVbml4ID0gXy5kZWJvdW5jZShcblx0KCkgPT4ge1xuXHRcdF9tb21lbnROb3cgPSBtb21lbnQoKS51bml4KCk7XG5cdH0sXG5cdDUwMCxcblx0dHJ1ZVxuKTtcblxuLyoqXG4gKiBAcmV0dXJucyB7bW9tZW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9tZW50Tm93KCkge1xuXHR1cGRhdGVNb21lbnROb3coKTtcblx0cmV0dXJuIF9tb21lbnQgfHwgbW9tZW50KCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudE5vd1VuaXgoKSB7XG5cdHVwZGF0ZU1vbWVudE5vd1VuaXgoKTtcblx0cmV0dXJuIF9tb21lbnROb3cgfHwgMDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gZGF0ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFN1YnRyYWN0Rm9ybWF0RGF0ZUhlbHBlcihkYXRlKSB7XG5cdHJldHVybiBtb21lbnROb3coKVxuXHRcdC5jbG9uZSgpXG5cdFx0LnN1YnRyYWN0KGRhdGUsICdkYXlzJylcblx0XHQuZm9ybWF0KCdZWVlZLk1NLkREJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IG1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEN1c3RvbVNob3J0RGF0ZShtKSB7XG5cdGNvbnN0IG5vdyA9IG1vbWVudE5vdygpO1xuXHRpZiAobSAmJiBub3cpIHtcblx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdGNhc2UgNCA+PSBub3cuZGlmZihtLCAnaG91cnMnKTpcblx0XHRcdFx0cmV0dXJuIG0uZnJvbU5vdygpO1xuXHRcdFx0Y2FzZSBub3cuZm9ybWF0KCdMJykgPT09IG0uZm9ybWF0KCdMJyk6XG5cdFx0XHRcdHJldHVybiBpMThuKCdNRVNTQUdFX0xJU1QvVE9EQVlfQVQnLCB7XG5cdFx0XHRcdFx0VElNRTogbS5mb3JtYXQoJ0xUJylcblx0XHRcdFx0fSk7XG5cdFx0XHRjYXNlIG5vd1xuXHRcdFx0XHQuY2xvbmUoKVxuXHRcdFx0XHQuc3VidHJhY3QoMSwgJ2RheXMnKVxuXHRcdFx0XHQuZm9ybWF0KCdMJykgPT09IG0uZm9ybWF0KCdMJyk6XG5cdFx0XHRcdHJldHVybiBpMThuKCdNRVNTQUdFX0xJU1QvWUVTVEVSREFZX0FUJywge1xuXHRcdFx0XHRcdFRJTUU6IG0uZm9ybWF0KCdMVCcpXG5cdFx0XHRcdH0pO1xuXHRcdFx0Y2FzZSBub3cueWVhcigpID09PSBtLnllYXIoKTpcblx0XHRcdFx0cmV0dXJuIG0uZm9ybWF0KCdEIE1NTS4nKTtcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbSA/IG0uZm9ybWF0KCdMTCcpIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVTdGFtcEluVVRDXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0U3RyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KHRpbWVTdGFtcEluVVRDLCBmb3JtYXRTdHIpIHtcblx0bGV0IG0gPSBudWxsLFxuXHRcdHJlc3VsdCA9ICcnO1xuXG5cdGNvbnN0IG5vdyA9IG1vbWVudE5vd1VuaXgoKTtcblxuXHR0aW1lU3RhbXBJblVUQyA9IDAgPCB0aW1lU3RhbXBJblVUQyA/IHRpbWVTdGFtcEluVVRDIDogMCA9PT0gdGltZVN0YW1wSW5VVEMgPyBub3cgOiAwO1xuXHR0aW1lU3RhbXBJblVUQyA9IG5vdyA8IHRpbWVTdGFtcEluVVRDID8gbm93IDogdGltZVN0YW1wSW5VVEM7XG5cblx0bSA9IDAgPCB0aW1lU3RhbXBJblVUQyA/IG1vbWVudC51bml4KHRpbWVTdGFtcEluVVRDKSA6IG51bGw7XG5cblx0aWYgKG0gJiYgMTk3MCA9PT0gbS55ZWFyKCkpIHtcblx0XHRtID0gbnVsbDtcblx0fVxuXG5cdGlmIChtKSB7XG5cdFx0c3dpdGNoIChmb3JtYXRTdHIpIHtcblx0XHRcdGNhc2UgJ0ZST01OT1cnOlxuXHRcdFx0XHRyZXN1bHQgPSBtLmZyb21Ob3coKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdTSE9SVCc6XG5cdFx0XHRcdHJlc3VsdCA9IGZvcm1hdEN1c3RvbVNob3J0RGF0ZShtKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdGVUxMJzpcblx0XHRcdFx0cmVzdWx0ID0gbS5mb3JtYXQoJ0xMTCcpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJlc3VsdCA9IG0uZm9ybWF0KGZvcm1hdFN0cik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9tZW50VG9Ob2RlKGVsZW1lbnQpIHtcblx0bGV0IGtleSA9ICcnLFxuXHRcdHRpbWUgPSAwO1xuXHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdHRpbWUgPSAkZWwuZGF0YSgnbW9tZW50LXRpbWUnKTtcblx0aWYgKHRpbWUpIHtcblx0XHRrZXkgPSAkZWwuZGF0YSgnbW9tZW50LWZvcm1hdCcpO1xuXHRcdGlmIChrZXkpIHtcblx0XHRcdCRlbC50ZXh0KGZvcm1hdCh0aW1lLCBrZXkpKTtcblx0XHR9XG5cblx0XHRrZXkgPSAkZWwuZGF0YSgnbW9tZW50LWZvcm1hdC10aXRsZScpO1xuXHRcdGlmIChrZXkpIHtcblx0XHRcdCRlbC5hdHRyKCd0aXRsZScsIGZvcm1hdCh0aW1lLCBrZXkpKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZCgpIHtcblx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0JCgnLm1vbWVudCcsIHdpbmRvdy5kb2N1bWVudCkuZWFjaCgoaW5kZXgsIGl0ZW0pID0+IHtcblx0XHRcdG1vbWVudFRvTm9kZShpdGVtKTtcblx0XHR9KTtcblx0fSk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5oYXNoZXI7IiwiLyoqXG4gKiBAcmV0dXJucyB7QXBwQWRtaW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHAoKSB7XG5cdHJldHVybiByZXF1aXJlKCdBcHAvQWRtaW4nKS5kZWZhdWx0O1xufVxuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZXItYWdlbnQnKTtcblxudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBzY2hlZHVsZXIoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGhhbmRsZXIgPT0gJ2Z1bmN0aW9uJyA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGhhbmRsZXIsIHRpbWVvdXQpO1xuICB9O1xufTtcblxuLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogTVNJRSB9LCB7XG4gIC8vIGBzZXRUaW1lb3V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgLy8gYHNldEludGVydmFsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0aW50ZXJ2YWxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIHN0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV1cbiAgICB8fCAoTkFUSVZFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIExhbmd1YWdlU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmxhbmd1YWdlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5sYW5ndWFnZXNBZG1pbiA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlID0ga29cblx0XHRcdC5vYnNlcnZhYmxlKCcnKVxuXHRcdFx0LmV4dGVuZCh7IGxpbWl0ZWRMaXN0OiB0aGlzLmxhbmd1YWdlcyB9KVxuXHRcdFx0LmV4dGVuZCh7IHJldmVyc2libGU6IHRydWUgfSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlQWRtaW4gPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUoJycpXG5cdFx0XHQuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMubGFuZ3VhZ2VzQWRtaW4gfSlcblx0XHRcdC5leHRlbmQoeyByZXZlcnNpYmxlOiB0cnVlIH0pO1xuXG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZUFkbWluID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHRjb25zdCBhTGFuZ3VhZ2VzID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2xhbmd1YWdlcycpLFxuXHRcdFx0YUxhbmd1YWdlc0FkbWluID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2xhbmd1YWdlc0FkbWluJyk7XG5cblx0XHR0aGlzLmxhbmd1YWdlcyhpc0FycmF5KGFMYW5ndWFnZXMpID8gYUxhbmd1YWdlcyA6IFtdKTtcblx0XHR0aGlzLmxhbmd1YWdlc0FkbWluKGlzQXJyYXkoYUxhbmd1YWdlc0FkbWluKSA/IGFMYW5ndWFnZXNBZG1pbiA6IFtdKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2UoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0xhbmd1YWdlJykpO1xuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbihTZXR0aW5ncy5zZXR0aW5nc0dldCgnTGFuZ3VhZ2VBZG1pbicpKTtcblxuXHRcdHRoaXMudXNlckxhbmd1YWdlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyTGFuZ3VhZ2UnKSk7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2VBZG1pbihTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckxhbmd1YWdlQWRtaW4nKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IExhbmd1YWdlU3RvcmUoKTtcbiIsIi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyKGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMS4zJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxudmFyIERhdGVQcm90b3R5cGUgPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIG5hdGl2ZURhdGVUb1N0cmluZyA9IERhdGVQcm90b3R5cGVbVE9fU1RSSU5HXTtcbnZhciBnZXRUaW1lID0gRGF0ZVByb3RvdHlwZS5nZXRUaW1lO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlZGVmaW5lKERhdGVQcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gbmF0aXZlRGF0ZVRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxudmFyIG5hdGl2ZUpvaW4gPSBbXS5qb2luO1xuXG52YXIgRVMzX1NUUklOR1MgPSBJbmRleGVkT2JqZWN0ICE9IE9iamVjdDtcbnZhciBTTE9QUFlfTUVUSE9EID0gc2xvcHB5QXJyYXlNZXRob2QoJ2pvaW4nLCAnLCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmpvaW5cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEVTM19TVFJJTkdTIHx8IFNMT1BQWV9NRVRIT0QgfSwge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBuYXRpdmVKb2luLmNhbGwodG9JbmRleGVkT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuIiwidmFyIE8gPSAnb2JqZWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09IE8gJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSBPICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gTyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09IE8gJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCB7IEFic3RyYWN0QXBwU3RvcmUgfSBmcm9tICdTdG9yZXMvQWJzdHJhY3RBcHAnO1xuXG5jbGFzcyBBcHBBZG1pblN0b3JlIGV4dGVuZHMgQWJzdHJhY3RBcHBTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckRvbWFpbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy53ZWFrUGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5kYXRhRm9sZGVyQWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHRzdXBlci5wb3B1bGF0ZSgpO1xuXG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyTGFuZ3VhZ2UoISFzZXR0aW5nc0dldCgnRGV0ZXJtaW5lVXNlckxhbmd1YWdlJykpO1xuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckRvbWFpbighIXNldHRpbmdzR2V0KCdEZXRlcm1pbmVVc2VyRG9tYWluJykpO1xuXG5cdFx0dGhpcy53ZWFrUGFzc3dvcmQoISFzZXR0aW5nc0dldCgnV2Vha1Bhc3N3b3JkJykpO1xuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzKCEhc2V0dGluZ3NHZXQoJ1VzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcycpKTtcblxuXHRcdGlmIChzZXR0aW5nc0dldCgnQXV0aCcpKSB7XG5cdFx0XHQkLmdldCgnLi9kYXRhL1ZFUlNJT04/JyArIHdpbmRvdy5NYXRoLnJhbmRvbSgpKS50aGVuKCgpID0+IHRoaXMuZGF0YUZvbGRlckFjY2Vzcyh0cnVlKSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBcHBBZG1pblN0b3JlKCk7XG4iLCJ2YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBUb0ludGVnZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbnRlZ2VyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNOYU4oYXJndW1lbnQgPSArYXJndW1lbnQpID8gMCA6IChhcmd1bWVudCA+IDAgPyBmbG9vciA6IGNlaWwpKGFyZ3VtZW50KTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBhZGRyZXNzcGFyc2VyIGZyb20gJ2VtYWlsanMtYWRkcmVzc3BhcnNlcic7XG5pbXBvcnQgeyB0cmltLCBlbmNvZGVIdG1sLCBpc05vbkVtcHR5QXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5jbGFzcyBFbWFpbE1vZGVsIHtcblx0ZW1haWwgPSAnJztcblx0bmFtZSA9ICcnO1xuXHRka2ltU3RhdHVzID0gJyc7XG5cdGRraW1WYWx1ZSA9ICcnO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZz19IGVtYWlsID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBka2ltU3RhdHVzID0gJ25vbmUnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gZGtpbVZhbHVlID0gJydcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVtYWlsID0gJycsIG5hbWUgPSAnJywgZGtpbVN0YXR1cyA9ICdub25lJywgZGtpbVZhbHVlID0gJycpIHtcblx0XHR0aGlzLmVtYWlsID0gZW1haWw7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHR0aGlzLmRraW1TdGF0dXMgPSBka2ltU3RhdHVzO1xuXHRcdHRoaXMuZGtpbVZhbHVlID0gZGtpbVZhbHVlO1xuXG5cdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSB7QWpheEpzb25FbWFpbH0ganNvblxuXHQgKiBAcmV0dXJucyB7P0VtYWlsTW9kZWx9XG5cdCAqL1xuXHRzdGF0aWMgbmV3SW5zdGFuY2VGcm9tSnNvbihqc29uKSB7XG5cdFx0Y29uc3QgZW1haWwgPSBuZXcgRW1haWxNb2RlbCgpO1xuXHRcdHJldHVybiBlbWFpbC5pbml0QnlKc29uKGpzb24pID8gZW1haWwgOiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5lbWFpbCA9ICcnO1xuXHRcdHRoaXMubmFtZSA9ICcnO1xuXG5cdFx0dGhpcy5ka2ltU3RhdHVzID0gJ25vbmUnO1xuXHRcdHRoaXMuZGtpbVZhbHVlID0gJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHR2YWxpZGF0ZSgpIHtcblx0XHRyZXR1cm4gJycgIT09IHRoaXMubmFtZSB8fCAnJyAhPT0gdGhpcy5lbWFpbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHdpdGhvdXROYW1lID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGhhc2god2l0aG91dE5hbWUgPSBmYWxzZSkge1xuXHRcdHJldHVybiAnIycgKyAod2l0aG91dE5hbWUgPyAnJyA6IHRoaXMubmFtZSkgKyAnIycgKyB0aGlzLmVtYWlsICsgJyMnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0Y2xlYXJEdXBsaWNhdGVOYW1lKCkge1xuXHRcdGlmICh0aGlzLm5hbWUgPT09IHRoaXMuZW1haWwpIHtcblx0XHRcdHRoaXMubmFtZSA9ICcnO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRzZWFyY2gocXVlcnkpIHtcblx0XHRyZXR1cm4gLTEgPCAodGhpcy5uYW1lICsgJyAnICsgdGhpcy5lbWFpbCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWpheEpzb25FbWFpbH0gb0pzb25FbWFpbFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRCeUpzb24oanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZTtcblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L0VtYWlsJyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLm5hbWUgPSB0cmltKGpzb24uTmFtZSk7XG5cdFx0XHR0aGlzLmVtYWlsID0gdHJpbShqc29uLkVtYWlsKTtcblx0XHRcdHRoaXMuZGtpbVN0YXR1cyA9IHRyaW0oanNvbi5Ea2ltU3RhdHVzIHx8ICcnKTtcblx0XHRcdHRoaXMuZGtpbVZhbHVlID0gdHJpbShqc29uLkRraW1WYWx1ZSB8fCAnJyk7XG5cblx0XHRcdHJlc3VsdCA9ICcnICE9PSB0aGlzLmVtYWlsO1xuXHRcdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJpZW5kbHlWaWV3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBXaXRoTGluayA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHVzZUVuY29kZUh0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dG9MaW5lKGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rID0gZmFsc2UsIHVzZUVuY29kZUh0bWwgPSBmYWxzZSkge1xuXHRcdGxldCByZXN1bHQgPSAnJztcblx0XHRpZiAoJycgIT09IHRoaXMuZW1haWwpIHtcblx0XHRcdGlmIChmcmllbmRseVZpZXcgJiYgJycgIT09IHRoaXMubmFtZSkge1xuXHRcdFx0XHRyZXN1bHQgPSB3cmFwV2l0aExpbmtcblx0XHRcdFx0XHQ/ICc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0ICAnP3RvPScgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdCAgJ1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHQgIGVuY29kZUh0bWwodGhpcy5uYW1lKSArXG5cdFx0XHRcdFx0ICAnPC9hPidcblx0XHRcdFx0XHQ6IHVzZUVuY29kZUh0bWxcblx0XHRcdFx0XHQ/IGVuY29kZUh0bWwodGhpcy5uYW1lKVxuXHRcdFx0XHRcdDogdGhpcy5uYW1lO1xuXHRcdFx0XHQvLyByZXN1bHQgPSB3cmFwV2l0aExpbmsgPyAnPGEgaHJlZj1cIm1haWx0bzonICsgZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHQvLyBcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArIGVuY29kZUh0bWwodGhpcy5uYW1lKSArICc8L2E+JyA6ICh1c2VFbmNvZGVIdG1sID8gZW5jb2RlSHRtbCh0aGlzLm5hbWUpIDogdGhpcy5uYW1lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuZW1haWw7XG5cdFx0XHRcdGlmICgnJyAhPT0gdGhpcy5uYW1lKSB7XG5cdFx0XHRcdFx0aWYgKHdyYXBXaXRoTGluaykge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID1cblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnKSArXG5cdFx0XHRcdFx0XHRcdCc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdFx0Jz90bz0nICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdFx0XHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHJlc3VsdCkgK1xuXHRcdFx0XHRcdFx0XHQnPC9hPicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKCc+Jyk7XG5cdFx0XHRcdFx0XHQvLyByZXN1bHQgPSBlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcpICsgJzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHQvLyBcdGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0XHRcdC8vIFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbChyZXN1bHQpICtcblx0XHRcdFx0XHRcdC8vIFx0JzwvYT4nICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbCgnPicpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSAnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgcmVzdWx0ICsgJz4nO1xuXHRcdFx0XHRcdFx0aWYgKHVzZUVuY29kZUh0bWwpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gZW5jb2RlSHRtbChyZXN1bHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh3cmFwV2l0aExpbmspIHtcblx0XHRcdFx0XHRyZXN1bHQgPVxuXHRcdFx0XHRcdFx0JzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdCc8L2E+Jztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgc3BsaXRFbWFpbExpbmUobGluZSkge1xuXHRcdGNvbnN0IHBhcnNlZFJlc3VsdCA9IGFkZHJlc3NwYXJzZXIobGluZSk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShwYXJzZWRSZXN1bHQpKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHRcdGxldCBleGlzdHMgPSBmYWxzZTtcblx0XHRcdHBhcnNlZFJlc3VsdC5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZHJlc3MgPSBpdGVtLmFkZHJlc3Ncblx0XHRcdFx0XHQ/IG5ldyBFbWFpbE1vZGVsKGl0ZW0uYWRkcmVzcy5yZXBsYWNlKC9eWzxdKyguKilbPl0rJC9nLCAnJDEnKSwgaXRlbS5uYW1lIHx8ICcnKVxuXHRcdFx0XHRcdDogbnVsbDtcblxuXHRcdFx0XHRpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmVtYWlsKSB7XG5cdFx0XHRcdFx0ZXhpc3RzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGFkZHJlc3MgPyBhZGRyZXNzLnRvTGluZShmYWxzZSkgOiBpdGVtLm5hbWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBleGlzdHMgPyByZXN1bHQgOiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c3RhdGljIHBhcnNlRW1haWxMaW5lKGxpbmUpIHtcblx0XHRjb25zdCBwYXJzZWRSZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGxpbmUpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocGFyc2VkUmVzdWx0KSkge1xuXHRcdFx0cmV0dXJuIF8uY29tcGFjdChcblx0XHRcdFx0Xy5tYXAocGFyc2VkUmVzdWx0LCAoaXRlbSkgPT5cblx0XHRcdFx0XHRpdGVtLmFkZHJlc3MgPyBuZXcgRW1haWxNb2RlbChpdGVtLmFkZHJlc3MucmVwbGFjZSgvXls8XSsoLiopWz5dKyQvZywgJyQxJyksIGl0ZW0ubmFtZSB8fCAnJykgOiBudWxsXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbEFkZHJlc3Ncblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRwYXJzZShlbWFpbEFkZHJlc3MpIHtcblx0XHRlbWFpbEFkZHJlc3MgPSB0cmltKGVtYWlsQWRkcmVzcyk7XG5cdFx0aWYgKCcnID09PSBlbWFpbEFkZHJlc3MpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGVtYWlsQWRkcmVzcyk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShyZXN1bHQpICYmIHJlc3VsdFswXSkge1xuXHRcdFx0dGhpcy5uYW1lID0gcmVzdWx0WzBdLm5hbWUgfHwgJyc7XG5cdFx0XHR0aGlzLmVtYWlsID0gcmVzdWx0WzBdLmFkZHJlc3MgfHwgJyc7XG5cdFx0XHR0aGlzLmNsZWFyRHVwbGljYXRlTmFtZSgpO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0IHsgRW1haWxNb2RlbCwgRW1haWxNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQsIHRyaW0sIHBJbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0SW5wdXQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSB8fCAnJztcblx0XHR0aGlzLnNpemUgPSBwYXJhbXMuc2l6ZSB8fCAwO1xuXHRcdHRoaXMubGFiZWwgPSBwYXJhbXMubGFiZWwgfHwgJyc7XG5cdFx0dGhpcy5wcmVMYWJlbCA9IHBhcmFtcy5wcmVMYWJlbCB8fCAnJztcblx0XHR0aGlzLmVuYWJsZSA9IGlzVW5kKHBhcmFtcy5lbmFibGUpID8gdHJ1ZSA6IHBhcmFtcy5lbmFibGU7XG5cdFx0dGhpcy50cmlnZ2VyID0gcGFyYW1zLnRyaWdnZXIgJiYgcGFyYW1zLnRyaWdnZXIuc3Vic2NyaWJlID8gcGFyYW1zLnRyaWdnZXIgOiBudWxsO1xuXHRcdHRoaXMucGxhY2Vob2xkZXIgPSBwYXJhbXMucGxhY2Vob2xkZXIgfHwgJyc7XG5cblx0XHR0aGlzLmxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLmxhYmVsKTtcblx0XHR0aGlzLnByZUxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLnByZUxhYmVsKTtcblx0XHR0aGlzLnRyaWdnZXJlZCA9ICFpc1VuZChwYXJhbXMudHJpZ2dlcikgJiYgISF0aGlzLnRyaWdnZXI7XG5cblx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5jbGFzc05hbWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBzaXplID0ga28udW53cmFwKHRoaXMuc2l6ZSksXG5cdFx0XHRcdHN1ZmZpeFZhbHVlID0gdGhpcy50cmlnZ2VyID8gJyAnICsgdHJpbSgnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlci1pbnB1dCAnICsgdGhpcy5jbGFzc0ZvclRyaWdnZXIoKSkgOiAnJztcblx0XHRcdHJldHVybiAoMCA8IHNpemUgPyAnc3BhbicgKyBzaXplIDogJycpICsgc3VmZml4VmFsdWU7XG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzVW5kKHBhcmFtcy53aWR0aCkgJiYgcGFyYW1zLmVsZW1lbnQpIHtcblx0XHRcdHBhcmFtcy5lbGVtZW50LmZpbmQoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYScpLmNzcygnd2lkdGgnLCBwYXJhbXMud2lkdGgpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKHRoaXMuY2xhc3NOYW1lKTtcblxuXHRcdGlmICh0aGlzLnRyaWdnZXIpIHtcblx0XHRcdHRoaXMuc2V0VHJpZ2dlclN0YXRlKHRoaXMudHJpZ2dlcigpKTtcblxuXHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy50cmlnZ2VyLnN1YnNjcmliZSh0aGlzLnNldFRyaWdnZXJTdGF0ZSwgdGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHNldFRyaWdnZXJTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignc3VjY2VzcycpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJ2Vycm9yJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJycpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RJbnB1dCwgQWJzdHJhY3RJbnB1dCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgQ2FwYSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQ2FwYUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFkZGl0aW9uYWxBY2NvdW50cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuaWRlbnRpdGllcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ3JhdmF0YXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRUaHVtYm5haWxzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmlsdGVycyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGhlbWVzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnVzZXJCYWNrZ3JvdW5kID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5vcGVuUEdQID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoRm9yY2UgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlbXBsYXRlcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5hZGRpdGlvbmFsQWNjb3VudHMoU2V0dGluZ3MuY2FwYShDYXBhLkFkZGl0aW9uYWxBY2NvdW50cykpO1xuXHRcdHRoaXMuaWRlbnRpdGllcyhTZXR0aW5ncy5jYXBhKENhcGEuSWRlbnRpdGllcykpO1xuXHRcdHRoaXMuZ3JhdmF0YXIoU2V0dGluZ3MuY2FwYShDYXBhLkdyYXZhdGFyKSk7XG5cdFx0dGhpcy5hdHRhY2htZW50VGh1bWJuYWlscyhTZXR0aW5ncy5jYXBhKENhcGEuQXR0YWNobWVudFRodW1ibmFpbHMpKTtcblx0XHR0aGlzLnNpZXZlKFNldHRpbmdzLmNhcGEoQ2FwYS5TaWV2ZSkpO1xuXHRcdHRoaXMuZmlsdGVycyhTZXR0aW5ncy5jYXBhKENhcGEuRmlsdGVycykpO1xuXHRcdHRoaXMudGhlbWVzKFNldHRpbmdzLmNhcGEoQ2FwYS5UaGVtZXMpKTtcblx0XHR0aGlzLnVzZXJCYWNrZ3JvdW5kKFNldHRpbmdzLmNhcGEoQ2FwYS5Vc2VyQmFja2dyb3VuZCkpO1xuXHRcdHRoaXMub3BlblBHUChTZXR0aW5ncy5jYXBhKENhcGEuT3BlblBHUCkpO1xuXHRcdHRoaXMudHdvRmFjdG9yQXV0aChTZXR0aW5ncy5jYXBhKENhcGEuVHdvRmFjdG9yKSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoRm9yY2UoU2V0dGluZ3MuY2FwYShDYXBhLlR3b0ZhY3RvckZvcmNlKSk7XG5cdFx0dGhpcy50ZW1wbGF0ZXMoU2V0dGluZ3MuY2FwYShDYXBhLlRlbXBsYXRlcykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDYXBhQWRtaW5TdG9yZSgpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgUGFja2FnZUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnBhY2thZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnBhY2thZ2VzLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwIH0pO1xuXG5cdFx0dGhpcy5wYWNrYWdlc1JlYWwgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMucGFja2FnZXNNYWluVXBkYXRhYmxlID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGFja2FnZUFkbWluU3RvcmUoKTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGhpZGUoZ2xvYmFsLCBrZXksIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCJ2YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciBvYmplY3RIYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQKSB7XG4gIHZhciBzdG9yZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHZhciB3bWdldCA9IHN0b3JlLmdldDtcbiAgdmFyIHdtaGFzID0gc3RvcmUuaGFzO1xuICB2YXIgd21zZXQgPSBzdG9yZS5zZXQ7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICB3bXNldC5jYWxsKHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaGlkZShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgbmF0aXZlVG9TdHJpbmcgPSBSZWdFeHBQcm90b3R5cGVbVE9fU1RSSU5HXTtcblxudmFyIE5PVF9HRU5FUklDID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlVG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxudmFyIElOQ09SUkVDVF9OQU1FID0gbmF0aXZlVG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkc7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICByZWRlZmluZShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHAgPSBTdHJpbmcoUi5zb3VyY2UpO1xuICAgIHZhciByZiA9IFIuZmxhZ3M7XG4gICAgdmFyIGYgPSBTdHJpbmcocmYgPT09IHVuZGVmaW5lZCAmJiBSIGluc3RhbmNlb2YgUmVnRXhwICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpID8gZmxhZ3MuY2FsbChSKSA6IHJmKTtcbiAgICByZXR1cm4gJy8nICsgcCArICcvJyArIGY7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwiLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5tb21lbnQ7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cucHJvZ3Jlc3NKczsiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0KTtcbiAgICB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufTtcblxuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuLy8gbGV0IHJhaW5sb29wQ2FjaGVzID0gd2luZG93LmNhY2hlcyAmJiB3aW5kb3cuY2FjaGVzLm9wZW4gPyB3aW5kb3cuY2FjaGVzIDogbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3NyY30gc3JjXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFzeW5jID0gZmFsc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gamFzc2woc3JjLCBhc3luYyA9IGZhbHNlKSB7XG5cdGlmICghd2luZG93LlByb21pc2UgfHwgIXdpbmRvdy5Qcm9taXNlLmFsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignUHJvbWlzZXMgYXJlIG5vdCBhdmFpbGFibGUgeW91ciBlbnZpcm9ubWVudC4nKTtcblx0fVxuXG5cdGlmICghc3JjKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdzcmMgc2hvdWxkIG5vdCBiZSBlbXB0eS4nKTtcblx0fVxuXG5cdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cblx0XHRlbGVtZW50Lm9ubG9hZCA9ICgpID0+IHtcblx0XHRcdHJlc29sdmUoc3JjKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5vbmVycm9yID0gKCkgPT4ge1xuXHRcdFx0cmVqZWN0KG5ldyBFcnJvcihzcmMpKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5hc3luYyA9IHRydWUgPT09IGFzeW5jO1xuXHRcdGVsZW1lbnQuc3JjID0gc3JjO1xuXG5cdFx0d2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdH0pIC8qIC50aGVuKChzKSA9PiB7XG5cblx0XHRjb25zdCBmb3VuZCA9IHMgJiYgcmFpbmxvb3BDYWNoZXMgPyBzLm1hdGNoKC9yYWlubG9vcFxcL3ZcXC8oW15cXC9dKylcXC9zdGF0aWNcXC8vKSA6IG51bGw7XG5cdFx0aWYgKGZvdW5kICYmIGZvdW5kWzFdKVxuXHRcdHtcblx0XHRcdHJhaW5sb29wQ2FjaGVzLm9wZW4oJ3JhaW5sb29wLW9mZmxpbmUtJyArIGZvdW5kWzFdKS50aGVuKFxuXHRcdFx0XHQoY2FjaGUpID0+IGNhY2hlLmFkZChzKVxuXHRcdFx0KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJhaW5sb29wQ2FjaGVzID0gbnVsbDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzO1xuXHR9KSovO1xufVxuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG4iLCIvLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBTVEFUSUMgPyBpdCA6IGl0LnByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShpdCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXIoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlc1wiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgVGhlbWVTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudGhlbWVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnRoZW1lQmFja2dyb3VuZE5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRoZW1lQmFja2dyb3VuZEhhc2ggPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMudGhlbWUgPSBrby5vYnNlcnZhYmxlKCcnKS5leHRlbmQoeyBsaW1pdGVkTGlzdDogdGhpcy50aGVtZXMgfSk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHRjb25zdCB0aGVtZXMgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndGhlbWVzJyk7XG5cblx0XHR0aGlzLnRoZW1lcyhpc0FycmF5KHRoZW1lcykgPyB0aGVtZXMgOiBbXSk7XG5cdFx0dGhpcy50aGVtZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVGhlbWUnKSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmROYW1lKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyQmFja2dyb3VuZE5hbWUnKSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmRIYXNoKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyQmFja2dyb3VuZEhhc2gnKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFRoZW1lU3RvcmUoKTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIFBsdWdpbkFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnBsdWdpbnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMucGx1Z2lucy5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblx0XHR0aGlzLnBsdWdpbnMuZXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGx1Z2luQWRtaW5TdG9yZSgpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgTGljZW5zZUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmxpY2Vuc2luZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubGljZW5zaW5nUHJvY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubGljZW5zZVZhbGlkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5saWNlbnNlRXhwaXJlZCA9IGtvLm9ic2VydmFibGUoMCk7XG5cdFx0dGhpcy5saWNlbnNlRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubGljZW5zZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTGljZW5zZUFkbWluU3RvcmUoKTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIHNwbGl0ID0gJycuc3BsaXQ7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlci1hZ2VudCcpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgJGZldGNoID0gZ2xvYmFsLmZldGNoO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyO1xuXG52YXIgRk9SQ0VEID0gaXNGb3JjZWQoUFJPTUlTRSwgZnVuY3Rpb24gKCkge1xuICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgdmFyIHByb21pc2UgPSBQcm9taXNlQ29uc3RydWN0b3IucmVzb2x2ZSgxKTtcbiAgdmFyIGVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtTUEVDSUVTXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICB9O1xuICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gIHJldHVybiAhKChJU19OT0RFIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJylcbiAgICAmJiAoIUlTX1BVUkUgfHwgcHJvbWlzZVsnZmluYWxseSddKVxuICAgICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZVxuICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAvLyB3ZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMSk7XG59KTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSBGT1JDRUQgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSlbJ2NhdGNoJ10oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gc3RhdGUucmVhY3Rpb25zO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBvayA9IHN0YXRlLnN0YXRlID09IEZVTEZJTExFRDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBjaGFpbltpbmRleCsrXTtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlLCBzdGF0ZSk7XG4gICAgICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLnJlYWN0aW9ucyA9IFtdO1xuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHByb21pc2UsIHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHByb21pc2UsIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShwcm9taXNlLCBzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBwcm9taXNlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCBwcm9taXNlLCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHByb21pc2UsIHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkocHJvbWlzZSwgc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QocHJvbWlzZSwgeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRCkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgdGhpcywgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCB0aGlzLCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdCh0aGlzLCBzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogW10sXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHtcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVhY3Rpb25zLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHN0YXRlLnN0YXRlICE9IFBFTkRJTkcpIG5vdGlmeSh0aGlzLCBzdGF0ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmNhdGNoXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgcHJvbWlzZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgcHJvbWlzZSwgc3RhdGUpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICAvLyB3cmFwIGZldGNoIHJlc3VsdFxuICBpZiAoIUlTX1BVUkUgJiYgdHlwZW9mICRmZXRjaCA9PSAnZnVuY3Rpb24nKSAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGZldGNoOiBmdW5jdGlvbiBmZXRjaChpbnB1dCkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKFByb21pc2VDb25zdHJ1Y3RvciwgJGZldGNoLmFwcGx5KGdsb2JhbCwgYXJndW1lbnRzKSk7XG4gICAgfVxuICB9KTtcbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBQcm9taXNlOiBQcm9taXNlQ29uc3RydWN0b3Jcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UsIGZhbHNlLCB0cnVlKTtcbnNldFNwZWNpZXMoUFJPTUlTRSk7XG5cblByb21pc2VXcmFwcGVyID0gcGF0aFtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBgUHJvbWlzZS5yZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlamVjdFxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICBjYXBhYmlsaXR5LnJlamVjdC5jYWxsKHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRUQgfSwge1xuICAvLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShJU19QVVJFICYmIHRoaXMgPT09IFByb21pc2VXcmFwcGVyID8gUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICAvLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUZ1bmN0aW9uKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgICRwcm9taXNlUmVzb2x2ZS5jYWxsKEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gYFByb21pc2UucmFjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucmFjZVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhRnVuY3Rpb24oQy5yZXNvbHZlKTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgICRwcm9taXNlUmVzb2x2ZS5jYWxsKEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgUFJFRkVSUkVEX1NUUklORykge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaW5wdXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzaGFyZWQoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIFN0cmluZyhrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyAoKytpZCArIHBvc3RmaXgpLnRvU3RyaW5nKDM2KTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09IE5BVElWRSA/IGZhbHNlXG4gICAgOiB0eXBlb2YgZGV0ZWN0aW9uID09ICdmdW5jdGlvbicgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsInZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYmluZC1jb250ZXh0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG52YXIgbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgcG9zdCA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsIGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiYgIWZhaWxzKHBvc3QpKSB7XG4gICAgZGVmZXIgPSBwb3N0O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4vLyBXZWV4IEpTIGhhcyBmcm96ZW4gYnVpbHQtaW4gcHJvdG90eXBlcywgc28gdXNlIHRyeSAvIGNhdGNoIHdyYXBwZXJcbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggIT09IDIgfHwgcmVzdWx0WzBdICE9PSAnYScgfHwgcmVzdWx0WzFdICE9PSAnYic7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMsIHNoYW0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgfSk7XG4gICAgdmFyIHN0cmluZ01ldGhvZCA9IG1ldGhvZHNbMF07XG4gICAgdmFyIHJlZ2V4TWV0aG9kID0gbWV0aG9kc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyaW5nTWV0aG9kKTtcbiAgICByZWRlZmluZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJlZ2V4TWV0aG9kLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcmVnZXhNZXRob2QuY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgICBpZiAoc2hhbSkgaGlkZShSZWdFeHAucHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG4gIH1cbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG5cbiAgcmV0dXJuIHJlZ2V4cEV4ZWMuY2FsbChSLCBTKTtcbn07XG5cbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG5cbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gbmF0aXZlRGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZvcmNlZC1zdHJpbmctaHRtbC1tZXRob2QnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuc3ViYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3ViXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnc3ViJykgfSwge1xuICBzdWI6IGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfVxufSk7XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBjcm9zc3JvYWRzIGZyb20gJ2Nyb3Nzcm9hZHMnO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNOb25FbXB0eUFycmF5LCBub29wIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0U2NyZWVuIHtcblx0b0Nyb3NzID0gbnVsbDtcblx0c1NjcmVlbk5hbWU7XG5cdGFWaWV3TW9kZWxzO1xuXG5cdGNvbnN0cnVjdG9yKHNjcmVlbk5hbWUsIHZpZXdNb2RlbHMgPSBbXSkge1xuXHRcdHRoaXMuc1NjcmVlbk5hbWUgPSBzY3JlZW5OYW1lO1xuXHRcdHRoaXMuYVZpZXdNb2RlbHMgPSBpc0FycmF5KHZpZXdNb2RlbHMpID8gdmlld01vZGVscyA6IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG5cdHZpZXdNb2RlbHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYVZpZXdNb2RlbHM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHNjcmVlbk5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc1NjcmVlbk5hbWU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMgez9BcnJheSl9XG5cdCAqL1xuXHRyb3V0ZXMoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMgez9PYmplY3R9XG5cdCAqL1xuXHRfX2Nyb3NzKCkge1xuXHRcdHJldHVybiB0aGlzLm9Dcm9zcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdF9fc3RhcnQoKSB7XG5cdFx0bGV0IHJvdXRlID0gbnVsbCxcblx0XHRcdGZNYXRjaGVyID0gbnVsbDtcblx0XHRjb25zdCByb3V0ZXMgPSB0aGlzLnJvdXRlcygpO1xuXG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShyb3V0ZXMpKSB7XG5cdFx0XHRmTWF0Y2hlciA9IF8uYmluZCh0aGlzLm9uUm91dGUgfHwgbm9vcCwgdGhpcyk7XG5cdFx0XHRyb3V0ZSA9IGNyb3Nzcm9hZHMuY3JlYXRlKCk7XG5cblx0XHRcdHJvdXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmIChpdGVtICYmIHJvdXRlKSB7XG5cdFx0XHRcdFx0cm91dGUuYWRkUm91dGUoaXRlbVswXSwgZk1hdGNoZXIpLnJ1bGVzID0gaXRlbVsxXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMub0Nyb3NzID0gcm91dGU7XG5cdFx0fVxuXHR9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3RyaW1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuc3NtOyIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzKGhpZGRlbktleXMsIGtleSkgJiYgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgaXRlcmF0ZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBmbiwgdGhhdCwgQVNfRU5UUklFUywgSVNfSVRFUkFUT1IpIHtcbiAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGZuLCB0aGF0LCBBU19FTlRSSUVTID8gMiA6IDEpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBzdGVwO1xuXG4gIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcignVGFyZ2V0IGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gQVNfRU5UUklFU1xuICAgICAgICAgID8gYm91bmRGdW5jdGlvbihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSlcbiAgICAgICAgICA6IGJvdW5kRnVuY3Rpb24oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7XG4gIH1cblxuICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgYm91bmRGdW5jdGlvbiwgc3RlcC52YWx1ZSwgQVNfRU5UUklFUyk7XG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcblxuaXRlcmF0ZS5zdG9wID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCByZXN1bHQpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNwZWNpZXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgcGFyc2VJbnRJbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXJzZS1pbnQnKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXBhcnNlaW50LXN0cmluZy1yYWRpeFxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBwYXJzZUludCAhPSBwYXJzZUludEltcGxlbWVudGF0aW9uIH0sIHtcbiAgcGFyc2VJbnQ6IHBhcnNlSW50SW1wbGVtZW50YXRpb25cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gIW1ldGhvZCB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgRG9tYWluQWRtaW5TdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZG9tYWlucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5kb21haW5zLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyAndGhyb3R0bGUnOiAxMDAgfSk7XG5cdFx0dGhpcy5kb21haW5zV2l0aG91dEFsaWFzZXMgPSBrby5jb21wdXRlZCgoKSA9PiBfLmZpbHRlcih0aGlzLmRvbWFpbnMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgIWl0ZW0uYWxpYXMpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgRG9tYWluQWRtaW5TdG9yZSgpO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgc2NyaXB0ID0gJ3NjcmlwdCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGpzID0gJ2phdmEnICsgc2NyaXB0ICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoanMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgc2NyaXB0ICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnLycgKyBzY3JpcHQgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2FycmF5XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYmluZC1jb250ZXh0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2guY2FsbCh0YXJnZXQsIHZhbHVlKTsgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgIC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuY3Jvc3Nyb2FkczsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBBYnN0cmFjdENoZWNrYm94IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyA9IHt9XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMgPSB7fSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlO1xuXHRcdGlmIChpc1VuZCh0aGlzLnZhbHVlKSB8fCAhdGhpcy52YWx1ZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBrby5vYnNlcnZhYmxlKGlzVW5kKHRoaXMudmFsdWUpID8gZmFsc2UgOiAhIXRoaXMudmFsdWUpO1xuXHRcdH1cblxuXHRcdHRoaXMuZW5hYmxlID0gcGFyYW1zLmVuYWJsZTtcblx0XHRpZiAoaXNVbmQodGhpcy5lbmFibGUpIHx8ICF0aGlzLmVuYWJsZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMuZW5hYmxlID0ga28ub2JzZXJ2YWJsZShpc1VuZCh0aGlzLmVuYWJsZSkgPyB0cnVlIDogISF0aGlzLmVuYWJsZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNhYmxlID0gcGFyYW1zLmRpc2FibGU7XG5cdFx0aWYgKGlzVW5kKHRoaXMuZGlzYWJsZSkgfHwgIXRoaXMuZGlzYWJsZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMuZGlzYWJsZSA9IGtvLm9ic2VydmFibGUoaXNVbmQodGhpcy5kaXNhYmxlKSA/IGZhbHNlIDogISF0aGlzLmRpc2FibGUpO1xuXHRcdH1cblxuXHRcdHRoaXMubGFiZWwgPSBwYXJhbXMubGFiZWwgfHwgJyc7XG5cdFx0dGhpcy5pbmxpbmUgPSBpc1VuZChwYXJhbXMuaW5saW5lKSA/IGZhbHNlIDogcGFyYW1zLmlubGluZTtcblxuXHRcdHRoaXMucmVhZE9ubHkgPSBpc1VuZChwYXJhbXMucmVhZE9ubHkpID8gZmFsc2UgOiAhIXBhcmFtcy5yZWFkT25seTtcblx0XHR0aGlzLmludmVydGVkID0gaXNVbmQocGFyYW1zLmludmVydGVkKSA/IGZhbHNlIDogISFwYXJhbXMuaW52ZXJ0ZWQ7XG5cblx0XHR0aGlzLmxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLmxhYmVsKTtcblx0XHR0aGlzLmxhYmVsQW5pbWF0ZWQgPSAhIXBhcmFtcy5sYWJlbEFuaW1hdGVkO1xuXHR9XG5cblx0Y2xpY2soKSB7XG5cdFx0aWYgKCF0aGlzLnJlYWRPbmx5ICYmIHRoaXMuZW5hYmxlKCkgJiYgIXRoaXMuZGlzYWJsZSgpKSB7XG5cdFx0XHR0aGlzLnZhbHVlKCF0aGlzLnZhbHVlKCkpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdENoZWNrYm94LCBBYnN0cmFjdENoZWNrYm94IGFzIGRlZmF1bHQgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gcGFyc2U7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogUGFyc2VzIHN0cnVjdHVyZWQgZS1tYWlsIGFkZHJlc3NlcyBmcm9tIGFuIGFkZHJlc3MgZmllbGRcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgIFwiTmFtZSA8YWRkcmVzc0Bkb21haW4+XCJcbiAqXG4gKiB3aWxsIGJlIGNvbnZlcnRlZCB0b1xuICpcbiAqICAgICBbe25hbWU6IFwiTmFtZVwiLCBhZGRyZXNzOiBcImFkZHJlc3NAZG9tYWluXCJ9XVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZFxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGFkZHJlc3Mgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgdmFyIHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoc3RyKTtcbiAgdmFyIHRva2VucyA9IHRva2VuaXplci50b2tlbml6ZSgpO1xuXG4gIHZhciBhZGRyZXNzZXMgPSBbXTtcbiAgdmFyIGFkZHJlc3MgPSBbXTtcbiAgdmFyIHBhcnNlZEFkZHJlc3NlcyA9IFtdO1xuXG4gIHRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikge1xuICAgIGlmICh0b2tlbi50eXBlID09PSAnb3BlcmF0b3InICYmICh0b2tlbi52YWx1ZSA9PT0gJywnIHx8IHRva2VuLnZhbHVlID09PSAnOycpKSB7XG4gICAgICBpZiAoYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgYWRkcmVzc2VzLnB1c2goYWRkcmVzcyk7XG4gICAgICB9XG4gICAgICBhZGRyZXNzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaCh0b2tlbik7XG4gICAgfVxuICB9KTtcblxuICBpZiAoYWRkcmVzcy5sZW5ndGgpIHtcbiAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgfVxuXG4gIGFkZHJlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgYWRkcmVzcyA9IF9oYW5kbGVBZGRyZXNzKGFkZHJlc3MpO1xuICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgcGFyc2VkQWRkcmVzc2VzID0gcGFyc2VkQWRkcmVzc2VzLmNvbmNhdChhZGRyZXNzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWRBZGRyZXNzZXM7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRva2VucyBmb3IgYSBzaW5nbGUgYWRkcmVzcyBpbnRvIGFuIGFkZHJlc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtBcnJheX0gdG9rZW5zIFRva2VucyBvYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0gQWRkcmVzcyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2hhbmRsZUFkZHJlc3ModG9rZW5zKSB7XG4gIHZhciBpc0dyb3VwID0gZmFsc2U7XG4gIHZhciBzdGF0ZSA9ICd0ZXh0JztcbiAgdmFyIGFkZHJlc3MgPSB2b2lkIDA7XG4gIHZhciBhZGRyZXNzZXMgPSBbXTtcbiAgdmFyIGRhdGEgPSB7XG4gICAgYWRkcmVzczogW10sXG4gICAgY29tbWVudDogW10sXG4gICAgZ3JvdXA6IFtdLFxuICAgIHRleHQ6IFtdXG5cbiAgICAvLyBGaWx0ZXIgb3V0IDxhZGRyZXNzZXM+LCAoY29tbWVudHMpIGFuZCByZWd1bGFyIHRleHRcbiAgfTtmb3IgKHZhciBpID0gMCwgbGVuID0gdG9rZW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgc3RhdGUgPSAnYWRkcmVzcyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIHN0YXRlID0gJ2NvbW1lbnQnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICc6JzpcbiAgICAgICAgICBzdGF0ZSA9ICdncm91cCc7XG4gICAgICAgICAgaXNHcm91cCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3RhdGUgPSAndGV4dCc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBkYXRhW3N0YXRlXS5wdXNoKHRva2VuLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB0aGVyZSBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQsIHJlcGxhY2UgdGhlIHR3b1xuICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgIGRhdGEudGV4dCA9IGRhdGEuY29tbWVudDtcbiAgICBkYXRhLmNvbW1lbnQgPSBbXTtcbiAgfVxuXG4gIGlmIChpc0dyb3VwKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNhcHBlbmRpeC1BLjEuM1xuICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5qb2luKCcgJyk7XG4gICAgYWRkcmVzc2VzLnB1c2goe1xuICAgICAgbmFtZTogZGF0YS50ZXh0IHx8IGFkZHJlc3MgJiYgYWRkcmVzcy5uYW1lLFxuICAgICAgZ3JvdXA6IGRhdGEuZ3JvdXAubGVuZ3RoID8gcGFyc2UoZGF0YS5ncm91cC5qb2luKCcsJykpIDogW11cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBubyBhZGRyZXNzIHdhcyBmb3VuZCwgdHJ5IHRvIGRldGVjdCBvbmUgZnJvbSByZWd1bGFyIHRleHRcbiAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGggJiYgZGF0YS50ZXh0Lmxlbmd0aCkge1xuICAgICAgZm9yICh2YXIgX2kgPSBkYXRhLnRleHQubGVuZ3RoIC0gMTsgX2kgPj0gMDsgX2ktLSkge1xuICAgICAgICBpZiAoZGF0YS50ZXh0W19pXS5tYXRjaCgvXlteQFxcc10rQFteQFxcc10rJC8pKSB7XG4gICAgICAgICAgZGF0YS5hZGRyZXNzID0gZGF0YS50ZXh0LnNwbGljZShfaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIF9yZWdleEhhbmRsZXIgPSBmdW5jdGlvbiBfcmVnZXhIYW5kbGVyKGFkZHJlc3MpIHtcbiAgICAgICAgaWYgKCFkYXRhLmFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICAgICAgZGF0YS5hZGRyZXNzID0gW2FkZHJlc3MudHJpbSgpXTtcbiAgICAgICAgICByZXR1cm4gJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhZGRyZXNzO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBzdGlsbCBubyBhZGRyZXNzXG4gICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yICh2YXIgX2kyID0gZGF0YS50ZXh0Lmxlbmd0aCAtIDE7IF9pMiA+PSAwOyBfaTItLSkge1xuICAgICAgICAgIGRhdGEudGV4dFtfaTJdID0gZGF0YS50ZXh0W19pMl0ucmVwbGFjZSgvXFxzKlxcYlteQFxcc10rQFteQFxcc10rXFxiXFxzKi8sIF9yZWdleEhhbmRsZXIpLnRyaW0oKTtcbiAgICAgICAgICBpZiAoZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBzdGlsbCBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQgZXhpeHRzLCByZXBsYWNlIHRoZSB0d29cbiAgICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50O1xuICAgICAgZGF0YS5jb21tZW50ID0gW107XG4gICAgfVxuXG4gICAgLy8gS2VlcCBvbmx5IHRoZSBmaXJzdCBhZGRyZXNzIG9jY3VyZW5jZSwgcHVzaCBvdGhlcnMgdG8gcmVndWxhciB0ZXh0XG4gICAgaWYgKGRhdGEuYWRkcmVzcy5sZW5ndGggPiAxKSB7XG4gICAgICBkYXRhLnRleHQgPSBkYXRhLnRleHQuY29uY2F0KGRhdGEuYWRkcmVzcy5zcGxpY2UoMSkpO1xuICAgIH1cblxuICAgIC8vIEpvaW4gdmFsdWVzIHdpdGggc3BhY2VzXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKTtcbiAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3Muam9pbignICcpO1xuXG4gICAgaWYgKCFkYXRhLmFkZHJlc3MgJiYgaXNHcm91cCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MgfHwgZGF0YS50ZXh0IHx8ICcnLFxuICAgICAgICBuYW1lOiBkYXRhLnRleHQgfHwgZGF0YS5hZGRyZXNzIHx8ICcnXG4gICAgICB9O1xuXG4gICAgICBpZiAoYWRkcmVzcy5hZGRyZXNzID09PSBhZGRyZXNzLm5hbWUpIHtcbiAgICAgICAgaWYgKChhZGRyZXNzLmFkZHJlc3MgfHwgJycpLm1hdGNoKC9ALykpIHtcbiAgICAgICAgICBhZGRyZXNzLm5hbWUgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRyZXNzLmFkZHJlc3MgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWRkcmVzc2VzO1xufTtcblxuLypcbiAqIE9wZXJhdG9yIHRva2VucyBhbmQgd2hpY2ggdG9rZW5zIGFyZSBleHBlY3RlZCB0byBlbmQgdGhlIHNlcXVlbmNlXG4gKi9cbnZhciBPUEVSQVRPUlMgPSB7XG4gICdcIic6ICdcIicsXG4gICcoJzogJyknLFxuICAnPCc6ICc+JyxcbiAgJywnOiAnJyxcbiAgLy8gR3JvdXBzIGFyZSBlbmRlZCBieSBzZW1pY29sb25zXG4gICc6JzogJzsnLFxuICAvLyBTZW1pY29sb25zIGFyZSBub3QgYSBsZWdhbCBkZWxpbWl0ZXIgcGVyIHRoZSBSRkMyODIyIGdyYW1tYXIgb3RoZXJcbiAgLy8gdGhhbiBmb3IgdGVybWluYXRpbmcgYSBncm91cCwgYnV0IHRoZXkgYXJlIGFsc28gbm90IHZhbGlkIGZvciBhbnlcbiAgLy8gb3RoZXIgdXNlIGluIHRoaXMgY29udGV4dC4gIEdpdmVuIHRoYXQgc29tZSBtYWlsIGNsaWVudHMgaGF2ZVxuICAvLyBoaXN0b3JpY2FsbHkgYWxsb3dlZCB0aGUgc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGVyIGVxdWl2YWxlbnQgdG8gdGhlXG4gIC8vIGNvbW1hIGluIHRoZWlyIFVJLCBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCB0aGVtIHRoZSBzYW1lIGFzIGEgY29tbWFcbiAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBncm91cC5cbiAgJzsnOiAnJ1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVG9rZW5pemVyIG9iamVjdCBmb3IgdG9rZW5pemluZyBhZGRyZXNzIGZpZWxkIHN0cmluZ3NcbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZCBzdHJpbmdcbiAgICovXG59O1xudmFyIFRva2VuaXplciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG9rZW5pemVyKHN0cikge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb2tlbml6ZXIpO1xuXG4gICAgdGhpcy5zdHIgPSAoc3RyIHx8ICcnKS50b1N0cmluZygpO1xuICAgIHRoaXMub3BlcmF0b3JDdXJyZW50ID0gJyc7XG4gICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnO1xuICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgdGhpcy5saXN0ID0gW107XG4gIH1cblxuICAvKipcbiAgICogVG9rZW5pemVzIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmdcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9wZXJhdG9yfHRleHQgdG9rZW5zXG4gICAqL1xuXG5cbiAgX2NyZWF0ZUNsYXNzKFRva2VuaXplciwgW3tcbiAgICBrZXk6ICd0b2tlbml6ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRva2VuaXplKCkge1xuICAgICAgdmFyIGNociA9IHZvaWQgMDtcbiAgICAgIHZhciBsaXN0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5zdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY2hyID0gdGhpcy5zdHIuY2hhckF0KGkpO1xuICAgICAgICB0aGlzLmNoZWNrQ2hhcihjaHIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxpc3QuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBub2RlLnZhbHVlID0gKG5vZGUudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICAgIGxpc3QucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGNoYXJhY3RlciBpcyBhbiBvcGVyYXRvciBvciB0ZXh0IGFuZCBhY3RzIGFjY29yZGluZ2x5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2hyIENoYXJhY3RlciBmcm9tIHRoZSBhZGRyZXNzIGZpZWxkXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2NoZWNrQ2hhcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNoZWNrQ2hhcihjaHIpIHtcbiAgICAgIGlmICgoY2hyIGluIE9QRVJBVE9SUyB8fCBjaHIgPT09ICdcXFxcJykgJiYgdGhpcy5lc2NhcGVkKSB7XG4gICAgICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wZXJhdG9yRXhwZWN0aW5nICYmIGNociA9PT0gdGhpcy5vcGVyYXRvckV4cGVjdGluZykge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgICB2YWx1ZTogY2hyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSAnJztcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3BlcmF0b3JFeHBlY3RpbmcgJiYgY2hyIGluIE9QRVJBVE9SUykge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgICB2YWx1ZTogY2hyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSBPUEVSQVRPUlNbY2hyXTtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmVzY2FwZWQgJiYgY2hyID09PSAnXFxcXCcpIHtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMubm9kZSkge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxpc3QucHVzaCh0aGlzLm5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5lc2NhcGVkICYmIGNociAhPT0gJ1xcXFwnKSB7XG4gICAgICAgIHRoaXMubm9kZS52YWx1ZSArPSAnXFxcXCc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm9kZS52YWx1ZSArPSBjaHI7XG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9rZW5pemVyO1xufSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTloWkdSeVpYTnpjR0Z5YzJWeUxtcHpJbDBzSW01aGJXVnpJanBiSW5CaGNuTmxJaXdpYzNSeUlpd2lkRzlyWlc1cGVtVnlJaXdpVkc5clpXNXBlbVZ5SWl3aWRHOXJaVzV6SWl3aWRHOXJaVzVwZW1VaUxDSmhaR1J5WlhOelpYTWlMQ0poWkdSeVpYTnpJaXdpY0dGeWMyVmtRV1JrY21WemMyVnpJaXdpWm05eVJXRmphQ0lzSW5SdmEyVnVJaXdpZEhsd1pTSXNJblpoYkhWbElpd2liR1Z1WjNSb0lpd2ljSFZ6YUNJc0lsOW9ZVzVrYkdWQlpHUnlaWE56SWl3aVkyOXVZMkYwSWl3aWFYTkhjbTkxY0NJc0luTjBZWFJsSWl3aVpHRjBZU0lzSW1OdmJXMWxiblFpTENKbmNtOTFjQ0lzSW5SbGVIUWlMQ0pwSWl3aWJHVnVJaXdpYW05cGJpSXNJbTVoYldVaUxDSnRZWFJqYUNJc0luTndiR2xqWlNJc0lsOXlaV2RsZUVoaGJtUnNaWElpTENKMGNtbHRJaXdpY21Wd2JHRmpaU0lzSWs5UVJWSkJWRTlTVXlJc0luUnZVM1J5YVc1bklpd2liM0JsY21GMGIzSkRkWEp5Wlc1MElpd2liM0JsY21GMGIzSkZlSEJsWTNScGJtY2lMQ0p1YjJSbElpd2laWE5qWVhCbFpDSXNJbXhwYzNRaUxDSmphSElpTENKamFHRnlRWFFpTENKamFHVmphME5vWVhJaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPMnRDUVdOM1FrRXNTenM3T3p0QlFXUjRRanM3T3pzN096czdPenM3T3pzN1FVRmpaU3hUUVVGVFFTeExRVUZVTEVOQlFXZENReXhIUVVGb1FpeEZRVUZ4UWp0QlFVTnNReXhOUVVGTlF5eFpRVUZaTEVsQlFVbERMRk5CUVVvc1EwRkJZMFlzUjBGQlpDeERRVUZzUWp0QlFVTkJMRTFCUVUxSExGTkJRVk5HTEZWQlFWVkhMRkZCUVZZc1JVRkJaanM3UVVGRlFTeE5RVUZOUXl4WlFVRlpMRVZCUVd4Q08wRkJRMEVzVFVGQlNVTXNWVUZCVlN4RlFVRmtPMEZCUTBFc1RVRkJTVU1zYTBKQlFXdENMRVZCUVhSQ096dEJRVVZCU2l4VFFVRlBTeXhQUVVGUUxFTkJRV1VzVlVGQlZVTXNTMEZCVml4RlFVRnBRanRCUVVNNVFpeFJRVUZKUVN4TlFVRk5ReXhKUVVGT0xFdEJRV1VzVlVGQlppeExRVUU0UWtRc1RVRkJUVVVzUzBGQlRpeExRVUZuUWl4SFFVRm9RaXhKUVVGMVFrWXNUVUZCVFVVc1MwRkJUaXhMUVVGblFpeEhRVUZ5UlN4RFFVRktMRVZCUVN0Rk8wRkJRemRGTEZWQlFVbE1MRkZCUVZGTkxFMUJRVm9zUlVGQmIwSTdRVUZEYkVKUUxHdENRVUZWVVN4SlFVRldMRU5CUVdWUUxFOUJRV1k3UVVGRFJEdEJRVU5FUVN4blFrRkJWU3hGUVVGV08wRkJRMFFzUzBGTVJDeE5RVXRQTzBGQlEweEJMR05CUVZGUExFbEJRVklzUTBGQllVb3NTMEZCWWp0QlFVTkVPMEZCUTBZc1IwRlVSRHM3UVVGWFFTeE5RVUZKU0N4UlFVRlJUU3hOUVVGYUxFVkJRVzlDTzBGQlEyeENVQ3hqUVVGVlVTeEpRVUZXTEVOQlFXVlFMRTlCUVdZN1FVRkRSRHM3UVVGRlJFUXNXVUZCVlVjc1QwRkJWaXhEUVVGclFpeFZRVUZWUml4UFFVRldMRVZCUVcxQ08wRkJRMjVEUVN4alFVRlZVU3hsUVVGbFVpeFBRVUZtTEVOQlFWWTdRVUZEUVN4UlFVRkpRU3hSUVVGUlRTeE5RVUZhTEVWQlFXOUNPMEZCUTJ4Q1RDeDNRa0ZCYTBKQkxHZENRVUZuUWxFc1RVRkJhRUlzUTBGQmRVSlVMRTlCUVhaQ0xFTkJRV3hDTzBGQlEwUTdRVUZEUml4SFFVeEVPenRCUVU5QkxGTkJRVTlETEdWQlFWQTdRVUZEUkRzN1FVRkZSRHM3T3pzN08wRkJUVUVzVTBGQlUwOHNZMEZCVkN4RFFVRjVRbGdzVFVGQmVrSXNSVUZCYVVNN1FVRkRMMElzVFVGQlNXRXNWVUZCVlN4TFFVRmtPMEZCUTBFc1RVRkJTVU1zVVVGQlVTeE5RVUZhTzBGQlEwRXNUVUZCU1Znc1owSkJRVW83UVVGRFFTeE5RVUZOUkN4WlFVRlpMRVZCUVd4Q08wRkJRMEVzVFVGQlRXRXNUMEZCVHp0QlFVTllXaXhoUVVGVExFVkJSRVU3UVVGRldHRXNZVUZCVXl4RlFVWkZPMEZCUjFoRExGZEJRVThzUlVGSVNUdEJRVWxZUXl4VlFVRk5PenRCUVVkU08wRkJVR0VzUjBGQllpeERRVkZCTEV0QlFVc3NTVUZCU1VNc1NVRkJTU3hEUVVGU0xFVkJRVmRETEUxQlFVMXdRaXhQUVVGUFV5eE5RVUUzUWl4RlFVRnhRMVVzU1VGQlNVTXNSMEZCZWtNc1JVRkJPRU5FTEVkQlFUbERMRVZCUVcxRU8wRkJRMnBFTEZGQlFVMWlMRkZCUVZGT0xFOUJRVTl0UWl4RFFVRlFMRU5CUVdRN08wRkJSVUVzVVVGQlNXSXNUVUZCVFVNc1NVRkJUaXhMUVVGbExGVkJRVzVDTEVWQlFTdENPMEZCUXpkQ0xHTkJRVkZFTEUxQlFVMUZMRXRCUVdRN1FVRkRSU3hoUVVGTExFZEJRVXc3UVVGRFJVMHNhMEpCUVZFc1UwRkJVanRCUVVOQk8wRkJRMFlzWVVGQlN5eEhRVUZNTzBGQlEwVkJMR3RDUVVGUkxGTkJRVkk3UVVGRFFUdEJRVU5HTEdGQlFVc3NSMEZCVER0QlFVTkZRU3hyUWtGQlVTeFBRVUZTTzBGQlEwRkVMRzlDUVVGVkxFbEJRVlk3UVVGRFFUdEJRVU5HTzBGQlEwVkRMR3RDUVVGUkxFMUJRVkk3UVVGYVNqdEJRV05FTEV0QlprUXNUVUZsVHp0QlFVTk1MRlZCUVVsU0xFMUJRVTFGTEV0QlFWWXNSVUZCYVVJN1FVRkRaazhzWVVGQlMwUXNTMEZCVEN4RlFVRlpTaXhKUVVGYUxFTkJRV2xDU2l4TlFVRk5SU3hMUVVGMlFqdEJRVU5FTzBGQlEwWTdRVUZEUmpzN1FVRkZSRHRCUVVOQkxFMUJRVWtzUTBGQlEwOHNTMEZCUzBjc1NVRkJUQ3hEUVVGVlZDeE5RVUZZTEVsQlFYRkNUU3hMUVVGTFF5eFBRVUZNTEVOQlFXRlFMRTFCUVhSRExFVkJRVGhETzBGQlF6VkRUU3hUUVVGTFJ5eEpRVUZNTEVkQlFWbElMRXRCUVV0RExFOUJRV3BDTzBGQlEwRkVMRk5CUVV0RExFOUJRVXdzUjBGQlpTeEZRVUZtTzBGQlEwUTdPMEZCUlVRc1RVRkJTVWdzVDBGQlNpeEZRVUZoTzBGQlExZzdRVUZEUVVVc1UwRkJTMGNzU1VGQlRDeEhRVUZaU0N4TFFVRkxSeXhKUVVGTUxFTkJRVlZITEVsQlFWWXNRMEZCWlN4SFFVRm1MRU5CUVZvN1FVRkRRVzVDTEdOQlFWVlJMRWxCUVZZc1EwRkJaVHRCUVVOaVdTeFpRVUZOVUN4TFFVRkxSeXhKUVVGTUxFbEJRV05tTEZkQlFWZEJMRkZCUVZGdFFpeEpRVVF4UWp0QlFVVmlUQ3hoUVVGUFJpeExRVUZMUlN4TFFVRk1MRU5CUVZkU0xFMUJRVmdzUjBGQmIwSmlMRTFCUVUxdFFpeExRVUZMUlN4TFFVRk1MRU5CUVZkSkxFbEJRVmdzUTBGQlowSXNSMEZCYUVJc1EwRkJUaXhEUVVGd1FpeEhRVUZyUkR0QlFVWTFReXhMUVVGbU8wRkJTVVFzUjBGUVJDeE5RVTlQTzBGQlEwdzdRVUZEUVN4UlFVRkpMRU5CUVVOT0xFdEJRVXRhTEU5QlFVd3NRMEZCWVUwc1RVRkJaQ3hKUVVGM1FrMHNTMEZCUzBjc1NVRkJUQ3hEUVVGVlZDeE5RVUYwUXl4RlFVRTRRenRCUVVNMVF5eFhRVUZMTEVsQlFVbFZMRXRCUVVsS0xFdEJRVXRITEVsQlFVd3NRMEZCVlZRc1RVRkJWaXhIUVVGdFFpeERRVUZvUXl4RlFVRnRRMVVzVFVGQlN5eERRVUY0UXl4RlFVRXlRMEVzU1VGQk0wTXNSVUZCWjBRN1FVRkRPVU1zV1VGQlNVb3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlF5eEZRVUZXTEVWQlFXRkpMRXRCUVdJc1EwRkJiVUlzYlVKQlFXNUNMRU5CUVVvc1JVRkJOa003UVVGRE0wTlNMR1ZCUVV0YUxFOUJRVXdzUjBGQlpWa3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlRTeE5RVUZXTEVOQlFXbENUQ3hGUVVGcVFpeEZRVUZ2UWl4RFFVRndRaXhEUVVGbU8wRkJRMEU3UVVGRFJEdEJRVU5HT3p0QlFVVkVMRlZCUVVsTkxHZENRVUZuUWl4VFFVRm9Ra0VzWVVGQlowSXNRMEZCVlhSQ0xFOUJRVllzUlVGQmJVSTdRVUZEY2tNc1dVRkJTU3hEUVVGRFdTeExRVUZMV2l4UFFVRk1MRU5CUVdGTkxFMUJRV3hDTEVWQlFUQkNPMEZCUTNoQ1RTeGxRVUZMV2l4UFFVRk1MRWRCUVdVc1EwRkJRMEVzVVVGQlVYVkNMRWxCUVZJc1JVRkJSQ3hEUVVGbU8wRkJRMEVzYVVKQlFVOHNSMEZCVUR0QlFVTkVMRk5CU0VRc1RVRkhUenRCUVVOTUxHbENRVUZQZGtJc1QwRkJVRHRCUVVORU8wRkJRMFlzVDBGUVJEczdRVUZUUVR0QlFVTkJMRlZCUVVrc1EwRkJRMWtzUzBGQlMxb3NUMEZCVEN4RFFVRmhUU3hOUVVGc1FpeEZRVUV3UWp0QlFVTjRRaXhoUVVGTExFbEJRVWxWTEUxQlFVbEtMRXRCUVV0SExFbEJRVXdzUTBGQlZWUXNUVUZCVml4SFFVRnRRaXhEUVVGb1F5eEZRVUZ0UTFVc1QwRkJTeXhEUVVGNFF5eEZRVUV5UTBFc1MwRkJNME1zUlVGQlowUTdRVUZET1VOS0xHVkJRVXRITEVsQlFVd3NRMEZCVlVNc1IwRkJWaXhKUVVGbFNpeExRVUZMUnl4SlFVRk1MRU5CUVZWRExFZEJRVllzUlVGQllWRXNUMEZCWWl4RFFVRnhRaXd5UWtGQmNrSXNSVUZCYTBSR0xHRkJRV3hFTEVWQlFXbEZReXhKUVVGcVJTeEZRVUZtTzBGQlEwRXNZMEZCU1Znc1MwRkJTMW9zVDBGQlRDeERRVUZoVFN4TlFVRnFRaXhGUVVGNVFqdEJRVU4yUWp0QlFVTkVPMEZCUTBZN1FVRkRSanRCUVVOR096dEJRVVZFTzBGQlEwRXNVVUZCU1N4RFFVRkRUU3hMUVVGTFJ5eEpRVUZNTEVOQlFWVlVMRTFCUVZnc1NVRkJjVUpOTEV0QlFVdERMRTlCUVV3c1EwRkJZVkFzVFVGQmRFTXNSVUZCT0VNN1FVRkROVU5OTEZkQlFVdEhMRWxCUVV3c1IwRkJXVWdzUzBGQlMwTXNUMEZCYWtJN1FVRkRRVVFzVjBGQlMwTXNUMEZCVEN4SFFVRmxMRVZCUVdZN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEZGQlFVbEVMRXRCUVV0YUxFOUJRVXdzUTBGQllVMHNUVUZCWWl4SFFVRnpRaXhEUVVFeFFpeEZRVUUyUWp0QlFVTXpRazBzVjBGQlMwY3NTVUZCVEN4SFFVRlpTQ3hMUVVGTFJ5eEpRVUZNTEVOQlFWVk9MRTFCUVZZc1EwRkJhVUpITEV0QlFVdGFMRTlCUVV3c1EwRkJZWEZDTEUxQlFXSXNRMEZCYjBJc1EwRkJjRUlzUTBGQmFrSXNRMEZCV2p0QlFVTkVPenRCUVVWRU8wRkJRMEZVTEZOQlFVdEhMRWxCUVV3c1IwRkJXVWdzUzBGQlMwY3NTVUZCVEN4RFFVRlZSeXhKUVVGV0xFTkJRV1VzUjBGQlppeERRVUZhTzBGQlEwRk9MRk5CUVV0YUxFOUJRVXdzUjBGQlpWa3NTMEZCUzFvc1QwRkJUQ3hEUVVGaGEwSXNTVUZCWWl4RFFVRnJRaXhIUVVGc1FpeERRVUZtT3p0QlFVVkJMRkZCUVVrc1EwRkJRMDRzUzBGQlMxb3NUMEZCVGl4SlFVRnBRbFVzVDBGQmNrSXNSVUZCT0VJN1FVRkROVUlzWVVGQlR5eEZRVUZRTzBGQlEwUXNTMEZHUkN4TlFVVlBPMEZCUTB4V0xHZENRVUZWTzBGQlExSkJMR2xDUVVGVFdTeExRVUZMV2l4UFFVRk1MRWxCUVdkQ1dTeExRVUZMUnl4SlFVRnlRaXhKUVVFMlFpeEZRVVE1UWp0QlFVVlNTU3hqUVVGTlVDeExRVUZMUnl4SlFVRk1MRWxCUVdGSUxFdEJRVXRhTEU5QlFXeENMRWxCUVRaQ08wRkJSak5DTEU5QlFWWTdPMEZCUzBFc1ZVRkJTVUVzVVVGQlVVRXNUMEZCVWl4TFFVRnZRa0VzVVVGQlVXMUNMRWxCUVdoRExFVkJRWE5ETzBGQlEzQkRMRmxCUVVrc1EwRkJRMjVDTEZGQlFWRkJMRTlCUVZJc1NVRkJiVUlzUlVGQmNFSXNSVUZCZDBKdlFpeExRVUY0UWl4RFFVRTRRaXhIUVVFNVFpeERRVUZLTEVWQlFYZERPMEZCUTNSRGNFSXNhMEpCUVZGdFFpeEpRVUZTTEVkQlFXVXNSVUZCWmp0QlFVTkVMRk5CUmtRc1RVRkZUenRCUVVOTWJrSXNhMEpCUVZGQkxFOUJRVklzUjBGQmEwSXNSVUZCYkVJN1FVRkRSRHRCUVVOR096dEJRVVZFUkN4blFrRkJWVkVzU1VGQlZpeERRVUZsVUN4UFFVRm1PMEZCUTBRN1FVRkRSanM3UVVGRlJDeFRRVUZQUkN4VFFVRlFPMEZCUTBRN08wRkJSVVE3T3p0QlFVZEJMRWxCUVUwd1FpeFpRVUZaTzBGQlEyaENMRTlCUVVzc1IwRkVWenRCUVVWb1FpeFBRVUZMTEVkQlJsYzdRVUZIYUVJc1QwRkJTeXhIUVVoWE8wRkJTV2hDTEU5QlFVc3NSVUZLVnp0QlFVdG9RanRCUVVOQkxFOUJRVXNzUjBGT1Z6dEJRVTlvUWp0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeFBRVUZMT3p0QlFVZFFPenM3T3pzN1FVRm9RbXRDTEVOQlFXeENPMGxCYzBKTk4wSXNVenRCUVVOS0xIRkNRVUZoUml4SFFVRmlMRVZCUVd0Q08wRkJRVUU3TzBGQlEyaENMRk5CUVV0QkxFZEJRVXdzUjBGQlZ5eERRVUZEUVN4UFFVRlBMRVZCUVZJc1JVRkJXV2RETEZGQlFWb3NSVUZCV0R0QlFVTkJMRk5CUVV0RExHVkJRVXdzUjBGQmRVSXNSVUZCZGtJN1FVRkRRU3hUUVVGTFF5eHBRa0ZCVEN4SFFVRjVRaXhGUVVGNlFqdEJRVU5CTEZOQlFVdERMRWxCUVV3c1IwRkJXU3hKUVVGYU8wRkJRMEVzVTBGQlMwTXNUMEZCVEN4SFFVRmxMRXRCUVdZN1FVRkRRU3hUUVVGTFF5eEpRVUZNTEVkQlFWa3NSVUZCV2p0QlFVTkVPenRCUVVWRU96czdPenM3T3pzN0swSkJTMWs3UVVGRFZpeFZRVUZKUXl4WlFVRktPMEZCUTBFc1ZVRkJTVVFzVDBGQlR5eEZRVUZZTzBGQlEwRXNWMEZCU3l4SlFVRkpaaXhKUVVGSkxFTkJRVklzUlVGQlYwTXNUVUZCVFN4TFFVRkxka0lzUjBGQlRDeERRVUZUV1N4TlFVRXZRaXhGUVVGMVExVXNTVUZCU1VNc1IwRkJNME1zUlVGQlowUkVMRWRCUVdoRUxFVkJRWEZFTzBGQlEyNUVaMElzWTBGQlRTeExRVUZMZEVNc1IwRkJUQ3hEUVVGVGRVTXNUVUZCVkN4RFFVRm5RbXBDTEVOQlFXaENMRU5CUVU0N1FVRkRRU3hoUVVGTGEwSXNVMEZCVEN4RFFVRmxSaXhIUVVGbU8wRkJRMFE3TzBGQlJVUXNWMEZCUzBRc1NVRkJUQ3hEUVVGVk4wSXNUMEZCVml4RFFVRnJRaXhWUVVGVk1rSXNTVUZCVml4RlFVRm5RanRCUVVOb1EwRXNZVUZCUzNoQ0xFdEJRVXdzUjBGQllTeERRVUZEZDBJc1MwRkJTM2hDTEV0QlFVd3NTVUZCWXl4RlFVRm1MRVZCUVcxQ2NVSXNVVUZCYmtJc1IwRkJPRUpJTEVsQlFUbENMRVZCUVdJN1FVRkRRU3haUVVGSlRTeExRVUZMZUVJc1MwRkJWQ3hGUVVGblFqdEJRVU5rTUVJc1pVRkJTM2hDTEVsQlFVd3NRMEZCVlhOQ0xFbEJRVlk3UVVGRFJEdEJRVU5HTEU5QlRFUTdPMEZCVDBFc1lVRkJUMFVzU1VGQlVEdEJRVU5FT3p0QlFVVkVPenM3T3pzN096czRRa0ZMVjBNc1J5eEZRVUZMTzBGQlEyUXNWVUZCU1N4RFFVRkRRU3hQUVVGUFVDeFRRVUZRTEVsQlFXOUNUeXhSUVVGUkxFbEJRVGRDTEV0QlFYTkRMRXRCUVV0R0xFOUJRUzlETEVWQlFYZEVPMEZCUTNSRUxHRkJRVXRCTEU5QlFVd3NSMEZCWlN4TFFVRm1PMEZCUTBRc1QwRkdSQ3hOUVVWUExFbEJRVWtzUzBGQlMwWXNhVUpCUVV3c1NVRkJNRUpKTEZGQlFWRXNTMEZCUzBvc2FVSkJRVE5ETEVWQlFUaEVPMEZCUTI1RkxHRkJRVXRETEVsQlFVd3NSMEZCV1R0QlFVTldla0lzWjBKQlFVMHNWVUZFU1R0QlFVVldReXhwUWtGQlR6SkNPMEZCUmtjc1UwRkJXanRCUVVsQkxHRkJRVXRFTEVsQlFVd3NRMEZCVlhoQ0xFbEJRVllzUTBGQlpTeExRVUZMYzBJc1NVRkJjRUk3UVVGRFFTeGhRVUZMUVN4SlFVRk1MRWRCUVZrc1NVRkJXanRCUVVOQkxHRkJRVXRFTEdsQ1FVRk1MRWRCUVhsQ0xFVkJRWHBDTzBGQlEwRXNZVUZCUzBVc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFUdEJRVU5FTEU5QlZrMHNUVUZWUVN4SlFVRkpMRU5CUVVNc1MwRkJTMFlzYVVKQlFVNHNTVUZCTWtKSkxFOUJRVTlRTEZOQlFYUkRMRVZCUVdsRU8wRkJRM1JFTEdGQlFVdEpMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1ZVRkVTVHRCUVVWV1F5eHBRa0ZCVHpKQ08wRkJSa2NzVTBGQldqdEJRVWxCTEdGQlFVdEVMRWxCUVV3c1EwRkJWWGhDTEVsQlFWWXNRMEZCWlN4TFFVRkxjMElzU1VGQmNFSTdRVUZEUVN4aFFVRkxRU3hKUVVGTUxFZEJRVmtzU1VGQldqdEJRVU5CTEdGQlFVdEVMR2xDUVVGTUxFZEJRWGxDU0N4VlFVRlZUeXhIUVVGV0xFTkJRWHBDTzBGQlEwRXNZVUZCUzBZc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFUdEJRVU5FT3p0QlFVVkVMRlZCUVVrc1EwRkJReXhMUVVGTFFTeFBRVUZPTEVsQlFXbENSU3hSUVVGUkxFbEJRVGRDTEVWQlFXMURPMEZCUTJwRExHRkJRVXRHTEU5QlFVd3NSMEZCWlN4SlFVRm1PMEZCUTBFN1FVRkRSRHM3UVVGRlJDeFZRVUZKTEVOQlFVTXNTMEZCUzBRc1NVRkJWaXhGUVVGblFqdEJRVU5rTEdGQlFVdEJMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1RVRkVTVHRCUVVWV1F5eHBRa0ZCVHp0QlFVWkhMRk5CUVZvN1FVRkpRU3hoUVVGTE1FSXNTVUZCVEN4RFFVRlZlRUlzU1VGQlZpeERRVUZsTEV0QlFVdHpRaXhKUVVGd1FqdEJRVU5FT3p0QlFVVkVMRlZCUVVrc1MwRkJTME1zVDBGQlRDeEpRVUZuUWtVc1VVRkJVU3hKUVVFMVFpeEZRVUZyUXp0QlFVTm9ReXhoUVVGTFNDeEpRVUZNTEVOQlFWVjRRaXhMUVVGV0xFbEJRVzFDTEVsQlFXNUNPMEZCUTBRN08wRkJSVVFzVjBGQlMzZENMRWxCUVV3c1EwRkJWWGhDTEV0QlFWWXNTVUZCYlVJeVFpeEhRVUZ1UWp0QlFVTkJMRmRCUVV0R0xFOUJRVXdzUjBGQlpTeExRVUZtTzBGQlEwUWlMQ0ptYVd4bElqb2lZV1JrY21WemMzQmhjbk5sY2k1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dVR0Z5YzJWeklITjBjblZqZEhWeVpXUWdaUzF0WVdsc0lHRmtaSEpsYzNObGN5Qm1jbTl0SUdGdUlHRmtaSEpsYzNNZ1ptbGxiR1JjYmlBcVhHNGdLaUJGZUdGdGNHeGxPbHh1SUNwY2JpQXFJQ0FnSUZ3aVRtRnRaU0E4WVdSa2NtVnpjMEJrYjIxaGFXNCtYQ0pjYmlBcVhHNGdLaUIzYVd4c0lHSmxJR052Ym5abGNuUmxaQ0IwYjF4dUlDcGNiaUFxSUNBZ0lDQmJlMjVoYldVNklGd2lUbUZ0WlZ3aUxDQmhaR1J5WlhOek9pQmNJbUZrWkhKbGMzTkFaRzl0WVdsdVhDSjlYVnh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdVM1J5YVc1bmZTQnpkSElnUVdSa2NtVnpjeUJtYVdWc1pGeHVJQ29nUUhKbGRIVnliaUI3UVhKeVlYbDlJRUZ1SUdGeWNtRjVJRzltSUdGa1pISmxjM01nYjJKcVpXTjBjMXh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCbWRXNWpkR2x2YmlCd1lYSnpaU0FvYzNSeUtTQjdYRzRnSUdOdmJuTjBJSFJ2YTJWdWFYcGxjaUE5SUc1bGR5QlViMnRsYm1sNlpYSW9jM1J5S1Z4dUlDQmpiMjV6ZENCMGIydGxibk1nUFNCMGIydGxibWw2WlhJdWRHOXJaVzVwZW1Vb0tWeHVYRzRnSUdOdmJuTjBJR0ZrWkhKbGMzTmxjeUE5SUZ0ZFhHNGdJR3hsZENCaFpHUnlaWE56SUQwZ1cxMWNiaUFnYkdWMElIQmhjbk5sWkVGa1pISmxjM05sY3lBOUlGdGRYRzVjYmlBZ2RHOXJaVzV6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRnS0hSdmEyVnVLU0I3WEc0Z0lDQWdhV1lnS0hSdmEyVnVMblI1Y0dVZ1BUMDlJQ2R2Y0dWeVlYUnZjaWNnSmlZZ0tIUnZhMlZ1TG5aaGJIVmxJRDA5UFNBbkxDY2dmSHdnZEc5clpXNHVkbUZzZFdVZ1BUMDlJQ2M3SnlrcElIdGNiaUFnSUNBZ0lHbG1JQ2hoWkdSeVpYTnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaGhaR1J5WlhOektWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1lXUmtjbVZ6Y3lBOUlGdGRYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdGa1pISmxjM011Y0hWemFDaDBiMnRsYmlsY2JpQWdJQ0I5WEc0Z0lIMHBYRzVjYmlBZ2FXWWdLR0ZrWkhKbGMzTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ1lXUmtjbVZ6YzJWekxuQjFjMmdvWVdSa2NtVnpjeWxjYmlBZ2ZWeHVYRzRnSUdGa1pISmxjM05sY3k1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNoaFpHUnlaWE56S1NCN1hHNGdJQ0FnWVdSa2NtVnpjeUE5SUY5b1lXNWtiR1ZCWkdSeVpYTnpLR0ZrWkhKbGMzTXBYRzRnSUNBZ2FXWWdLR0ZrWkhKbGMzTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQndZWEp6WldSQlpHUnlaWE56WlhNZ1BTQndZWEp6WldSQlpHUnlaWE56WlhNdVkyOXVZMkYwS0dGa1pISmxjM01wWEc0Z0lDQWdmVnh1SUNCOUtWeHVYRzRnSUhKbGRIVnliaUJ3WVhKelpXUkJaR1J5WlhOelpYTmNibjA3WEc1Y2JpOHFLbHh1SUNvZ1EyOXVkbVZ5ZEhNZ2RHOXJaVzV6SUdadmNpQmhJSE5wYm1kc1pTQmhaR1J5WlhOeklHbHVkRzhnWVc0Z1lXUmtjbVZ6Y3lCdlltcGxZM1JjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNWZTQjBiMnRsYm5NZ1ZHOXJaVzV6SUc5aWFtVmpkRnh1SUNvZ1FISmxkSFZ5YmlCN1QySnFaV04wZlNCQlpHUnlaWE56SUc5aWFtVmpkRnh1SUNvdlhHNW1kVzVqZEdsdmJpQmZhR0Z1Wkd4bFFXUmtjbVZ6Y3lBb2RHOXJaVzV6S1NCN1hHNGdJR3hsZENCcGMwZHliM1Z3SUQwZ1ptRnNjMlZjYmlBZ2JHVjBJSE4wWVhSbElEMGdKM1JsZUhRblhHNGdJR3hsZENCaFpHUnlaWE56WEc0Z0lHTnZibk4wSUdGa1pISmxjM05sY3lBOUlGdGRYRzRnSUdOdmJuTjBJR1JoZEdFZ1BTQjdYRzRnSUNBZ1lXUmtjbVZ6Y3pvZ1cxMHNYRzRnSUNBZ1kyOXRiV1Z1ZERvZ1cxMHNYRzRnSUNBZ1ozSnZkWEE2SUZ0ZExGeHVJQ0FnSUhSbGVIUTZJRnRkWEc0Z0lIMWNibHh1SUNBdkx5QkdhV3gwWlhJZ2IzVjBJRHhoWkdSeVpYTnpaWE0rTENBb1kyOXRiV1Z1ZEhNcElHRnVaQ0J5WldkMWJHRnlJSFJsZUhSY2JpQWdabTl5SUNoc1pYUWdhU0E5SURBc0lHeGxiaUE5SUhSdmEyVnVjeTVzWlc1bmRHZzdJR2tnUENCc1pXNDdJR2tyS3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFJ2YTJWdUlEMGdkRzlyWlc1elcybGRYRzVjYmlBZ0lDQnBaaUFvZEc5clpXNHVkSGx3WlNBOVBUMGdKMjl3WlhKaGRHOXlKeWtnZTF4dUlDQWdJQ0FnYzNkcGRHTm9JQ2gwYjJ0bGJpNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQmpZWE5sSUNjOEp6cGNiaUFnSUNBZ0lDQWdJQ0J6ZEdGMFpTQTlJQ2RoWkdSeVpYTnpKMXh1SUNBZ0lDQWdJQ0FnSUdKeVpXRnJYRzRnSUNBZ0lDQWdJR05oYzJVZ0p5Z25PbHh1SUNBZ0lDQWdJQ0FnSUhOMFlYUmxJRDBnSjJOdmJXMWxiblFuWEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3RjYmlBZ0lDQWdJQ0FnWTJGelpTQW5PaWM2WEc0Z0lDQWdJQ0FnSUNBZ2MzUmhkR1VnUFNBblozSnZkWEFuWEc0Z0lDQWdJQ0FnSUNBZ2FYTkhjbTkxY0NBOUlIUnlkV1ZjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhMXh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUhOMFlYUmxJRDBnSjNSbGVIUW5YRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdsbUlDaDBiMnRsYmk1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCa1lYUmhXM04wWVhSbFhTNXdkWE5vS0hSdmEyVnVMblpoYkhWbEtWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRWxtSUhSb1pYSmxJR2x6SUc1dklIUmxlSFFnWW5WMElHRWdZMjl0YldWdWRDd2djbVZ3YkdGalpTQjBhR1VnZEhkdlhHNGdJR2xtSUNnaFpHRjBZUzUwWlhoMExteGxibWQwYUNBbUppQmtZWFJoTG1OdmJXMWxiblF1YkdWdVozUm9LU0I3WEc0Z0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNWpiMjF0Wlc1MFhHNGdJQ0FnWkdGMFlTNWpiMjF0Wlc1MElEMGdXMTFjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBjMGR5YjNWd0tTQjdYRzRnSUNBZ0x5OGdhSFIwY0RvdkwzUnZiMnh6TG1sbGRHWXViM0puTDJoMGJXd3ZjbVpqTWpneU1pTmhjSEJsYm1ScGVDMUJMakV1TTF4dUlDQWdJR1JoZEdFdWRHVjRkQ0E5SUdSaGRHRXVkR1Y0ZEM1cWIybHVLQ2NnSnlsY2JpQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaDdYRzRnSUNBZ0lDQnVZVzFsT2lCa1lYUmhMblJsZUhRZ2ZId2dLR0ZrWkhKbGMzTWdKaVlnWVdSa2NtVnpjeTV1WVcxbEtTeGNiaUFnSUNBZ0lHZHliM1Z3T2lCa1lYUmhMbWR5YjNWd0xteGxibWQwYUNBL0lIQmhjbk5sS0dSaGRHRXVaM0p2ZFhBdWFtOXBiaWduTENjcEtTQTZJRnRkWEc0Z0lDQWdmU2xjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0F2THlCSlppQnVieUJoWkdSeVpYTnpJSGRoY3lCbWIzVnVaQ3dnZEhKNUlIUnZJR1JsZEdWamRDQnZibVVnWm5KdmJTQnlaV2QxYkdGeUlIUmxlSFJjYmlBZ0lDQnBaaUFvSVdSaGRHRXVZV1JrY21WemN5NXNaVzVuZEdnZ0ppWWdaR0YwWVM1MFpYaDBMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SUdSaGRHRXVkR1Y0ZEM1c1pXNW5kR2dnTFNBeE95QnBJRDQ5SURBN0lHa3RMU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9aR0YwWVM1MFpYaDBXMmxkTG0xaGRHTm9LQzllVzE1QVhGeHpYU3RBVzE1QVhGeHpYU3NrTHlrcElIdGNiaUFnSUNBZ0lDQWdJQ0JrWVhSaExtRmtaSEpsYzNNZ1BTQmtZWFJoTG5SbGVIUXVjM0JzYVdObEtHa3NJREVwWEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3RjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCMllYSWdYM0psWjJWNFNHRnVaR3hsY2lBOUlHWjFibU4wYVc5dUlDaGhaR1J5WlhOektTQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaFpHRjBZUzVoWkdSeVpYTnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0FnSUdSaGRHRXVZV1JrY21WemN5QTlJRnRoWkdSeVpYTnpMblJ5YVcwb0tWMWNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdKeUFuWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGa1pISmxjM05jYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QnpkR2xzYkNCdWJ5QmhaR1J5WlhOelhHNGdJQ0FnSUNCcFppQW9JV1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJR1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdSaGRHRXVkR1Y0ZEZ0cFhTQTlJR1JoZEdFdWRHVjRkRnRwWFM1eVpYQnNZV05sS0M5Y1hITXFYRnhpVzE1QVhGeHpYU3RBVzE1QVhGeHpYU3RjWEdKY1hITXFMeXdnWDNKbFoyVjRTR0Z1Wkd4bGNpa3VkSEpwYlNncFhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dSaGRHRXVZV1JrY21WemN5NXNaVzVuZEdncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1NXWWdkR2hsY21VbmN5QnpkR2xzYkNCcGN5QnVieUIwWlhoMElHSjFkQ0JoSUdOdmJXMWxiblFnWlhocGVIUnpMQ0J5WlhCc1lXTmxJSFJvWlNCMGQyOWNiaUFnSUNCcFppQW9JV1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dKaVlnWkdGMFlTNWpiMjF0Wlc1MExteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ1pHRjBZUzUwWlhoMElEMGdaR0YwWVM1amIyMXRaVzUwWEc0Z0lDQWdJQ0JrWVhSaExtTnZiVzFsYm5RZ1BTQmJYVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRXRsWlhBZ2IyNXNlU0IwYUdVZ1ptbHljM1FnWVdSa2NtVnpjeUJ2WTJOMWNtVnVZMlVzSUhCMWMyZ2diM1JvWlhKeklIUnZJSEpsWjNWc1lYSWdkR1Y0ZEZ4dUlDQWdJR2xtSUNoa1lYUmhMbUZrWkhKbGMzTXViR1Z1WjNSb0lENGdNU2tnZTF4dUlDQWdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzUwWlhoMExtTnZibU5oZENoa1lYUmhMbUZrWkhKbGMzTXVjM0JzYVdObEtERXBLVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRXB2YVc0Z2RtRnNkV1Z6SUhkcGRHZ2djM0JoWTJWelhHNGdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzUwWlhoMExtcHZhVzRvSnlBbktWeHVJQ0FnSUdSaGRHRXVZV1JrY21WemN5QTlJR1JoZEdFdVlXUmtjbVZ6Y3k1cWIybHVLQ2NnSnlsY2JseHVJQ0FnSUdsbUlDZ2haR0YwWVM1aFpHUnlaWE56SUNZbUlHbHpSM0p2ZFhBcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCYlhWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JoWkdSeVpYTnpJRDBnZTF4dUlDQWdJQ0FnSUNCaFpHUnlaWE56T2lCa1lYUmhMbUZrWkhKbGMzTWdmSHdnWkdGMFlTNTBaWGgwSUh4OElDY25MRnh1SUNBZ0lDQWdJQ0J1WVcxbE9pQmtZWFJoTG5SbGVIUWdmSHdnWkdGMFlTNWhaR1J5WlhOeklIeDhJQ2NuWEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdsbUlDaGhaR1J5WlhOekxtRmtaSEpsYzNNZ1BUMDlJR0ZrWkhKbGMzTXVibUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvS0dGa1pISmxjM011WVdSa2NtVnpjeUI4ZkNBbkp5a3ViV0YwWTJnb0wwQXZLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHRmtaSEpsYzNNdWJtRnRaU0E5SUNjblhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdZV1JrY21WemN5NWhaR1J5WlhOeklEMGdKeWRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCaFpHUnlaWE56WlhNdWNIVnphQ2hoWkdSeVpYTnpLVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQmhaR1J5WlhOelpYTmNibjA3WEc1Y2JpOHFYRzRnS2lCUGNHVnlZWFJ2Y2lCMGIydGxibk1nWVc1a0lIZG9hV05vSUhSdmEyVnVjeUJoY21VZ1pYaHdaV04wWldRZ2RHOGdaVzVrSUhSb1pTQnpaWEYxWlc1alpWeHVJQ292WEc1amIyNXpkQ0JQVUVWU1FWUlBVbE1nUFNCN1hHNGdJQ2RjSWljNklDZGNJaWNzWEc0Z0lDY29Kem9nSnlrbkxGeHVJQ0FuUENjNklDYytKeXhjYmlBZ0p5d25PaUFuSnl4Y2JpQWdMeThnUjNKdmRYQnpJR0Z5WlNCbGJtUmxaQ0JpZVNCelpXMXBZMjlzYjI1elhHNGdJQ2M2SnpvZ0p6c25MRnh1SUNBdkx5QlRaVzFwWTI5c2IyNXpJR0Z5WlNCdWIzUWdZU0JzWldkaGJDQmtaV3hwYldsMFpYSWdjR1Z5SUhSb1pTQlNSa015T0RJeUlHZHlZVzF0WVhJZ2IzUm9aWEpjYmlBZ0x5OGdkR2hoYmlCbWIzSWdkR1Z5YldsdVlYUnBibWNnWVNCbmNtOTFjQ3dnWW5WMElIUm9aWGtnWVhKbElHRnNjMjhnYm05MElIWmhiR2xrSUdadmNpQmhibmxjYmlBZ0x5OGdiM1JvWlhJZ2RYTmxJR2x1SUhSb2FYTWdZMjl1ZEdWNGRDNGdJRWRwZG1WdUlIUm9ZWFFnYzI5dFpTQnRZV2xzSUdOc2FXVnVkSE1nYUdGMlpWeHVJQ0F2THlCb2FYTjBiM0pwWTJGc2JIa2dZV3hzYjNkbFpDQjBhR1VnYzJWdGFXTnZiRzl1SUdGeklHRWdaR1ZzYVcxcGRHVnlJR1Z4ZFdsMllXeGxiblFnZEc4Z2RHaGxYRzRnSUM4dklHTnZiVzFoSUdsdUlIUm9aV2x5SUZWSkxDQnBkQ0J0WVd0bGN5QnpaVzV6WlNCMGJ5QjBjbVZoZENCMGFHVnRJSFJvWlNCellXMWxJR0Z6SUdFZ1kyOXRiV0ZjYmlBZ0x5OGdkMmhsYmlCMWMyVmtJRzkxZEhOcFpHVWdiMllnWVNCbmNtOTFjQzVjYmlBZ0p6c25PaUFuSjF4dWZWeHVYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZU0JVYjJ0bGJtbDZaWElnYjJKcVpXTjBJR1p2Y2lCMGIydGxibWw2YVc1bklHRmtaSEpsYzNNZ1ptbGxiR1FnYzNSeWFXNW5jMXh1SUNwY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb2dRSEJoY21GdElIdFRkSEpwYm1kOUlITjBjaUJCWkdSeVpYTnpJR1pwWld4a0lITjBjbWx1WjF4dUlDb3ZYRzVqYkdGemN5QlViMnRsYm1sNlpYSWdlMXh1SUNCamIyNXpkSEoxWTNSdmNpQW9jM1J5S1NCN1hHNGdJQ0FnZEdocGN5NXpkSElnUFNBb2MzUnlJSHg4SUNjbktTNTBiMU4wY21sdVp5Z3BYRzRnSUNBZ2RHaHBjeTV2Y0dWeVlYUnZja04xY25KbGJuUWdQU0FuSjF4dUlDQWdJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jZ1BTQW5KMXh1SUNBZ0lIUm9hWE11Ym05a1pTQTlJRzUxYkd4Y2JpQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQm1ZV3h6WlZ4dUlDQWdJSFJvYVhNdWJHbHpkQ0E5SUZ0ZFhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWRzlyWlc1cGVtVnpJSFJvWlNCdmNtbG5hVzVoYkNCcGJuQjFkQ0J6ZEhKcGJtZGNiaUFnSUNwY2JpQWdJQ29nUUhKbGRIVnliaUI3UVhKeVlYbDlJRUZ1SUdGeWNtRjVJRzltSUc5d1pYSmhkRzl5ZkhSbGVIUWdkRzlyWlc1elhHNGdJQ0FxTDF4dUlDQjBiMnRsYm1sNlpTQW9LU0I3WEc0Z0lDQWdiR1YwSUdOb2NseHVJQ0FnSUd4bGRDQnNhWE4wSUQwZ1cxMWNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNQ3dnYkdWdUlEMGdkR2hwY3k1emRISXViR1Z1WjNSb095QnBJRHdnYkdWdU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdOb2NpQTlJSFJvYVhNdWMzUnlMbU5vWVhKQmRDaHBLVnh1SUNBZ0lDQWdkR2hwY3k1amFHVmphME5vWVhJb1kyaHlLVnh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YkdsemRDNW1iM0pGWVdOb0tHWjFibU4wYVc5dUlDaHViMlJsS1NCN1hHNGdJQ0FnSUNCdWIyUmxMblpoYkhWbElEMGdLRzV2WkdVdWRtRnNkV1VnZkh3Z0p5Y3BMblJ2VTNSeWFXNW5LQ2t1ZEhKcGJTZ3BYRzRnSUNBZ0lDQnBaaUFvYm05a1pTNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQnNhWE4wTG5CMWMyZ29ibTlrWlNsY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5S1Z4dVhHNGdJQ0FnY21WMGRYSnVJR3hwYzNSY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRhR1ZqYTNNZ2FXWWdZU0JqYUdGeVlXTjBaWElnYVhNZ1lXNGdiM0JsY21GMGIzSWdiM0lnZEdWNGRDQmhibVFnWVdOMGN5QmhZMk52Y21ScGJtZHNlVnh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFOMGNtbHVaMzBnWTJoeUlFTm9ZWEpoWTNSbGNpQm1jbTl0SUhSb1pTQmhaR1J5WlhOeklHWnBaV3hrWEc0Z0lDQXFMMXh1SUNCamFHVmphME5vWVhJZ0tHTm9jaWtnZTF4dUlDQWdJR2xtSUNnb1kyaHlJR2x1SUU5UVJWSkJWRTlTVXlCOGZDQmphSElnUFQwOUlDZGNYRnhjSnlrZ0ppWWdkR2hwY3k1bGMyTmhjR1ZrS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVZ6WTJGd1pXUWdQU0JtWVd4elpWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUFtSmlCamFISWdQVDA5SUhSb2FYTXViM0JsY21GMGIzSkZlSEJsWTNScGJtY3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWJtOWtaU0E5SUh0Y2JpQWdJQ0FnSUNBZ2RIbHdaVG9nSjI5d1pYSmhkRzl5Snl4Y2JpQWdJQ0FnSUNBZ2RtRnNkV1U2SUdOb2NseHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVzYVhOMExuQjFjMmdvZEdocGN5NXViMlJsS1Z4dUlDQWdJQ0FnZEdocGN5NXViMlJsSUQwZ2JuVnNiRnh1SUNBZ0lDQWdkR2hwY3k1dmNHVnlZWFJ2Y2tWNGNHVmpkR2x1WnlBOUlDY25YRzRnSUNBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCbVlXeHpaVnh1SUNBZ0lDQWdjbVYwZFhKdVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNnaGRHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUFtSmlCamFISWdhVzRnVDFCRlVrRlVUMUpUS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbTV2WkdVZ1BTQjdYRzRnSUNBZ0lDQWdJSFI1Y0dVNklDZHZjR1Z5WVhSdmNpY3NYRzRnSUNBZ0lDQWdJSFpoYkhWbE9pQmphSEpjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSFJvYVhNdWJHbHpkQzV3ZFhOb0tIUm9hWE11Ym05a1pTbGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTQTlJRzUxYkd4Y2JpQWdJQ0FnSUhSb2FYTXViM0JsY21GMGIzSkZlSEJsWTNScGJtY2dQU0JQVUVWU1FWUlBVbE5iWTJoeVhWeHVJQ0FnSUNBZ2RHaHBjeTVsYzJOaGNHVmtJRDBnWm1Gc2MyVmNiaUFnSUNBZ0lISmxkSFZ5Ymx4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNnaGRHaHBjeTVsYzJOaGNHVmtJQ1ltSUdOb2NpQTlQVDBnSjF4Y1hGd25LU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQjBjblZsWEc0Z0lDQWdJQ0J5WlhSMWNtNWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9JWFJvYVhNdWJtOWtaU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXViMlJsSUQwZ2UxeHVJQ0FnSUNBZ0lDQjBlWEJsT2lBbmRHVjRkQ2NzWEc0Z0lDQWdJQ0FnSUhaaGJIVmxPaUFuSjF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NXNhWE4wTG5CMWMyZ29kR2hwY3k1dWIyUmxLVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtVnpZMkZ3WldRZ0ppWWdZMmh5SUNFOVBTQW5YRnhjWENjcElIdGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTNTJZV3gxWlNBclBTQW5YRnhjWENkY2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxtNXZaR1V1ZG1Gc2RXVWdLejBnWTJoeVhHNGdJQ0FnZEdocGN5NWxjMk5oY0dWa0lEMGdabUZzYzJWY2JpQWdmVnh1ZlZ4dUlsMTkiLCIndXNlIHN0cmljdCc7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxuaWYgKEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbmlmICghSVNfUFVSRSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBhcnJheVB1c2ggPSBbXS5wdXNoO1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIE1BWF9VSU5UMzIgPSAweEZGRkZGRkZGO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gIVJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKFNQTElULCBuYXRpdmVTcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnLnNwbGl0KC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnLnNwbGl0KC8oPzopLywgLTEpLmxlbmd0aCAhPSA0IHx8XG4gICAgJ2FiJy5zcGxpdCgvKD86YWIpKi8pLmxlbmd0aCAhPSAyIHx8XG4gICAgJy4nLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aCAhPSA0IHx8XG4gICAgJy4nLnNwbGl0KC8oKSgpLykubGVuZ3RoID4gMSB8fFxuICAgICcnLnNwbGl0KC8uPy8pLmxlbmd0aFxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtzdHJpbmddO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltKTtcbiAgICAgIH1cbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weS5sYXN0SW5kZXg7XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoLmxlbmd0aCA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmcubGVuZ3RoKSBhcnJheVB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoID49IGxpbSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHkubGFzdEluZGV4ID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weS5sYXN0SW5kZXgrKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dC5sZW5ndGggPiBsaW0gPyBvdXRwdXQuc2xpY2UoMCwgbGltKSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnLnNwbGl0KHVuZGVmaW5lZCwgMCkubGVuZ3RoKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6IG5hdGl2ZVNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIGludGVybmFsU3BsaXQgPSBuYXRpdmVTcGxpdDtcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gbmF0aXZlU3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSBtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSwgIVNVUFBPUlRTX1kpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZm9yY2VkLXN0cmluZy1odG1sLW1ldGhvZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5saW5rYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubGlua1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2xpbmsnKSB9LCB7XG4gIGxpbms6IGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIG5hdGl2ZUZ1bmN0aW9uVG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KG5hdGl2ZUZ1bmN0aW9uVG9TdHJpbmcuY2FsbChXZWFrTWFwKSk7XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXModGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4obGVuZ3RoLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgcmV0dXJuICFTdHJpbmcoU3ltYm9sKCkpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgIT09ICdbb2JqZWN0IHpdJyA/IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59IDogdGVzdC50b1N0cmluZztcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgY29kZVBvaW50QXQsIGF0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklORyA/IFMuY2hhckF0KHBvc2l0aW9uKSA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkcgPyBTLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4geyB2YWx1ZTogaW5kZXgsIGRvbmU6IGZhbHNlIH07XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4geyB2YWx1ZTogdGFyZ2V0W2luZGV4XSwgZG9uZTogZmFsc2UgfTtcbiAgcmV0dXJuIHsgdmFsdWU6IFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGRvbmU6IGZhbHNlIH07XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgJyArIChuYW1lID8gbmFtZSArICcgJyA6ICcnKSArICdpbnZvY2F0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB2YXIgcmV0dXJuTWV0aG9kID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXR1cm5NZXRob2QgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0dXJuTWV0aG9kLmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2VyLWFnZW50Jyk7XG5cbnZhciBNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBJU19OT0RFID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgcXVldWVNaWNyb3Rhc2sgPSBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgJiYgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yLnZhbHVlO1xuXG52YXIgZmx1c2gsIGhlYWQsIGxhc3QsIG5vdGlmeSwgdG9nZ2xlLCBub2RlLCBwcm9taXNlO1xuXG4vLyBtb2Rlcm4gZW5naW5lcyBoYXZlIHF1ZXVlTWljcm90YXNrIG1ldGhvZFxuaWYgKCFxdWV1ZU1pY3JvdGFzaykge1xuICBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoSVNfTk9ERSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChNdXRhdGlvbk9ic2VydmVyICYmICEvKGlwaG9uZXxpcG9kfGlwYWQpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KSkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHF1ZXVlTWljcm90YXNrIHx8IGZ1bmN0aW9uIChmbikge1xuICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gIGlmICghaGVhZCkge1xuICAgIGhlYWQgPSB0YXNrO1xuICAgIG5vdGlmeSgpO1xuICB9IGxhc3QgPSB0YXNrO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdmFyIGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZTtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAbWF0Y2ggbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChNQVRDSCwgbmF0aXZlTWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgbWF0Y2hlciA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbTUFUQ0hdO1xuICAgICAgcmV0dXJuIG1hdGNoZXIgIT09IHVuZGVmaW5lZCA/IG1hdGNoZXIuY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcblxuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICByZXR1cm4gIU9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQuY2FsbChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCIvLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBQUkVGRVJSRURfU1RSSU5HKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpbnB1dC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2ludGVnZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc05hTihhcmd1bWVudCA9ICthcmd1bWVudCkgPyAwIDogKGFyZ3VtZW50ID4gMCA/IGZsb29yIDogY2VpbCkoYXJndW1lbnQpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMS4zJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0Q2hlY2tib3ggfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RDaGVja2JveCc7XG5cbmNsYXNzIENoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDaGVja2JveCB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoQ2hlY2tib3hDb21wb25lbnQsICdDaGVja2JveENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCB7IGh0bWxFZGl0b3JEZWZhdWx0Q29uZmlnLCBodG1sRWRpdG9yTGFuZ3NNYXAgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBFdmVudEtleUNvZGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgSHRtbEVkaXRvciB7XG5cdGVkaXRvcjtcblx0Ymx1clRpbWVyID0gMDtcblxuXHRfX3Jlc2l6YWJsZSA9IGZhbHNlO1xuXHRfX2luaXRlZCA9IGZhbHNlO1xuXG5cdG9uQmx1ciA9IG51bGw7XG5cdG9uUmVhZHkgPSBudWxsO1xuXHRvbk1vZGVDaGFuZ2UgPSBudWxsO1xuXG5cdGVsZW1lbnQ7XG5cdCRlbGVtZW50O1xuXG5cdHJlc2l6ZTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQmx1clxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZWFkeVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25Nb2RlQ2hhbmdlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbGVtZW50LCBvbkJsdXIgPSBudWxsLCBvblJlYWR5ID0gbnVsbCwgb25Nb2RlQ2hhbmdlID0gbnVsbCkge1xuXHRcdHRoaXMub25CbHVyID0gb25CbHVyO1xuXHRcdHRoaXMub25SZWFkeSA9IG9uUmVhZHk7XG5cdFx0dGhpcy5vbk1vZGVDaGFuZ2UgPSBvbk1vZGVDaGFuZ2U7XG5cblx0XHR0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXHRcdHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuXG5cdFx0dGhpcy5yZXNpemUgPSBfLnRocm90dGxlKF8uYmluZCh0aGlzLnJlc2l6ZUVkaXRvciwgdGhpcyksIDEwMCk7XG5cblx0XHR0aGlzLmluaXQoKTtcblx0fVxuXG5cdHJ1bk9uQmx1cigpIHtcblx0XHRpZiAodGhpcy5vbkJsdXIpIHtcblx0XHRcdHRoaXMub25CbHVyKCk7XG5cdFx0fVxuXHR9XG5cblx0Ymx1clRyaWdnZXIoKSB7XG5cdFx0aWYgKHRoaXMub25CbHVyKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKTtcblx0XHRcdHRoaXMuYmx1clRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJ1bk9uQmx1cigpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0Zm9jdXNUcmlnZ2VyKCkge1xuXHRcdGlmICh0aGlzLm9uQmx1cikge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNIdG1sKCkge1xuXHRcdHJldHVybiB0aGlzLmVkaXRvciA/ICd3eXNpd3lnJyA9PT0gdGhpcy5lZGl0b3IubW9kZSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0Y2xlYXJDYWNoZWRTaWduYXR1cmUoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnaW5zZXJ0U2lnbmF0dXJlJywge1xuXHRcdFx0XHRjbGVhckNhY2hlOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZVxuXHQgKiBAcGFyYW0ge2Jvb2x9IGh0bWxcblx0ICogQHBhcmFtIHtib29sfSBpbnNlcnRCZWZvcmVcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRzZXRTaWduYXR1cmUoc2lnbmF0dXJlLCBodG1sLCBpbnNlcnRCZWZvcmUgPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoJ2luc2VydFNpZ25hdHVyZScsIHtcblx0XHRcdFx0aXNIdG1sOiBodG1sLFxuXHRcdFx0XHRpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcblx0XHRcdFx0c2lnbmF0dXJlOiBzaWduYXR1cmVcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGNoZWNrRGlydHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdG9yID8gdGhpcy5lZGl0b3IuY2hlY2tEaXJ0eSgpIDogZmFsc2U7XG5cdH1cblxuXHRyZXNldERpcnR5KCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dGhpcy5lZGl0b3IucmVzZXREaXJ0eSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cmFwSXNIdG1sID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdldERhdGEod3JhcElzSHRtbCA9IGZhbHNlKSB7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCdwbGFpbicgPT09IHRoaXMuZWRpdG9yLm1vZGUgJiYgdGhpcy5lZGl0b3IucGx1Z2lucy5wbGFpbiAmJiB0aGlzLmVkaXRvci5fX3BsYWluKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5lZGl0b3IuX19wbGFpbi5nZXRSYXdEYXRhKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gd3JhcElzSHRtbFxuXHRcdFx0XHRcdFx0PyAnPGRpdiBkYXRhLWh0bWwtZWRpdG9yLWZvbnQtd3JhcHBlcj1cInRydWVcIiBzdHlsZT1cImZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxM3B4O1wiPicgK1xuXHRcdFx0XHRcdFx0ICB0aGlzLmVkaXRvci5nZXREYXRhKCkgK1xuXHRcdFx0XHRcdFx0ICAnPC9kaXY+J1xuXHRcdFx0XHRcdFx0OiB0aGlzLmVkaXRvci5nZXREYXRhKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBJc0h0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0RGF0YVdpdGhIdG1sTWFyayh3cmFwSXNIdG1sID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gKHRoaXMuaXNIdG1sKCkgPyAnOkhUTUw6JyA6ICcnKSArIHRoaXMuZ2V0RGF0YSh3cmFwSXNIdG1sKTtcblx0fVxuXG5cdG1vZGVUb2dnbGUocGxhaW4sIHJlc2l6ZSkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKHBsYWluKSB7XG5cdFx0XHRcdFx0aWYgKCdwbGFpbicgPT09IHRoaXMuZWRpdG9yLm1vZGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnNldE1vZGUoJ3d5c2l3eWcnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlKSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0TW9kZSgncGxhaW4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRpZiAocmVzaXplKSB7XG5cdFx0XHRcdHRoaXMucmVzaXplKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c2V0SHRtbE9yUGxhaW4odGV4dCwgZm9jdXMpIHtcblx0XHRpZiAoJzpIVE1MOicgPT09IHRleHQuc3Vic3RyKDAsIDYpKSB7XG5cdFx0XHR0aGlzLnNldEh0bWwodGV4dC5zdWJzdHIoNiksIGZvY3VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRQbGFpbih0ZXh0LCBmb2N1cyk7XG5cdFx0fVxuXHR9XG5cblx0c2V0SHRtbChodG1sLCBmb2N1cykge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9faW5pdGVkKSB7XG5cdFx0XHR0aGlzLmNsZWFyQ2FjaGVkU2lnbmF0dXJlKCk7XG5cblx0XHRcdHRoaXMubW9kZVRvZ2dsZSh0cnVlKTtcblxuXHRcdFx0aHRtbCA9IGh0bWwucmVwbGFjZSgvPHBbXj5dKj48XFwvcD4vZ2ksICcnKTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0RGF0YShodG1sKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRcdFx0aWYgKGZvY3VzKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXBsYWNlSHRtbChmaW5kLCByZXBsYWNlSHRtbCkge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9faW5pdGVkICYmICd3eXNpd3lnJyA9PT0gdGhpcy5lZGl0b3IubW9kZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0RGF0YSh0aGlzLmVkaXRvci5nZXREYXRhKCkucmVwbGFjZShmaW5kLCByZXBsYWNlSHRtbCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHNldFBsYWluKHBsYWluLCBmb2N1cykge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9faW5pdGVkKSB7XG5cdFx0XHR0aGlzLmNsZWFyQ2FjaGVkU2lnbmF0dXJlKCk7XG5cblx0XHRcdHRoaXMubW9kZVRvZ2dsZShmYWxzZSk7XG5cdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSAmJiB0aGlzLmVkaXRvci5wbHVnaW5zLnBsYWluICYmIHRoaXMuZWRpdG9yLl9fcGxhaW4pIHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuX19wbGFpbi5zZXRSYXdEYXRhKHBsYWluKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0RGF0YShwbGFpbik7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHRcdH1cblxuXHRcdFx0aWYgKGZvY3VzKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpbml0KCkge1xuXHRcdGlmICh0aGlzLmVsZW1lbnQgJiYgIXRoaXMuZWRpdG9yKSB7XG5cdFx0XHRjb25zdCBpbml0RnVuYyA9ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgY29uZmlnID0gaHRtbEVkaXRvckRlZmF1bHRDb25maWcsXG5cdFx0XHRcdFx0bGFuZ3VhZ2UgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnTGFuZ3VhZ2UnKSxcblx0XHRcdFx0XHRhbGxvd1NvdXJjZSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93SHRtbEVkaXRvclNvdXJjZUJ1dHRvbicpLFxuXHRcdFx0XHRcdGJpdGkgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhbGxvd0h0bWxFZGl0b3JCaXRpQnV0dG9ucycpO1xuXG5cdFx0XHRcdGlmICgoYWxsb3dTb3VyY2UgfHwgIWJpdGkpICYmICFjb25maWcudG9vbGJhckdyb3Vwcy5fX2NmZ0luaXRlZCkge1xuXHRcdFx0XHRcdGNvbmZpZy50b29sYmFyR3JvdXBzLl9fY2ZnSW5pdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdGlmIChhbGxvd1NvdXJjZSkge1xuXHRcdFx0XHRcdFx0Y29uZmlnLnJlbW92ZUJ1dHRvbnMgPSBjb25maWcucmVtb3ZlQnV0dG9ucy5yZXBsYWNlKCcsU291cmNlJywgJycpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghYml0aSkge1xuXHRcdFx0XHRcdFx0Y29uZmlnLnJlbW92ZVBsdWdpbnMgKz0gKGNvbmZpZy5yZW1vdmVQbHVnaW5zID8gJywnIDogJycpICsgJ2JpZGknO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbmZpZy5lbnRlck1vZGUgPSB3aW5kb3cuQ0tFRElUT1IuRU5URVJfQlI7XG5cdFx0XHRcdGNvbmZpZy5zaGlmdEVudGVyTW9kZSA9IHdpbmRvdy5DS0VESVRPUi5FTlRFUl9QO1xuXG5cdFx0XHRcdGNvbmZpZy5sYW5ndWFnZSA9IGh0bWxFZGl0b3JMYW5nc01hcFsobGFuZ3VhZ2UgfHwgJ2VuJykudG9Mb3dlckNhc2UoKV0gfHwgJ2VuJztcblx0XHRcdFx0aWYgKHdpbmRvdy5DS0VESVRPUi5lbnYpIHtcblx0XHRcdFx0XHR3aW5kb3cuQ0tFRElUT1IuZW52LmlzQ29tcGF0aWJsZSA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmVkaXRvciA9IHdpbmRvdy5DS0VESVRPUi5hcHBlbmRUbyh0aGlzLmVsZW1lbnQsIGNvbmZpZyk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2tleScsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudCAmJiBldmVudC5kYXRhICYmIEV2ZW50S2V5Q29kZS5UYWIgPT09IGV2ZW50LmRhdGEua2V5Q29kZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignYmx1cicsICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmJsdXJUcmlnZ2VyKCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdtb2RlJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmx1clRyaWdnZXIoKTtcblx0XHRcdFx0XHRpZiAodGhpcy5vbk1vZGVDaGFuZ2UpIHtcblx0XHRcdFx0XHRcdHRoaXMub25Nb2RlQ2hhbmdlKCdwbGFpbicgIT09IHRoaXMuZWRpdG9yLm1vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2ZvY3VzJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXNUcmlnZ2VyKCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmICh3aW5kb3cuRmlsZVJlYWRlcikge1xuXHRcdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdkcm9wJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoMCA8IGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLmdldEZpbGVzQ291bnQoKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmaWxlID0gZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuZ2V0RmlsZSgwKTtcblx0XHRcdFx0XHRcdFx0aWYgKGZpbGUgJiYgd2luZG93LkZpbGVSZWFkZXIgJiYgZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuaWQgJiYgZmlsZS50eXBlICYmIGZpbGUudHlwZS5tYXRjaCgvXmltYWdlL2kpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaWQgPSBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5pZCxcblx0XHRcdFx0XHRcdFx0XHRcdGltYWdlSWQgPSBgW2ltZz0ke2lkfV1gLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVhZGVyID0gbmV3IHdpbmRvdy5GaWxlUmVhZGVyKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRyZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlYWRlci5yZXN1bHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZXBsYWNlSHRtbChpbWFnZUlkLCBgPGltZyBzcmM9XCIke3JlYWRlci5yZXN1bHR9XCIgLz5gKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L2h0bWwnLCBpbWFnZUlkKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2luc3RhbmNlUmVhZHknLCAoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgnY3V0Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgnY29weScpO1xuXHRcdFx0XHRcdFx0dGhpcy5lZGl0b3IucmVtb3ZlTWVudUl0ZW0oJ3Bhc3RlJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5fX3Jlc2l6YWJsZSA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5fX2luaXRlZCA9IHRydWU7XG5cblx0XHRcdFx0XHR0aGlzLnJlc2l6ZSgpO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMub25SZWFkeSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vblJlYWR5KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cblx0XHRcdGlmICh3aW5kb3cuQ0tFRElUT1IpIHtcblx0XHRcdFx0aW5pdEZ1bmMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvdy5fX2luaXRFZGl0b3IgPSBpbml0RnVuYztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmb2N1cygpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuZWRpdG9yLmZvY3VzKCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0aGFzRm9jdXMoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gISF0aGlzLmVkaXRvci5mb2N1c01hbmFnZXIuaGFzRm9jdXM7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ymx1cigpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuZWRpdG9yLmZvY3VzTWFuYWdlci5ibHVyKHRydWUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHJlc2l6ZUVkaXRvcigpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IgJiYgdGhpcy5fX3Jlc2l6YWJsZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IucmVzaXplKHRoaXMuJGVsZW1lbnQud2lkdGgoKSwgdGhpcy4kZWxlbWVudC5pbm5lckhlaWdodCgpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRzZXRSZWFkT25seSh2YWx1ZSkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0UmVhZE9ubHkoISF2YWx1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXIoZm9jdXMpIHtcblx0XHR0aGlzLnNldEh0bWwoJycsIGZvY3VzKTtcblx0fVxufVxuXG5leHBvcnQgeyBIdG1sRWRpdG9yLCBIdG1sRWRpdG9yIGFzIGRlZmF1bHQgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmVkdWNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbGFzdC1pbmRleC1vZlwiKTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5cbmNvbnN0IE9wZW50aXAgPSB3aW5kb3cuT3BlbnRpcCB8fCB7fTtcblxuT3BlbnRpcC5zdHlsZXMgPSBPcGVudGlwLnN0eWxlcyB8fCB7fTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3AgPSB7XG5cdCdleHRlbmRzJzogJ3N0YW5kYXJkJyxcblxuXHQnZml4ZWQnOiB0cnVlLFxuXHQndGFyZ2V0JzogdHJ1ZSxcblxuXHQnZGVsYXknOiAwLjIsXG5cdCdoaWRlRGVsYXknOiAwLFxuXG5cdCdoaWRlRWZmZWN0JzogJ2ZhZGUnLFxuXHQnaGlkZUVmZmVjdER1cmF0aW9uJzogMC4yLFxuXG5cdCdzaG93RWZmZWN0JzogJ2ZhZGUnLFxuXHQnc2hvd0VmZmVjdER1cmF0aW9uJzogMC4yLFxuXG5cdCdzaG93T24nOiAnbW91c2VvdmVyIGNsaWNrJyxcblx0J3JlbW92ZUVsZW1lbnRzT25IaWRlJzogdHJ1ZSxcblxuXHQnYmFja2dyb3VuZCc6ICcjZmZmJyxcblx0J3NoYWRvdyc6IGZhbHNlLFxuXG5cdCdib3JkZXJDb2xvcic6ICcjOTk5Jyxcblx0J2JvcmRlclJhZGl1cyc6IDIsXG5cdCdib3JkZXJXaWR0aCc6IDFcbn07XG5cbk9wZW50aXAuc3R5bGVzLnJhaW5sb29wVGlwID0ge1xuXHQnZXh0ZW5kcyc6ICdyYWlubG9vcCcsXG5cdCdkZWxheSc6IDAuNCxcblx0J2dyb3VwJzogJ3JhaW5sb29wVGlwcydcbn07XG5cbk9wZW50aXAuc3R5bGVzLnJhaW5sb29wRXJyb3JUaXAgPSB7XG5cdCdleHRlbmRzJzogJ3JhaW5sb29wJyxcblx0J2NsYXNzTmFtZSc6ICdyYWlubG9vcEVycm9yVGlwJ1xufTtcblxuZXhwb3J0IHsgT3BlbnRpcCwgT3BlbnRpcCBhcyBkZWZhdWx0IH07XG4iLCIvKiFcbiAqIFBpa2FkYXlcbiAqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNCBEYXZpZCBCdXNoZWxsIHwgQlNEICYgTUlUIGxpY2Vuc2UgfCBodHRwczovL2dpdGh1Yi5jb20vUGlrYWRheS9QaWthZGF5XG4gKi9cblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KVxue1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBtb21lbnQ7XG4gICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBDb21tb25KUyBtb2R1bGVcbiAgICAgICAgLy8gTG9hZCBtb21lbnQuanMgYXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeVxuICAgICAgICB0cnkgeyBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTsgfSBjYXRjaCAoZSkge31cbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KG1vbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgICAgICBkZWZpbmUoZnVuY3Rpb24gKHJlcSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gTG9hZCBtb21lbnQuanMgYXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeVxuICAgICAgICAgICAgdmFyIGlkID0gJ21vbWVudCc7XG4gICAgICAgICAgICB0cnkgeyBtb21lbnQgPSByZXEoaWQpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkobW9tZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5QaWthZGF5ID0gZmFjdG9yeShyb290Lm1vbWVudCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiAobW9tZW50KVxue1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIGZlYXR1cmUgZGV0ZWN0aW9uIGFuZCBoZWxwZXIgZnVuY3Rpb25zXG4gICAgICovXG4gICAgdmFyIGhhc01vbWVudCA9IHR5cGVvZiBtb21lbnQgPT09ICdmdW5jdGlvbicsXG5cbiAgICBoYXNFdmVudExpc3RlbmVycyA9ICEhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIsXG5cbiAgICBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudCxcblxuICAgIHN0byA9IHdpbmRvdy5zZXRUaW1lb3V0LFxuXG4gICAgYWRkRXZlbnQgPSBmdW5jdGlvbihlbCwgZSwgY2FsbGJhY2ssIGNhcHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZSwgY2FsbGJhY2ssICEhY2FwdHVyZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbC5hdHRhY2hFdmVudCgnb24nICsgZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oZWwsIGUsIGNhbGxiYWNrLCBjYXB0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGUsIGNhbGxiYWNrLCAhIWNhcHR1cmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwuZGV0YWNoRXZlbnQoJ29uJyArIGUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB0cmltID0gZnVuY3Rpb24oc3RyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCcnKTtcbiAgICB9LFxuXG4gICAgaGFzQ2xhc3MgPSBmdW5jdGlvbihlbCwgY24pXG4gICAge1xuICAgICAgICByZXR1cm4gKCcgJyArIGVsLmNsYXNzTmFtZSArICcgJykuaW5kZXhPZignICcgKyBjbiArICcgJykgIT09IC0xO1xuICAgIH0sXG5cbiAgICBhZGRDbGFzcyA9IGZ1bmN0aW9uKGVsLCBjbilcbiAgICB7XG4gICAgICAgIGlmICghaGFzQ2xhc3MoZWwsIGNuKSkge1xuICAgICAgICAgICAgZWwuY2xhc3NOYW1lID0gKGVsLmNsYXNzTmFtZSA9PT0gJycpID8gY24gOiBlbC5jbGFzc05hbWUgKyAnICcgKyBjbjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uKGVsLCBjbilcbiAgICB7XG4gICAgICAgIGVsLmNsYXNzTmFtZSA9IHRyaW0oKCcgJyArIGVsLmNsYXNzTmFtZSArICcgJykucmVwbGFjZSgnICcgKyBjbiArICcgJywgJyAnKSk7XG4gICAgfSxcblxuICAgIGlzQXJyYXkgPSBmdW5jdGlvbihvYmopXG4gICAge1xuICAgICAgICByZXR1cm4gKC9BcnJheS8pLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpO1xuICAgIH0sXG5cbiAgICBpc0RhdGUgPSBmdW5jdGlvbihvYmopXG4gICAge1xuICAgICAgICByZXR1cm4gKC9EYXRlLykudGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgJiYgIWlzTmFOKG9iai5nZXRUaW1lKCkpO1xuICAgIH0sXG5cbiAgICBpc1dlZWtlbmQgPSBmdW5jdGlvbihkYXRlKVxuICAgIHtcbiAgICAgICAgdmFyIGRheSA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIHJldHVybiBkYXkgPT09IDAgfHwgZGF5ID09PSA2O1xuICAgIH0sXG5cbiAgICBpc0xlYXBZZWFyID0gZnVuY3Rpb24oeWVhcilcbiAgICB7XG4gICAgICAgIC8vIHNvbHV0aW9uIGJ5IE1hdHRpIFZpcmtrdW5lbjogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDg4MTk1MVxuICAgICAgICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFszMSwgaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb250aF07XG4gICAgfSxcblxuICAgIHNldFRvU3RhcnRPZkRheSA9IGZ1bmN0aW9uKGRhdGUpXG4gICAge1xuICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSBkYXRlLnNldEhvdXJzKDAsMCwwLDApO1xuICAgIH0sXG5cbiAgICBjb21wYXJlRGF0ZXMgPSBmdW5jdGlvbihhLGIpXG4gICAge1xuICAgICAgICAvLyB3ZWFrIGRhdGUgY29tcGFyaXNvbiAodXNlIHNldFRvU3RhcnRPZkRheShkYXRlKSB0byBlbnN1cmUgY29ycmVjdCByZXN1bHQpXG4gICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XG4gICAgfSxcblxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKHRvLCBmcm9tLCBvdmVyd3JpdGUpXG4gICAge1xuICAgICAgICB2YXIgcHJvcCwgaGFzUHJvcDtcbiAgICAgICAgZm9yIChwcm9wIGluIGZyb20pIHtcbiAgICAgICAgICAgIGhhc1Byb3AgPSB0b1twcm9wXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGhhc1Byb3AgJiYgdHlwZW9mIGZyb21bcHJvcF0gPT09ICdvYmplY3QnICYmIGZyb21bcHJvcF0gIT09IG51bGwgJiYgZnJvbVtwcm9wXS5ub2RlTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGF0ZShmcm9tW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IG5ldyBEYXRlKGZyb21bcHJvcF0uZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5KGZyb21bcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gZnJvbVtwcm9wXS5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gZXh0ZW5kKHt9LCBmcm9tW3Byb3BdLCBvdmVyd3JpdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3ZlcndyaXRlIHx8ICFoYXNQcm9wKSB7XG4gICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9LFxuXG4gICAgZmlyZUV2ZW50ID0gZnVuY3Rpb24oZWwsIGV2ZW50TmFtZSwgZGF0YSlcbiAgICB7XG4gICAgICAgIHZhciBldjtcblxuICAgICAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICAgICAgICAgIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgICAgICAgICAgIGV2LmluaXRFdmVudChldmVudE5hbWUsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgIGV2ID0gZXh0ZW5kKGV2LCBkYXRhKTtcbiAgICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQoZXYpO1xuICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KSB7XG4gICAgICAgICAgICBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG4gICAgICAgICAgICBldiA9IGV4dGVuZChldiwgZGF0YSk7XG4gICAgICAgICAgICBlbC5maXJlRXZlbnQoJ29uJyArIGV2ZW50TmFtZSwgZXYpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFkanVzdENhbGVuZGFyID0gZnVuY3Rpb24oY2FsZW5kYXIpIHtcbiAgICAgICAgaWYgKGNhbGVuZGFyLm1vbnRoIDwgMCkge1xuICAgICAgICAgICAgY2FsZW5kYXIueWVhciAtPSBNYXRoLmNlaWwoTWF0aC5hYnMoY2FsZW5kYXIubW9udGgpLzEyKTtcbiAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRoICs9IDEyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxlbmRhci5tb250aCA+IDExKSB7XG4gICAgICAgICAgICBjYWxlbmRhci55ZWFyICs9IE1hdGguZmxvb3IoTWF0aC5hYnMoY2FsZW5kYXIubW9udGgpLzEyKTtcbiAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRoIC09IDEyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxlbmRhcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZGVmYXVsdHMgYW5kIGxvY2FsaXNhdGlvblxuICAgICAqL1xuICAgIGRlZmF1bHRzID0ge1xuXG4gICAgICAgIC8vIGJpbmQgdGhlIHBpY2tlciB0byBhIGZvcm0gZmllbGRcbiAgICAgICAgZmllbGQ6IG51bGwsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzaG93L2hpZGUgdGhlIHBpY2tlciBvbiBgZmllbGRgIGZvY3VzIChkZWZhdWx0IGB0cnVlYCBpZiBgZmllbGRgIGlzIHNldClcbiAgICAgICAgYm91bmQ6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBkYXRhLWF0dHJpYnV0ZSBvbiB0aGUgaW5wdXQgZmllbGQgd2l0aCBhbiBhcmlhIGFzc2lzdGFuY2UgdGVrc3QgKG9ubHkgYXBwbGllZCB3aGVuIGBib3VuZGAgaXMgc2V0KVxuICAgICAgICBhcmlhTGFiZWw6ICdVc2UgdGhlIGFycm93IGtleXMgdG8gcGljayBhIGRhdGUnLFxuXG4gICAgICAgIC8vIHBvc2l0aW9uIG9mIHRoZSBkYXRlcGlja2VyLCByZWxhdGl2ZSB0byB0aGUgZmllbGQgKGRlZmF1bHQgdG8gYm90dG9tICYgbGVmdClcbiAgICAgICAgLy8gKCdib3R0b20nICYgJ2xlZnQnIGtleXdvcmRzIGFyZSBub3QgdXNlZCwgJ3RvcCcgJiAncmlnaHQnIGFyZSBtb2RpZmllciBvbiB0aGUgYm90dG9tL2xlZnQgcG9zaXRpb24pXG4gICAgICAgIHBvc2l0aW9uOiAnYm90dG9tIGxlZnQnLFxuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgZml0IGluIHRoZSB2aWV3cG9ydCBldmVuIGlmIGl0IG1lYW5zIHJlcG9zaXRpb25pbmcgZnJvbSB0aGUgcG9zaXRpb24gb3B0aW9uXG4gICAgICAgIHJlcG9zaXRpb246IHRydWUsXG5cbiAgICAgICAgLy8gdGhlIGRlZmF1bHQgb3V0cHV0IGZvcm1hdCBmb3IgYC50b1N0cmluZygpYCBhbmQgYGZpZWxkYCB2YWx1ZVxuICAgICAgICBmb3JtYXQ6ICdZWVlZLU1NLUREJyxcblxuICAgICAgICAvLyB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gd2hpY2ggZ2V0cyBwYXNzZWQgYSBjdXJyZW50IGRhdGUgb2JqZWN0IGFuZCBmb3JtYXRcbiAgICAgICAgLy8gYW5kIHJldHVybnMgYSBzdHJpbmdcbiAgICAgICAgdG9TdHJpbmc6IG51bGwsXG5cbiAgICAgICAgLy8gdXNlZCB0byBjcmVhdGUgZGF0ZSBvYmplY3QgZnJvbSBjdXJyZW50IGlucHV0IHN0cmluZ1xuICAgICAgICBwYXJzZTogbnVsbCxcblxuICAgICAgICAvLyB0aGUgaW5pdGlhbCBkYXRlIHRvIHZpZXcgd2hlbiBmaXJzdCBvcGVuZWRcbiAgICAgICAgZGVmYXVsdERhdGU6IG51bGwsXG5cbiAgICAgICAgLy8gbWFrZSB0aGUgYGRlZmF1bHREYXRlYCB0aGUgaW5pdGlhbCBzZWxlY3RlZCB2YWx1ZVxuICAgICAgICBzZXREZWZhdWx0RGF0ZTogZmFsc2UsXG5cbiAgICAgICAgLy8gZmlyc3QgZGF5IG9mIHdlZWsgKDA6IFN1bmRheSwgMTogTW9uZGF5IGV0YylcbiAgICAgICAgZmlyc3REYXk6IDAsXG5cbiAgICAgICAgLy8gdGhlIGRlZmF1bHQgZmxhZyBmb3IgbW9tZW50J3Mgc3RyaWN0IGRhdGUgcGFyc2luZ1xuICAgICAgICBmb3JtYXRTdHJpY3Q6IGZhbHNlLFxuXG4gICAgICAgIC8vIHRoZSBtaW5pbXVtL2VhcmxpZXN0IGRhdGUgdGhhdCBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgICAgbWluRGF0ZTogbnVsbCxcbiAgICAgICAgLy8gdGhlIG1heGltdW0vbGF0ZXN0IGRhdGUgdGhhdCBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgICAgbWF4RGF0ZTogbnVsbCxcblxuICAgICAgICAvLyBudW1iZXIgb2YgeWVhcnMgZWl0aGVyIHNpZGUsIG9yIGFycmF5IG9mIHVwcGVyL2xvd2VyIHJhbmdlXG4gICAgICAgIHllYXJSYW5nZTogMTAsXG5cbiAgICAgICAgLy8gc2hvdyB3ZWVrIG51bWJlcnMgYXQgaGVhZCBvZiByb3dcbiAgICAgICAgc2hvd1dlZWtOdW1iZXI6IGZhbHNlLFxuXG4gICAgICAgIC8vIFdlZWsgcGlja2VyIG1vZGVcbiAgICAgICAgcGlja1dob2xlV2VlazogZmFsc2UsXG5cbiAgICAgICAgLy8gdXNlZCBpbnRlcm5hbGx5IChkb24ndCBjb25maWcgb3V0c2lkZSlcbiAgICAgICAgbWluWWVhcjogMCxcbiAgICAgICAgbWF4WWVhcjogOTk5OSxcbiAgICAgICAgbWluTW9udGg6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4TW9udGg6IHVuZGVmaW5lZCxcblxuICAgICAgICBzdGFydFJhbmdlOiBudWxsLFxuICAgICAgICBlbmRSYW5nZTogbnVsbCxcblxuICAgICAgICBpc1JUTDogZmFsc2UsXG5cbiAgICAgICAgLy8gQWRkaXRpb25hbCB0ZXh0IHRvIGFwcGVuZCB0byB0aGUgeWVhciBpbiB0aGUgY2FsZW5kYXIgdGl0bGVcbiAgICAgICAgeWVhclN1ZmZpeDogJycsXG5cbiAgICAgICAgLy8gUmVuZGVyIHRoZSBtb250aCBhZnRlciB5ZWFyIGluIHRoZSBjYWxlbmRhciB0aXRsZVxuICAgICAgICBzaG93TW9udGhBZnRlclllYXI6IGZhbHNlLFxuXG4gICAgICAgIC8vIFJlbmRlciBkYXlzIG9mIHRoZSBjYWxlbmRhciBncmlkIHRoYXQgZmFsbCBpbiB0aGUgbmV4dCBvciBwcmV2aW91cyBtb250aFxuICAgICAgICBzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiBmYWxzZSxcblxuICAgICAgICAvLyBBbGxvd3MgdXNlciB0byBzZWxlY3QgZGF5cyB0aGF0IGZhbGwgaW4gdGhlIG5leHQgb3IgcHJldmlvdXMgbW9udGhcbiAgICAgICAgZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiBmYWxzZSxcblxuICAgICAgICAvLyBob3cgbWFueSBtb250aHMgYXJlIHZpc2libGVcbiAgICAgICAgbnVtYmVyT2ZNb250aHM6IDEsXG5cbiAgICAgICAgLy8gd2hlbiBudW1iZXJPZk1vbnRocyBpcyB1c2VkLCB0aGlzIHdpbGwgaGVscCB5b3UgdG8gY2hvb3NlIHdoZXJlIHRoZSBtYWluIGNhbGVuZGFyIHdpbGwgYmUgKGRlZmF1bHQgYGxlZnRgLCBjYW4gYmUgc2V0IHRvIGByaWdodGApXG4gICAgICAgIC8vIG9ubHkgdXNlZCBmb3IgdGhlIGZpcnN0IGRpc3BsYXkgb3Igd2hlbiBhIHNlbGVjdGVkIGRhdGUgaXMgbm90IHZpc2libGVcbiAgICAgICAgbWFpbkNhbGVuZGFyOiAnbGVmdCcsXG5cbiAgICAgICAgLy8gU3BlY2lmeSBhIERPTSBlbGVtZW50IHRvIHJlbmRlciB0aGUgY2FsZW5kYXIgaW5cbiAgICAgICAgY29udGFpbmVyOiB1bmRlZmluZWQsXG5cbiAgICAgICAgLy8gQmx1ciBmaWVsZCB3aGVuIGRhdGUgaXMgc2VsZWN0ZWRcbiAgICAgICAgYmx1ckZpZWxkT25TZWxlY3QgOiB0cnVlLFxuXG4gICAgICAgIC8vIGludGVybmF0aW9uYWxpemF0aW9uXG4gICAgICAgIGkxOG46IHtcbiAgICAgICAgICAgIHByZXZpb3VzTW9udGggOiAnUHJldmlvdXMgTW9udGgnLFxuICAgICAgICAgICAgbmV4dE1vbnRoICAgICA6ICdOZXh0IE1vbnRoJyxcbiAgICAgICAgICAgIG1vbnRocyAgICAgICAgOiBbJ0phbnVhcnknLCdGZWJydWFyeScsJ01hcmNoJywnQXByaWwnLCdNYXknLCdKdW5lJywnSnVseScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXG4gICAgICAgICAgICB3ZWVrZGF5cyAgICAgIDogWydTdW5kYXknLCdNb25kYXknLCdUdWVzZGF5JywnV2VkbmVzZGF5JywnVGh1cnNkYXknLCdGcmlkYXknLCdTYXR1cmRheSddLFxuICAgICAgICAgICAgd2Vla2RheXNTaG9ydCA6IFsnU3VuJywnTW9uJywnVHVlJywnV2VkJywnVGh1JywnRnJpJywnU2F0J11cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBUaGVtZSBDbGFzc25hbWVcbiAgICAgICAgdGhlbWU6IG51bGwsXG5cbiAgICAgICAgLy8gZXZlbnRzIGFycmF5XG4gICAgICAgIGV2ZW50czogW10sXG5cbiAgICAgICAgLy8gY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgICAgb25TZWxlY3Q6IG51bGwsXG4gICAgICAgIG9uT3BlbjogbnVsbCxcbiAgICAgICAgb25DbG9zZTogbnVsbCxcbiAgICAgICAgb25EcmF3OiBudWxsLFxuXG4gICAgICAgIC8vIEVuYWJsZSBrZXlib2FyZCBpbnB1dFxuICAgICAgICBrZXlib2FyZElucHV0OiB0cnVlXG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogdGVtcGxhdGluZyBmdW5jdGlvbnMgdG8gYWJzdHJhY3QgSFRNTCByZW5kZXJpbmdcbiAgICAgKi9cbiAgICByZW5kZXJEYXlOYW1lID0gZnVuY3Rpb24ob3B0cywgZGF5LCBhYmJyKVxuICAgIHtcbiAgICAgICAgZGF5ICs9IG9wdHMuZmlyc3REYXk7XG4gICAgICAgIHdoaWxlIChkYXkgPj0gNykge1xuICAgICAgICAgICAgZGF5IC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFiYnIgPyBvcHRzLmkxOG4ud2Vla2RheXNTaG9ydFtkYXldIDogb3B0cy5pMThuLndlZWtkYXlzW2RheV07XG4gICAgfSxcblxuICAgIHJlbmRlckRheSA9IGZ1bmN0aW9uKG9wdHMpXG4gICAge1xuICAgICAgICB2YXIgYXJyID0gW107XG4gICAgICAgIHZhciBhcmlhU2VsZWN0ZWQgPSAnZmFsc2UnO1xuICAgICAgICBpZiAob3B0cy5pc0VtcHR5KSB7XG4gICAgICAgICAgICBpZiAob3B0cy5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goJ2lzLW91dHNpZGUtY3VycmVudC1tb250aCcpO1xuXG4gICAgICAgICAgICAgICAgaWYoIW9wdHMuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zZWxlY3Rpb24tZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICc8dGQgY2xhc3M9XCJpcy1lbXB0eVwiPjwvdGQ+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc1RvZGF5KSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtdG9kYXknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIGFyaWFTZWxlY3RlZCA9ICd0cnVlJztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5oYXNFdmVudCkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2hhcy1ldmVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzSW5SYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLWlucmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc1N0YXJ0UmFuZ2UpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zdGFydHJhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuaXNFbmRSYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLWVuZHJhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICc8dGQgZGF0YS1kYXk9XCInICsgb3B0cy5kYXkgKyAnXCIgY2xhc3M9XCInICsgYXJyLmpvaW4oJyAnKSArICdcIiBhcmlhLXNlbGVjdGVkPVwiJyArIGFyaWFTZWxlY3RlZCArICdcIj4nICtcbiAgICAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJwaWthLWJ1dHRvbiBwaWthLWRheVwiIHR5cGU9XCJidXR0b25cIiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEtcGlrYS15ZWFyPVwiJyArIG9wdHMueWVhciArICdcIiBkYXRhLXBpa2EtbW9udGg9XCInICsgb3B0cy5tb250aCArICdcIiBkYXRhLXBpa2EtZGF5PVwiJyArIG9wdHMuZGF5ICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5kYXkgK1xuICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAnPC90ZD4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJXZWVrID0gZnVuY3Rpb24gKGQsIG0sIHkpIHtcbiAgICAgICAgLy8gTGlmdGVkIGZyb20gaHR0cDovL2phdmFzY3JpcHQuYWJvdXQuY29tL2xpYnJhcnkvYmx3ZWVreWVhci5odG0sIGxpZ2h0bHkgbW9kaWZpZWQuXG4gICAgICAgIHZhciBvbmVqYW4gPSBuZXcgRGF0ZSh5LCAwLCAxKSxcbiAgICAgICAgICAgIHdlZWtOdW0gPSBNYXRoLmNlaWwoKCgobmV3IERhdGUoeSwgbSwgZCkgLSBvbmVqYW4pIC8gODY0MDAwMDApICsgb25lamFuLmdldERheSgpKzEpLzcpO1xuICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cInBpa2Etd2Vla1wiPicgKyB3ZWVrTnVtICsgJzwvdGQ+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyUm93ID0gZnVuY3Rpb24oZGF5cywgaXNSVEwsIHBpY2tXaG9sZVdlZWssIGlzUm93U2VsZWN0ZWQpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0ciBjbGFzcz1cInBpa2Etcm93JyArIChwaWNrV2hvbGVXZWVrID8gJyBwaWNrLXdob2xlLXdlZWsnIDogJycpICsgKGlzUm93U2VsZWN0ZWQgPyAnIGlzLXNlbGVjdGVkJyA6ICcnKSArICdcIj4nICsgKGlzUlRMID8gZGF5cy5yZXZlcnNlKCkgOiBkYXlzKS5qb2luKCcnKSArICc8L3RyPic7XG4gICAgfSxcblxuICAgIHJlbmRlckJvZHkgPSBmdW5jdGlvbihyb3dzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICc8dGJvZHk+JyArIHJvd3Muam9pbignJykgKyAnPC90Ym9keT4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJIZWFkID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBpLCBhcnIgPSBbXTtcbiAgICAgICAgaWYgKG9wdHMuc2hvd1dlZWtOdW1iZXIpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8dGg+PC90aD4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnPHRoIHNjb3BlPVwiY29sXCI+PGFiYnIgdGl0bGU9XCInICsgcmVuZGVyRGF5TmFtZShvcHRzLCBpKSArICdcIj4nICsgcmVuZGVyRGF5TmFtZShvcHRzLCBpLCB0cnVlKSArICc8L2FiYnI+PC90aD4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0aGVhZD48dHI+JyArIChvcHRzLmlzUlRMID8gYXJyLnJldmVyc2UoKSA6IGFycikuam9pbignJykgKyAnPC90cj48L3RoZWFkPic7XG4gICAgfSxcblxuICAgIHJlbmRlclRpdGxlID0gZnVuY3Rpb24oaW5zdGFuY2UsIGMsIHllYXIsIG1vbnRoLCByZWZZZWFyLCByYW5kSWQpXG4gICAge1xuICAgICAgICB2YXIgaSwgaiwgYXJyLFxuICAgICAgICAgICAgb3B0cyA9IGluc3RhbmNlLl9vLFxuICAgICAgICAgICAgaXNNaW5ZZWFyID0geWVhciA9PT0gb3B0cy5taW5ZZWFyLFxuICAgICAgICAgICAgaXNNYXhZZWFyID0geWVhciA9PT0gb3B0cy5tYXhZZWFyLFxuICAgICAgICAgICAgaHRtbCA9ICc8ZGl2IGlkPVwiJyArIHJhbmRJZCArICdcIiBjbGFzcz1cInBpa2EtdGl0bGVcIiByb2xlPVwiaGVhZGluZ1wiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPicsXG4gICAgICAgICAgICBtb250aEh0bWwsXG4gICAgICAgICAgICB5ZWFySHRtbCxcbiAgICAgICAgICAgIHByZXYgPSB0cnVlLFxuICAgICAgICAgICAgbmV4dCA9IHRydWU7XG5cbiAgICAgICAgZm9yIChhcnIgPSBbXSwgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnPG9wdGlvbiB2YWx1ZT1cIicgKyAoeWVhciA9PT0gcmVmWWVhciA/IGkgLSBjIDogMTIgKyBpIC0gYykgKyAnXCInICtcbiAgICAgICAgICAgICAgICAoaSA9PT0gbW9udGggPyAnIHNlbGVjdGVkPVwic2VsZWN0ZWRcIic6ICcnKSArXG4gICAgICAgICAgICAgICAgKChpc01pblllYXIgJiYgaSA8IG9wdHMubWluTW9udGgpIHx8IChpc01heFllYXIgJiYgaSA+IG9wdHMubWF4TW9udGgpID8gJ2Rpc2FibGVkPVwiZGlzYWJsZWRcIicgOiAnJykgKyAnPicgK1xuICAgICAgICAgICAgICAgIG9wdHMuaTE4bi5tb250aHNbaV0gKyAnPC9vcHRpb24+Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBtb250aEh0bWwgPSAnPGRpdiBjbGFzcz1cInBpa2EtbGFiZWxcIj4nICsgb3B0cy5pMThuLm1vbnRoc1ttb250aF0gKyAnPHNlbGVjdCBjbGFzcz1cInBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LW1vbnRoXCIgdGFiaW5kZXg9XCItMVwiPicgKyBhcnIuam9pbignJykgKyAnPC9zZWxlY3Q+PC9kaXY+JztcblxuICAgICAgICBpZiAoaXNBcnJheShvcHRzLnllYXJSYW5nZSkpIHtcbiAgICAgICAgICAgIGkgPSBvcHRzLnllYXJSYW5nZVswXTtcbiAgICAgICAgICAgIGogPSBvcHRzLnllYXJSYW5nZVsxXSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpID0geWVhciAtIG9wdHMueWVhclJhbmdlO1xuICAgICAgICAgICAgaiA9IDEgKyB5ZWFyICsgb3B0cy55ZWFyUmFuZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGFyciA9IFtdOyBpIDwgaiAmJiBpIDw9IG9wdHMubWF4WWVhcjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA+PSBvcHRzLm1pblllYXIpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCgnPG9wdGlvbiB2YWx1ZT1cIicgKyBpICsgJ1wiJyArIChpID09PSB5ZWFyID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInOiAnJykgKyAnPicgKyAoaSkgKyAnPC9vcHRpb24+Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeWVhckh0bWwgPSAnPGRpdiBjbGFzcz1cInBpa2EtbGFiZWxcIj4nICsgeWVhciArIG9wdHMueWVhclN1ZmZpeCArICc8c2VsZWN0IGNsYXNzPVwicGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QteWVhclwiIHRhYmluZGV4PVwiLTFcIj4nICsgYXJyLmpvaW4oJycpICsgJzwvc2VsZWN0PjwvZGl2Pic7XG5cbiAgICAgICAgaWYgKG9wdHMuc2hvd01vbnRoQWZ0ZXJZZWFyKSB7XG4gICAgICAgICAgICBodG1sICs9IHllYXJIdG1sICsgbW9udGhIdG1sO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHRtbCArPSBtb250aEh0bWwgKyB5ZWFySHRtbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01pblllYXIgJiYgKG1vbnRoID09PSAwIHx8IG9wdHMubWluTW9udGggPj0gbW9udGgpKSB7XG4gICAgICAgICAgICBwcmV2ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNYXhZZWFyICYmIChtb250aCA9PT0gMTEgfHwgb3B0cy5tYXhNb250aCA8PSBtb250aCkpIHtcbiAgICAgICAgICAgIG5leHQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjID09PSAwKSB7XG4gICAgICAgICAgICBodG1sICs9ICc8YnV0dG9uIGNsYXNzPVwicGlrYS1wcmV2JyArIChwcmV2ID8gJycgOiAnIGlzLWRpc2FibGVkJykgKyAnXCIgdHlwZT1cImJ1dHRvblwiPicgKyBvcHRzLmkxOG4ucHJldmlvdXNNb250aCArICc8L2J1dHRvbj4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAoaW5zdGFuY2UuX28ubnVtYmVyT2ZNb250aHMgLSAxKSApIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9XCJwaWthLW5leHQnICsgKG5leHQgPyAnJyA6ICcgaXMtZGlzYWJsZWQnKSArICdcIiB0eXBlPVwiYnV0dG9uXCI+JyArIG9wdHMuaTE4bi5uZXh0TW9udGggKyAnPC9idXR0b24+JztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBodG1sICs9ICc8L2Rpdj4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJUYWJsZSA9IGZ1bmN0aW9uKG9wdHMsIGRhdGEsIHJhbmRJZClcbiAgICB7XG4gICAgICAgIHJldHVybiAnPHRhYmxlIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNsYXNzPVwicGlrYS10YWJsZVwiIHJvbGU9XCJncmlkXCIgYXJpYS1sYWJlbGxlZGJ5PVwiJyArIHJhbmRJZCArICdcIj4nICsgcmVuZGVySGVhZChvcHRzKSArIHJlbmRlckJvZHkoZGF0YSkgKyAnPC90YWJsZT4nO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFBpa2FkYXkgY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBQaWthZGF5ID0gZnVuY3Rpb24ob3B0aW9ucylcbiAgICB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgICAgIG9wdHMgPSBzZWxmLmNvbmZpZyhvcHRpb25zKTtcblxuICAgICAgICBzZWxmLl9vbk1vdXNlRG93biA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghc2VsZi5fdikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyh0YXJnZXQsICdpcy1kaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtYnV0dG9uJykgJiYgIWhhc0NsYXNzKHRhcmdldCwgJ2lzLWVtcHR5JykgJiYgIWhhc0NsYXNzKHRhcmdldC5wYXJlbnROb2RlLCAnaXMtZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUobmV3IERhdGUodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1waWthLXllYXInKSwgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1waWthLW1vbnRoJyksIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGlrYS1kYXknKSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmJsdXJGaWVsZE9uU2VsZWN0ICYmIG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5maWVsZC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLXByZXYnKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnByZXZNb250aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLW5leHQnKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm5leHRNb250aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1zZWxlY3QnKSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgdG91Y2ggZXZlbnQgcHJldmVudCBtb3VzZSBldmVudHMgZW11bGF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fYyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25DaGFuZ2UgPSBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1zZWxlY3QtbW9udGgnKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b01vbnRoKHRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdC15ZWFyJykpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdvdG9ZZWFyKHRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25LZXlDaGFuZ2UgPSBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG5cbiAgICAgICAgICAgIGlmIChzZWxmLmlzVmlzaWJsZSgpKSB7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2goZS5rZXlDb2RlKXtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5maWVsZC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnc3VidHJhY3QnLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdzdWJ0cmFjdCcsIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ2FkZCcsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ2FkZCcsIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRDaGFuZ2UgPSBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0ZTtcblxuICAgICAgICAgICAgaWYgKGUuZmlyZWRCeSA9PT0gc2VsZikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLnBhcnNlKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG9wdHMucGFyc2Uob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNNb21lbnQpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbW9tZW50KG9wdHMuZmllbGQudmFsdWUsIG9wdHMuZm9ybWF0LCBvcHRzLmZvcm1hdFN0cmljdCk7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IChkYXRlICYmIGRhdGUuaXNWYWxpZCgpKSA/IGRhdGUudG9EYXRlKCkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2Uob3B0cy5maWVsZC52YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICBzZWxmLnNldERhdGUoZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNlbGYuX3YpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNob3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Rm9jdXMgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlbGYuc2hvdygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRDbGljayA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgc2VsZi5zaG93KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dEJsdXIgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIElFIGFsbG93cyBwaWthIGRpdiB0byBnYWluIGZvY3VzOyBjYXRjaCBibHVyIHRoZSBpbnB1dCBmaWVsZFxuICAgICAgICAgICAgdmFyIHBFbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHBFbCwgJ3Bpa2Etc2luZ2xlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICgocEVsID0gcEVsLnBhcmVudE5vZGUpKTtcblxuICAgICAgICAgICAgaWYgKCFzZWxmLl9jKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fYiA9IHN0byhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfSwgNTApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5fYyA9IGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50LFxuICAgICAgICAgICAgICAgIHBFbCA9IHRhcmdldDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNFdmVudExpc3RlbmVycyAmJiBoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdCcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQub25jaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnb25jaGFuZ2UnLCAncmV0dXJuOycpO1xuICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCh0YXJnZXQsICdjaGFuZ2UnLCBzZWxmLl9vbkNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmIChoYXNDbGFzcyhwRWwsICdwaWthLXNpbmdsZScpIHx8IHBFbCA9PT0gb3B0cy50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoKHBFbCA9IHBFbC5wYXJlbnROb2RlKSk7XG4gICAgICAgICAgICBpZiAoc2VsZi5fdiAmJiB0YXJnZXQgIT09IG9wdHMudHJpZ2dlciAmJiBwRWwgIT09IG9wdHMudHJpZ2dlcikge1xuICAgICAgICAgICAgICAgIHNlbGYuaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgc2VsZi5lbC5jbGFzc05hbWUgPSAncGlrYS1zaW5nbGUnICsgKG9wdHMuaXNSVEwgPyAnIGlzLXJ0bCcgOiAnJykgKyAob3B0cy50aGVtZSA/ICcgJyArIG9wdHMudGhlbWUgOiAnJyk7XG5cbiAgICAgICAgYWRkRXZlbnQoc2VsZi5lbCwgJ21vdXNlZG93bicsIHNlbGYuX29uTW91c2VEb3duLCB0cnVlKTtcbiAgICAgICAgYWRkRXZlbnQoc2VsZi5lbCwgJ3RvdWNoZW5kJywgc2VsZi5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAnY2hhbmdlJywgc2VsZi5fb25DaGFuZ2UpO1xuXG4gICAgICAgIGlmIChvcHRzLmtleWJvYXJkSW5wdXQpIHtcbiAgICAgICAgICAgIGFkZEV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicsIHNlbGYuX29uS2V5Q2hhbmdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBvcHRzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxmLmVsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2VsZi5lbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdHMuZmllbGQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2VsZi5lbCwgb3B0cy5maWVsZC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLmZpZWxkLCAnY2hhbmdlJywgc2VsZi5fb25JbnB1dENoYW5nZSk7XG5cbiAgICAgICAgICAgIGlmICghb3B0cy5kZWZhdWx0RGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChoYXNNb21lbnQgJiYgb3B0cy5maWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRzLmRlZmF1bHREYXRlID0gbW9tZW50KG9wdHMuZmllbGQudmFsdWUsIG9wdHMuZm9ybWF0KS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvcHRzLmRlZmF1bHREYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShvcHRzLmZpZWxkLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdHMuc2V0RGVmYXVsdERhdGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlZkRhdGUgPSBvcHRzLmRlZmF1bHREYXRlO1xuXG4gICAgICAgIGlmIChpc0RhdGUoZGVmRGF0ZSkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNldERlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKGRlZkRhdGUsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdvdG9EYXRlKGRlZkRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5nb3RvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHNlbGYuZWwuY2xhc3NOYW1lICs9ICcgaXMtYm91bmQnO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnY2xpY2snLCBzZWxmLl9vbklucHV0Q2xpY2spO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnZm9jdXMnLCBzZWxmLl9vbklucHV0Rm9jdXMpO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnYmx1cicsIHNlbGYuX29uSW5wdXRCbHVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgICB9XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogcHVibGljIFBpa2FkYXkgQVBJXG4gICAgICovXG4gICAgUGlrYWRheS5wcm90b3R5cGUgPSB7XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogY29uZmlndXJlIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICovXG4gICAgICAgIGNvbmZpZzogZnVuY3Rpb24ob3B0aW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9vKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3B0cyA9IGV4dGVuZCh0aGlzLl9vLCBvcHRpb25zLCB0cnVlKTtcblxuICAgICAgICAgICAgb3B0cy5pc1JUTCA9ICEhb3B0cy5pc1JUTDtcblxuICAgICAgICAgICAgb3B0cy5maWVsZCA9IChvcHRzLmZpZWxkICYmIG9wdHMuZmllbGQubm9kZU5hbWUpID8gb3B0cy5maWVsZCA6IG51bGw7XG5cbiAgICAgICAgICAgIG9wdHMudGhlbWUgPSAodHlwZW9mIG9wdHMudGhlbWUpID09PSAnc3RyaW5nJyAmJiBvcHRzLnRoZW1lID8gb3B0cy50aGVtZSA6IG51bGw7XG5cbiAgICAgICAgICAgIG9wdHMuYm91bmQgPSAhIShvcHRzLmJvdW5kICE9PSB1bmRlZmluZWQgPyBvcHRzLmZpZWxkICYmIG9wdHMuYm91bmQgOiBvcHRzLmZpZWxkKTtcblxuICAgICAgICAgICAgb3B0cy50cmlnZ2VyID0gKG9wdHMudHJpZ2dlciAmJiBvcHRzLnRyaWdnZXIubm9kZU5hbWUpID8gb3B0cy50cmlnZ2VyIDogb3B0cy5maWVsZDtcblxuICAgICAgICAgICAgb3B0cy5kaXNhYmxlV2Vla2VuZHMgPSAhIW9wdHMuZGlzYWJsZVdlZWtlbmRzO1xuXG4gICAgICAgICAgICBvcHRzLmRpc2FibGVEYXlGbiA9ICh0eXBlb2Ygb3B0cy5kaXNhYmxlRGF5Rm4pID09PSAnZnVuY3Rpb24nID8gb3B0cy5kaXNhYmxlRGF5Rm4gOiBudWxsO1xuXG4gICAgICAgICAgICB2YXIgbm9tID0gcGFyc2VJbnQob3B0cy5udW1iZXJPZk1vbnRocywgMTApIHx8IDE7XG4gICAgICAgICAgICBvcHRzLm51bWJlck9mTW9udGhzID0gbm9tID4gNCA/IDQgOiBub207XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRlKG9wdHMubWluRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1pbkRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNEYXRlKG9wdHMubWF4RGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1heERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgob3B0cy5taW5EYXRlICYmIG9wdHMubWF4RGF0ZSkgJiYgb3B0cy5tYXhEYXRlIDwgb3B0cy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5tYXhEYXRlID0gb3B0cy5taW5EYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNaW5EYXRlKG9wdHMubWluRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNYXhEYXRlKG9wdHMubWF4RGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdHMueWVhclJhbmdlKSkge1xuICAgICAgICAgICAgICAgIHZhciBmYWxsYmFjayA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDEwO1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlWzBdID0gcGFyc2VJbnQob3B0cy55ZWFyUmFuZ2VbMF0sIDEwKSB8fCBmYWxsYmFjaztcbiAgICAgICAgICAgICAgICBvcHRzLnllYXJSYW5nZVsxXSA9IHBhcnNlSW50KG9wdHMueWVhclJhbmdlWzFdLCAxMCkgfHwgZmFsbGJhY2s7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlID0gTWF0aC5hYnMocGFyc2VJbnQob3B0cy55ZWFyUmFuZ2UsIDEwKSkgfHwgZGVmYXVsdHMueWVhclJhbmdlO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnllYXJSYW5nZSA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRzLnllYXJSYW5nZSA9IDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvcHRzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAodXNpbmcgTW9tZW50LmpzIGlmIGF2YWlsYWJsZSlcbiAgICAgICAgICovXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbihmb3JtYXQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLl9vLmZvcm1hdDtcbiAgICAgICAgICAgIGlmICghaXNEYXRlKHRoaXMuX2QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX28udG9TdHJpbmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX28udG9TdHJpbmcodGhpcy5fZCwgZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNNb21lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudCh0aGlzLl9kKS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kLnRvRGF0ZVN0cmluZygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBNb21lbnQuanMgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAoaWYgYXZhaWxhYmxlKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0TW9tZW50OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBoYXNNb21lbnQgPyBtb21lbnQodGhpcy5fZCkgOiBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGZyb20gYSBNb21lbnQuanMgb2JqZWN0IChpZiBhdmFpbGFibGUpXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNb21lbnQ6IGZ1bmN0aW9uKGRhdGUsIHByZXZlbnRPblNlbGVjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKGhhc01vbWVudCAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGUoZGF0ZS50b0RhdGUoKSwgcHJldmVudE9uU2VsZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmV0dXJuIGEgRGF0ZSBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXREYXRlOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBpc0RhdGUodGhpcy5fZCkgPyBuZXcgRGF0ZSh0aGlzLl9kLmdldFRpbWUoKSkgOiBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBzZXREYXRlOiBmdW5jdGlvbihkYXRlLCBwcmV2ZW50T25TZWxlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2QgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5maWVsZC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmaXJlRXZlbnQodGhpcy5fby5maWVsZCwgJ2NoYW5nZScsIHsgZmlyZWRCeTogdGhpcyB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcmF3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UoZGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0RhdGUoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLl9vLm1pbkRhdGUsXG4gICAgICAgICAgICAgICAgbWF4ID0gdGhpcy5fby5tYXhEYXRlO1xuXG4gICAgICAgICAgICBpZiAoaXNEYXRlKG1pbikgJiYgZGF0ZSA8IG1pbikge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtaW47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShtYXgpICYmIGRhdGUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbWF4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHRoaXMuX2QpO1xuICAgICAgICAgICAgdGhpcy5nb3RvRGF0ZSh0aGlzLl9kKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX28uZmllbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLmZpZWxkLnZhbHVlID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGZpcmVFdmVudCh0aGlzLl9vLmZpZWxkLCAnY2hhbmdlJywgeyBmaXJlZEJ5OiB0aGlzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcmV2ZW50T25TZWxlY3QgJiYgdHlwZW9mIHRoaXMuX28ub25TZWxlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm9uU2VsZWN0LmNhbGwodGhpcywgdGhpcy5nZXREYXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIGRhdGVcbiAgICAgICAgICovXG4gICAgICAgIGdvdG9EYXRlOiBmdW5jdGlvbihkYXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbmV3Q2FsZW5kYXIgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsZW5kYXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpcnN0VmlzaWJsZURhdGUgPSBuZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1swXS55ZWFyLCB0aGlzLmNhbGVuZGFyc1swXS5tb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlRGF0ZSA9IG5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS55ZWFyLCB0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ubW9udGgsIDEpLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlRGF0ZSA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgZW5kIG9mIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlRGF0ZS5zZXRNb250aChsYXN0VmlzaWJsZURhdGUuZ2V0TW9udGgoKSsxKTtcbiAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZURhdGUuc2V0RGF0ZShsYXN0VmlzaWJsZURhdGUuZ2V0RGF0ZSgpLTEpO1xuICAgICAgICAgICAgICAgIG5ld0NhbGVuZGFyID0gKHZpc2libGVEYXRlIDwgZmlyc3RWaXNpYmxlRGF0ZS5nZXRUaW1lKCkgfHwgbGFzdFZpc2libGVEYXRlLmdldFRpbWUoKSA8IHZpc2libGVEYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld0NhbGVuZGFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnMgPSBbe1xuICAgICAgICAgICAgICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5tYWluQ2FsZW5kYXIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggKz0gMSAtIHRoaXMuX28ubnVtYmVyT2ZNb250aHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFkanVzdERhdGU6IGZ1bmN0aW9uKHNpZ24sIGRheXMpIHtcblxuICAgICAgICAgICAgdmFyIGRheSA9IHRoaXMuZ2V0RGF0ZSgpIHx8IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB2YXIgZGlmZmVyZW5jZSA9IHBhcnNlSW50KGRheXMpKjI0KjYwKjYwKjEwMDA7XG5cbiAgICAgICAgICAgIHZhciBuZXdEYXk7XG5cbiAgICAgICAgICAgIGlmIChzaWduID09PSAnYWRkJykge1xuICAgICAgICAgICAgICAgIG5ld0RheSA9IG5ldyBEYXRlKGRheS52YWx1ZU9mKCkgKyBkaWZmZXJlbmNlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2lnbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgICAgIG5ld0RheSA9IG5ldyBEYXRlKGRheS52YWx1ZU9mKCkgLSBkaWZmZXJlbmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKG5ld0RheSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0Q2FsZW5kYXJzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdID0gYWRqdXN0Q2FsZW5kYXIodGhpcy5jYWxlbmRhcnNbMF0pO1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDE7IGMgPCB0aGlzLl9vLm51bWJlck9mTW9udGhzOyBjKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1tjXSA9IGFkanVzdENhbGVuZGFyKHtcbiAgICAgICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoICsgYyxcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogdGhpcy5jYWxlbmRhcnNbMF0ueWVhclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ290b1RvZGF5OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ290b0RhdGUobmV3IERhdGUoKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB2aWV3IHRvIGEgc3BlY2lmaWMgbW9udGggKHplcm8taW5kZXgsIGUuZy4gMDogSmFudWFyeSlcbiAgICAgICAgICovXG4gICAgICAgIGdvdG9Nb250aDogZnVuY3Rpb24obW9udGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggPSBwYXJzZUludChtb250aCwgMTApO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbmV4dE1vbnRoOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKys7XG4gICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHByZXZNb250aDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aC0tO1xuICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHZpZXcgdG8gYSBzcGVjaWZpYyBmdWxsIHllYXIgKGUuZy4gXCIyMDEyXCIpXG4gICAgICAgICAqL1xuICAgICAgICBnb3RvWWVhcjogZnVuY3Rpb24oeWVhcilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc05hTih5ZWFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLnllYXIgPSBwYXJzZUludCh5ZWFyLCAxMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHRoZSBtaW5EYXRlXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNaW5EYXRlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbkRhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pblllYXIgID0gdmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbk1vbnRoID0gdmFsdWUuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5EYXRlID0gZGVmYXVsdHMubWluRGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pblllYXIgID0gZGVmYXVsdHMubWluWWVhcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbk1vbnRoID0gZGVmYXVsdHMubWluTW9udGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5zdGFydFJhbmdlID0gZGVmYXVsdHMuc3RhcnRSYW5nZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB0aGUgbWF4RGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgc2V0TWF4RGF0ZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldFRvU3RhcnRPZkRheSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhEYXRlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhZZWFyID0gdmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heE1vbnRoID0gdmFsdWUuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhEYXRlID0gZGVmYXVsdHMubWF4RGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heFllYXIgPSBkZWZhdWx0cy5tYXhZZWFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4TW9udGggPSBkZWZhdWx0cy5tYXhNb250aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLmVuZFJhbmdlID0gZGVmYXVsdHMuZW5kUmFuZ2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldFN0YXJ0UmFuZ2U6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9vLnN0YXJ0UmFuZ2UgPSB2YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZXRFbmRSYW5nZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX28uZW5kUmFuZ2UgPSB2YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmVmcmVzaCB0aGUgSFRNTFxuICAgICAgICAgKi9cbiAgICAgICAgZHJhdzogZnVuY3Rpb24oZm9yY2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdiAmJiAhZm9yY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgb3B0cyA9IHRoaXMuX28sXG4gICAgICAgICAgICAgICAgbWluWWVhciA9IG9wdHMubWluWWVhcixcbiAgICAgICAgICAgICAgICBtYXhZZWFyID0gb3B0cy5tYXhZZWFyLFxuICAgICAgICAgICAgICAgIG1pbk1vbnRoID0gb3B0cy5taW5Nb250aCxcbiAgICAgICAgICAgICAgICBtYXhNb250aCA9IG9wdHMubWF4TW9udGgsXG4gICAgICAgICAgICAgICAgaHRtbCA9ICcnLFxuICAgICAgICAgICAgICAgIHJhbmRJZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3kgPD0gbWluWWVhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBtaW5ZZWFyO1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4obWluTW9udGgpICYmIHRoaXMuX20gPCBtaW5Nb250aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tID0gbWluTW9udGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3kgPj0gbWF4WWVhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBtYXhZZWFyO1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4obWF4TW9udGgpICYmIHRoaXMuX20gPiBtYXhNb250aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tID0gbWF4TW9udGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByYW5kSWQgPSAncGlrYS10aXRsZS0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCAnJykuc3Vic3RyKDAsIDIpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IG9wdHMubnVtYmVyT2ZNb250aHM7IGMrKykge1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJwaWthLWxlbmRhclwiPicgKyByZW5kZXJUaXRsZSh0aGlzLCBjLCB0aGlzLmNhbGVuZGFyc1tjXS55ZWFyLCB0aGlzLmNhbGVuZGFyc1tjXS5tb250aCwgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciwgcmFuZElkKSArIHRoaXMucmVuZGVyKHRoaXMuY2FsZW5kYXJzW2NdLnllYXIsIHRoaXMuY2FsZW5kYXJzW2NdLm1vbnRoLCByYW5kSWQpICsgJzwvZGl2Pic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWwuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgICAgICBpZihvcHRzLmZpZWxkLnR5cGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0byhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMudHJpZ2dlci5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbkRyYXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm9uRHJhdyh0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGhlIHNjcmVlbiByZWFkZXIgdXNlciBrbm93IHRvIHVzZSBhcnJvdyBrZXlzXG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBvcHRzLmFyaWFMYWJlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0UG9zaXRpb246IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpZWxkLCBwRWwsIHdpZHRoLCBoZWlnaHQsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCBzY3JvbGxUb3AsIGxlZnQsIHRvcCwgY2xpZW50UmVjdCwgbGVmdEFsaWduZWQsIGJvdHRvbUFsaWduZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9vLmNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuICAgICAgICAgICAgZmllbGQgPSB0aGlzLl9vLnRyaWdnZXI7XG4gICAgICAgICAgICBwRWwgPSBmaWVsZDtcbiAgICAgICAgICAgIHdpZHRoID0gdGhpcy5lbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGxlZnRBbGlnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJvdHRvbUFsaWduZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNsaWVudFJlY3QgPSBmaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRvcCA9IGNsaWVudFJlY3QuYm90dG9tICsgd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gcEVsLm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgdG9wICA9IHBFbC5vZmZzZXRUb3AgKyBwRWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgIHdoaWxlKChwRWwgPSBwRWwub2Zmc2V0UGFyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IHBFbC5vZmZzZXRMZWZ0O1xuICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBFbC5vZmZzZXRUb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHBvc2l0aW9uIGlzIGJvdHRvbSAmIGxlZnRcbiAgICAgICAgICAgIGlmICgodGhpcy5fby5yZXBvc2l0aW9uICYmIGxlZnQgKyB3aWR0aCA+IHZpZXdwb3J0V2lkdGgpIHx8XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoJ3JpZ2h0JykgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aCA+IDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCAtIHdpZHRoICsgZmllbGQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgbGVmdEFsaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodGhpcy5fby5yZXBvc2l0aW9uICYmIHRvcCArIGhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0ICsgc2Nyb2xsVG9wKSB8fFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCd0b3AnKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIHRvcCAtIGhlaWdodCAtIGZpZWxkLm9mZnNldEhlaWdodCA+IDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0b3AgPSB0b3AgLSBoZWlnaHQgLSBmaWVsZC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgYm90dG9tQWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUudG9wID0gdG9wICsgJ3B4JztcblxuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5lbCwgbGVmdEFsaWduZWQgPyAnbGVmdC1hbGlnbmVkJyA6ICdyaWdodC1hbGlnbmVkJyk7XG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmVsLCBib3R0b21BbGlnbmVkID8gJ2JvdHRvbS1hbGlnbmVkJyA6ICd0b3AtYWxpZ25lZCcpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgIWxlZnRBbGlnbmVkID8gJ2xlZnQtYWxpZ25lZCcgOiAncmlnaHQtYWxpZ25lZCcpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgIWJvdHRvbUFsaWduZWQgPyAnYm90dG9tLWFsaWduZWQnIDogJ3RvcC1hbGlnbmVkJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJlbmRlciBIVE1MIGZvciBhIHBhcnRpY3VsYXIgbW9udGhcbiAgICAgICAgICovXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIHJhbmRJZClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG9wdHMgICA9IHRoaXMuX28sXG4gICAgICAgICAgICAgICAgbm93ICAgID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBkYXlzICAgPSBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgICAgICAgYmVmb3JlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpLFxuICAgICAgICAgICAgICAgIGRhdGEgICA9IFtdLFxuICAgICAgICAgICAgICAgIHJvdyAgICA9IFtdO1xuICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KG5vdyk7XG4gICAgICAgICAgICBpZiAob3B0cy5maXJzdERheSA+IDApIHtcbiAgICAgICAgICAgICAgICBiZWZvcmUgLT0gb3B0cy5maXJzdERheTtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmUgKz0gNztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNNb250aCA9IG1vbnRoID09PSAwID8gMTEgOiBtb250aCAtIDEsXG4gICAgICAgICAgICAgICAgbmV4dE1vbnRoID0gbW9udGggPT09IDExID8gMCA6IG1vbnRoICsgMSxcbiAgICAgICAgICAgICAgICB5ZWFyT2ZQcmV2aW91c01vbnRoID0gbW9udGggPT09IDAgPyB5ZWFyIC0gMSA6IHllYXIsXG4gICAgICAgICAgICAgICAgeWVhck9mTmV4dE1vbnRoID0gbW9udGggPT09IDExID8geWVhciArIDEgOiB5ZWFyLFxuICAgICAgICAgICAgICAgIGRheXNJblByZXZpb3VzTW9udGggPSBnZXREYXlzSW5Nb250aCh5ZWFyT2ZQcmV2aW91c01vbnRoLCBwcmV2aW91c01vbnRoKTtcbiAgICAgICAgICAgIHZhciBjZWxscyA9IGRheXMgKyBiZWZvcmUsXG4gICAgICAgICAgICAgICAgYWZ0ZXIgPSBjZWxscztcbiAgICAgICAgICAgIHdoaWxlKGFmdGVyID4gNykge1xuICAgICAgICAgICAgICAgIGFmdGVyIC09IDc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjZWxscyArPSA3IC0gYWZ0ZXI7XG4gICAgICAgICAgICB2YXIgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCByID0gMDsgaSA8IGNlbGxzOyBpKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxICsgKGkgLSBiZWZvcmUpKSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA9IGlzRGF0ZSh0aGlzLl9kKSA/IGNvbXBhcmVEYXRlcyhkYXksIHRoaXMuX2QpIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGlzVG9kYXkgPSBjb21wYXJlRGF0ZXMoZGF5LCBub3cpLFxuICAgICAgICAgICAgICAgICAgICBoYXNFdmVudCA9IG9wdHMuZXZlbnRzLmluZGV4T2YoZGF5LnRvRGF0ZVN0cmluZygpKSAhPT0gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBpIDwgYmVmb3JlIHx8IGkgPj0gKGRheXMgKyBiZWZvcmUpLFxuICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSAxICsgKGkgLSBiZWZvcmUpLFxuICAgICAgICAgICAgICAgICAgICBtb250aE51bWJlciA9IG1vbnRoLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhcixcbiAgICAgICAgICAgICAgICAgICAgaXNTdGFydFJhbmdlID0gb3B0cy5zdGFydFJhbmdlICYmIGNvbXBhcmVEYXRlcyhvcHRzLnN0YXJ0UmFuZ2UsIGRheSksXG4gICAgICAgICAgICAgICAgICAgIGlzRW5kUmFuZ2UgPSBvcHRzLmVuZFJhbmdlICYmIGNvbXBhcmVEYXRlcyhvcHRzLmVuZFJhbmdlLCBkYXkpLFxuICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2UgPSBvcHRzLnN0YXJ0UmFuZ2UgJiYgb3B0cy5lbmRSYW5nZSAmJiBvcHRzLnN0YXJ0UmFuZ2UgPCBkYXkgJiYgZGF5IDwgb3B0cy5lbmRSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZCA9IChvcHRzLm1pbkRhdGUgJiYgZGF5IDwgb3B0cy5taW5EYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdHMubWF4RGF0ZSAmJiBkYXkgPiBvcHRzLm1heERhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5kaXNhYmxlV2Vla2VuZHMgJiYgaXNXZWVrZW5kKGRheSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5kaXNhYmxlRGF5Rm4gJiYgb3B0cy5kaXNhYmxlRGF5Rm4oZGF5KSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TnVtYmVyID0gZGF5c0luUHJldmlvdXNNb250aCArIGRheU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gcHJldmlvdXNNb250aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyT2ZQcmV2aW91c01vbnRoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TnVtYmVyID0gZGF5TnVtYmVyIC0gZGF5cztcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gbmV4dE1vbnRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJPZk5leHRNb250aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkYXlDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXk6IGRheU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoOiBtb250aE51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXI6IHllYXJOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFdmVudDogaGFzRXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb2RheTogaXNUb2RheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0VtcHR5OiBpc0VtcHR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTdGFydFJhbmdlOiBpc1N0YXJ0UmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0VuZFJhbmdlOiBpc0VuZFJhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNJblJhbmdlOiBpc0luUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiBvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IG9wdHMuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0cy5waWNrV2hvbGVXZWVrICYmIGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvdy5wdXNoKHJlbmRlckRheShkYXlDb25maWcpKTtcblxuICAgICAgICAgICAgICAgIGlmICgrK3IgPT09IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuc2hvd1dlZWtOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy51bnNoaWZ0KHJlbmRlcldlZWsoaSAtIGJlZm9yZSwgbW9udGgsIHllYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gocmVuZGVyUm93KHJvdywgb3B0cy5pc1JUTCwgb3B0cy5waWNrV2hvbGVXZWVrLCBpc1dlZWtTZWxlY3RlZCkpO1xuICAgICAgICAgICAgICAgICAgICByb3cgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlzV2Vla1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlclRhYmxlKG9wdHMsIGRhdGEsIHJhbmRJZCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaXNWaXNpYmxlOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92O1xuICAgICAgICB9LFxuXG4gICAgICAgIHNob3c6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdiA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgJ2lzLWhpZGRlbicpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGRvY3VtZW50LCAnY2xpY2snLCB0aGlzLl9vbkNsaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuX28ub25PcGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ub25PcGVuLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGhpZGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHYgPSB0aGlzLl92O1xuICAgICAgICAgICAgaWYgKHYgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gJ3N0YXRpYyc7IC8vIHJlc2V0XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS5sZWZ0ID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUudG9wID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuZWwsICdpcy1oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdGhpcy5fby5vbkNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ub25DbG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR0FNRSBPVkVSXG4gICAgICAgICAqL1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5fbztcblxuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAnbW91c2Vkb3duJywgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnQodGhpcy5lbCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnQodGhpcy5lbCwgJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChvcHRzLmtleWJvYXJkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9vbktleUNoYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCB0aGlzLl9vbklucHV0Q2hhbmdlKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChvcHRzLnRyaWdnZXIsICdjbGljaycsIHRoaXMuX29uSW5wdXRDbGljayk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMudHJpZ2dlciwgJ2ZvY3VzJywgdGhpcy5fb25JbnB1dEZvY3VzKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy50cmlnZ2VyLCAnYmx1cicsIHRoaXMuX29uSW5wdXRCbHVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgcmV0dXJuIFBpa2FkYXk7XG59KSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5BdXRvbGlua2VyOyIsIi8qIGVzbGludCBrZXktc3BhY2luZzogMCAqL1xuLyogZXNsaW50IHF1b3RlLXByb3BzOiAwICovXG5cbmNvbnN0IE1pbWUgPSB7XG5cdCdlbWwnOiAnbWVzc2FnZS9yZmM4MjInLFxuXHQnbWltZSc6ICdtZXNzYWdlL3JmYzgyMicsXG5cdCd0eHQnOiAndGV4dC9wbGFpbicsXG5cdCd0ZXh0JzogJ3RleHQvcGxhaW4nLFxuXHQnZGVmJzogJ3RleHQvcGxhaW4nLFxuXHQnbGlzdCc6ICd0ZXh0L3BsYWluJyxcblx0J2luJzogJ3RleHQvcGxhaW4nLFxuXHQnaW5pJzogJ3RleHQvcGxhaW4nLFxuXHQnbG9nJzogJ3RleHQvcGxhaW4nLFxuXHQnc3FsJzogJ3RleHQvcGxhaW4nLFxuXHQnY2ZnJzogJ3RleHQvcGxhaW4nLFxuXHQnY29uZic6ICd0ZXh0L3BsYWluJyxcblx0J2FzYyc6ICd0ZXh0L3BsYWluJyxcblx0J3J0eCc6ICd0ZXh0L3JpY2h0ZXh0Jyxcblx0J3ZjYXJkJzogJ3RleHQvdmNhcmQnLFxuXHQndmNmJzogJ3RleHQvdmNhcmQnLFxuXHQnaHRtJzogJ3RleHQvaHRtbCcsXG5cdCdodG1sJzogJ3RleHQvaHRtbCcsXG5cdCdjc3YnOiAndGV4dC9jc3YnLFxuXHQnaWNzJzogJ3RleHQvY2FsZW5kYXInLFxuXHQnaWZiJzogJ3RleHQvY2FsZW5kYXInLFxuXHQneG1sJzogJ3RleHQveG1sJyxcblx0J2pzb24nOiAnYXBwbGljYXRpb24vanNvbicsXG5cdCdzd2YnOiAnYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gnLFxuXHQnaGxwJzogJ2FwcGxpY2F0aW9uL3dpbmhscCcsXG5cdCd3Z3QnOiAnYXBwbGljYXRpb24vd2lkZ2V0Jyxcblx0J2NobSc6ICdhcHBsaWNhdGlvbi92bmQubXMtaHRtbGhlbHAnLFxuXHQncDEwJzogJ2FwcGxpY2F0aW9uL3BrY3MxMCcsXG5cdCdwN2MnOiAnYXBwbGljYXRpb24vcGtjczctbWltZScsXG5cdCdwN20nOiAnYXBwbGljYXRpb24vcGtjczctbWltZScsXG5cdCdwN3MnOiAnYXBwbGljYXRpb24vcGtjczctc2lnbmF0dXJlJyxcblx0J3RvcnJlbnQnOiAnYXBwbGljYXRpb24veC1iaXR0b3JyZW50JyxcblxuXHQvLyBzY3JpcHRzXG5cdCdqcyc6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Jyxcblx0J3BsJzogJ3RleHQvcGVybCcsXG5cdCdjc3MnOiAndGV4dC9jc3MnLFxuXHQnYXNwJzogJ3RleHQvYXNwJyxcblx0J3BocCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHAzJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BocDQnOiAnYXBwbGljYXRpb24veC1odHRwZC1waHAnLFxuXHQncGhwNSc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHRtbCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cblx0Ly8gaW1hZ2VzXG5cdCdwbmcnOiAnaW1hZ2UvcG5nJyxcblx0J2pwZyc6ICdpbWFnZS9qcGVnJyxcblx0J2pwZWcnOiAnaW1hZ2UvanBlZycsXG5cdCdqcGUnOiAnaW1hZ2UvanBlZycsXG5cdCdqZmlmJzogJ2ltYWdlL2pwZWcnLFxuXHQnZ2lmJzogJ2ltYWdlL2dpZicsXG5cdCdibXAnOiAnaW1hZ2UvYm1wJyxcblx0J2NnbSc6ICdpbWFnZS9jZ20nLFxuXHQnaWVmJzogJ2ltYWdlL2llZicsXG5cdCdpY28nOiAnaW1hZ2UveC1pY29uJyxcblx0J3RpZic6ICdpbWFnZS90aWZmJyxcblx0J3RpZmYnOiAnaW1hZ2UvdGlmZicsXG5cdCdzdmcnOiAnaW1hZ2Uvc3ZnK3htbCcsXG5cdCdzdmd6JzogJ2ltYWdlL3N2Zyt4bWwnLFxuXHQnZGp2JzogJ2ltYWdlL3ZuZC5kanZ1Jyxcblx0J2RqdnUnOiAnaW1hZ2Uvdm5kLmRqdnUnLFxuXHQnd2VicCc6ICdpbWFnZS93ZWJwJyxcblxuXHQvLyBhcmNoaXZlc1xuXHQnemlwJzogJ2FwcGxpY2F0aW9uL3ppcCcsXG5cdCc3eic6ICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnLFxuXHQncmFyJzogJ2FwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQnLFxuXHQnZXhlJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdkbGwnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J3Njcic6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnY29tJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdiYXQnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J21zaSc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnY2FiJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCcsXG5cdCdneic6ICdhcHBsaWNhdGlvbi94LWd6aXAnLFxuXHQndGd6JzogJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsXG5cdCdieic6ICdhcHBsaWNhdGlvbi94LWJ6aXAnLFxuXHQnYnoyJzogJ2FwcGxpY2F0aW9uL3gtYnppcDInLFxuXHQnZGViJzogJ2FwcGxpY2F0aW9uL3gtZGViaWFuLXBhY2thZ2UnLFxuXG5cdC8vIGZvbnRzXG5cdCdwc2YnOiAnYXBwbGljYXRpb24veC1mb250LWxpbnV4LXBzZicsXG5cdCdvdGYnOiAnYXBwbGljYXRpb24veC1mb250LW90ZicsXG5cdCdwY2YnOiAnYXBwbGljYXRpb24veC1mb250LXBjZicsXG5cdCdzbmYnOiAnYXBwbGljYXRpb24veC1mb250LXNuZicsXG5cdCd0dGYnOiAnYXBwbGljYXRpb24veC1mb250LXR0ZicsXG5cdCd0dGMnOiAnYXBwbGljYXRpb24veC1mb250LXR0ZicsXG5cblx0Ly8gYXVkaW9cblx0J21wMyc6ICdhdWRpby9tcGVnJyxcblx0J2Ftcic6ICdhdWRpby9hbXInLFxuXHQnYWFjJzogJ2F1ZGlvL3gtYWFjJyxcblx0J2FpZic6ICdhdWRpby94LWFpZmYnLFxuXHQnYWlmYyc6ICdhdWRpby94LWFpZmYnLFxuXHQnYWlmZic6ICdhdWRpby94LWFpZmYnLFxuXHQnd2F2JzogJ2F1ZGlvL3gtd2F2Jyxcblx0J3dtYSc6ICdhdWRpby94LW1zLXdtYScsXG5cdCd3YXgnOiAnYXVkaW8veC1tcy13YXgnLFxuXHQnbWlkaSc6ICdhdWRpby9taWRpJyxcblx0J21wNGEnOiAnYXVkaW8vbXA0Jyxcblx0J29nZyc6ICdhdWRpby9vZ2cnLFxuXHQnd2ViYSc6ICdhdWRpby93ZWJtJyxcblx0J3JhJzogJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJyxcblx0J3JhbSc6ICdhdWRpby94LXBuLXJlYWxhdWRpbycsXG5cdCdybXAnOiAnYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luJyxcblx0J20zdSc6ICdhdWRpby94LW1wZWd1cmwnLFxuXG5cdC8vIHZpZGVvXG5cdCdmbHYnOiAndmlkZW8veC1mbHYnLFxuXHQncXQnOiAndmlkZW8vcXVpY2t0aW1lJyxcblx0J21vdic6ICd2aWRlby9xdWlja3RpbWUnLFxuXHQnd212JzogJ3ZpZGVvL3dpbmRvd3MtbWVkaWEnLFxuXHQnYXZpJzogJ3ZpZGVvL3gtbXN2aWRlbycsXG5cdCdtcGcnOiAndmlkZW8vbXBlZycsXG5cdCdtcGVnJzogJ3ZpZGVvL21wZWcnLFxuXHQnbXBlJzogJ3ZpZGVvL21wZWcnLFxuXHQnbTF2JzogJ3ZpZGVvL21wZWcnLFxuXHQnbTJ2JzogJ3ZpZGVvL21wZWcnLFxuXHQnM2dwJzogJ3ZpZGVvLzNncHAnLFxuXHQnM2cyJzogJ3ZpZGVvLzNncHAyJyxcblx0J2gyNjEnOiAndmlkZW8vaDI2MScsXG5cdCdoMjYzJzogJ3ZpZGVvL2gyNjMnLFxuXHQnaDI2NCc6ICd2aWRlby9oMjY0Jyxcblx0J2pwZ3YnOiAndmlkZW8vanBndicsXG5cdCdtcDQnOiAndmlkZW8vbXA0Jyxcblx0J21wNHYnOiAndmlkZW8vbXA0Jyxcblx0J21wZzQnOiAndmlkZW8vbXA0Jyxcblx0J29ndic6ICd2aWRlby9vZ2cnLFxuXHQnd2VibSc6ICd2aWRlby93ZWJtJyxcblx0J200dic6ICd2aWRlby94LW00dicsXG5cdCdhc2YnOiAndmlkZW8veC1tcy1hc2YnLFxuXHQnYXN4JzogJ3ZpZGVvL3gtbXMtYXNmJyxcblx0J3dtJzogJ3ZpZGVvL3gtbXMtd20nLFxuXHQnd214JzogJ3ZpZGVvL3gtbXMtd214Jyxcblx0J3d2eCc6ICd2aWRlby94LW1zLXd2eCcsXG5cdCdtb3ZpZSc6ICd2aWRlby94LXNnaS1tb3ZpZScsXG5cblx0Ly8gYWRvYmVcblx0J3BkZic6ICdhcHBsaWNhdGlvbi9wZGYnLFxuXHQncHNkJzogJ2ltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AnLFxuXHQnYWknOiAnYXBwbGljYXRpb24vcG9zdHNjcmlwdCcsXG5cdCdlcHMnOiAnYXBwbGljYXRpb24vcG9zdHNjcmlwdCcsXG5cdCdwcyc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JyxcblxuXHQvLyBtcyBvZmZpY2Vcblx0J2RvYyc6ICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuXHQnZG90JzogJ2FwcGxpY2F0aW9uL21zd29yZCcsXG5cdCdydGYnOiAnYXBwbGljYXRpb24vcnRmJyxcblx0J3hscyc6ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuXHQncHB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50Jyxcblx0J2RvY3gnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuXHQneGxzeCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG5cdCdkb3R4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlJyxcblx0J3BwdHgnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbicsXG5cblx0Ly8gb3BlbiBvZmZpY2Vcblx0J29kdCc6ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQnLFxuXHQnb2RzJzogJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQnXG59O1xuXG5leHBvcnQgeyBNaW1lLCBNaW1lIGFzIGRlZmF1bHQgfTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgaGlkZShBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIGNyZWF0ZShudWxsKSk7XG59XG5cbi8vIGFkZCBhIGtleSB0byBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBoaWRlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGQVVMVCA9PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuYXRpdmVJdGVyYXRvci5jYWxsKHRoaXMpOyB9O1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGhpZGUoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IpO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldDtcbiAgICBzZXR0ZXIuY2FsbCh0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlci5jYWxsKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwicmVxdWlyZSgnLi9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiAhQ29sbGVjdGlvblByb3RvdHlwZVtUT19TVFJJTkdfVEFHXSkge1xuICAgIGhpZGUoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpc0Z1bmMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0FzaycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNBc2snXG59KVxuY2xhc3MgQXNrUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmFza0Rlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnllc0J1dHRvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubm9CdXR0b24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMueWVzRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm5vRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSB0cnVlO1xuXHRcdHRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgPSB0cnVlO1xuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLlBvcHVwQXNrO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmFza0Rlc2MoJycpO1xuXHRcdHRoaXMueWVzQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX1lFUycpKTtcblx0XHR0aGlzLm5vQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX05PJykpO1xuXG5cdFx0dGhpcy55ZXNGb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5ub0ZvY3VzKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXHR9XG5cblx0eWVzQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZlllc0FjdGlvbikpIHtcblx0XHRcdHRoaXMuZlllc0FjdGlvbi5jYWxsKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdG5vQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZk5vQWN0aW9uKSkge1xuXHRcdFx0dGhpcy5mTm9BY3Rpb24uY2FsbChudWxsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBc2tEZXNjXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmWWVzRnVuY1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZk5vRnVuY1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNZZXNCdXR0b25cblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzTm9CdXR0b25cblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkZvY3VzWWVzT25TaG93ID0gdHJ1ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uU2hvdyhhc2tEZXNjLCBmWWVzRnVuYyA9IG51bGwsIGZOb0Z1bmMgPSBudWxsLCB5ZXNCdXR0b24gPSAnJywgbm9CdXR0b24gPSAnJywgaXNGb2N1c1llc09uU2hvdyA9IHRydWUpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IGZZZXNGdW5jIHx8IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBmTm9GdW5jIHx8IG51bGw7XG5cblx0XHR0aGlzLmFza0Rlc2MoYXNrRGVzYyB8fCAnJyk7XG5cblx0XHRpZiAoeWVzQnV0dG9uKSB7XG5cdFx0XHR0aGlzLnllc0J1dHRvbih5ZXNCdXR0b24pO1xuXHRcdH1cblxuXHRcdGlmIChub0J1dHRvbikge1xuXHRcdFx0dGhpcy5ub0J1dHRvbihub0J1dHRvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSAhIWlzRm9jdXNZZXNPblNob3c7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKHRoaXMuYkZvY3VzWWVzT25TaG93KSB7XG5cdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCd0YWIsIHNoaWZ0K3RhYiwgcmlnaHQsIGxlZnQnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMueWVzRm9jdXMoKSkge1xuXHRcdFx0XHR0aGlzLm5vRm9jdXModHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0dGhpcy5ub0NsaWNrKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQXNrUG9wdXBWaWV3LCBBc2tQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgUHJvcGVydGllc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgJiYgaXQgIT09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoaXQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgQXJyYXlJdGVyYXRvck1ldGhvZHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvck1ldGhvZHMudmFsdWVzO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUpIHtcbiAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gIT09IEFycmF5VmFsdWVzKSB0cnkge1xuICAgICAgaGlkZShDb2xsZWN0aW9uUHJvdG90eXBlLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSA9IEFycmF5VmFsdWVzO1xuICAgIH1cbiAgICBpZiAoIUNvbGxlY3Rpb25Qcm90b3R5cGVbVE9fU1RSSU5HX1RBR10pIGhpZGUoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgICBpZiAoRE9NSXRlcmFibGVzW0NPTExFQ1RJT05fTkFNRV0pIGZvciAodmFyIE1FVEhPRF9OQU1FIGluIEFycmF5SXRlcmF0b3JNZXRob2RzKSB7XG4gICAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSAhPT0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKSB0cnkge1xuICAgICAgICBoaWRlKENvbGxlY3Rpb25Qcm90b3R5cGUsIE1FVEhPRF9OQU1FLCBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gPSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIG5hdGl2ZVBhcnNlSW50ID0gZ2xvYmFsLnBhcnNlSW50O1xudmFyIGhleCA9IC9eWystXT8wW1h4XS87XG52YXIgRk9SQ0VEID0gbmF0aXZlUGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMDgnKSAhPT0gOCB8fCBuYXRpdmVQYXJzZUludCh3aGl0ZXNwYWNlcyArICcweDE2JykgIT09IDIyO1xuXG4vLyBgcGFyc2VJbnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgpIHtcbiAgdmFyIFMgPSB0cmltKFN0cmluZyhzdHJpbmcpKTtcbiAgcmV0dXJuIG5hdGl2ZVBhcnNlSW50KFMsIChyYWRpeCA+Pj4gMCkgfHwgKGhleC50ZXN0KFMpID8gMTYgOiAxMCkpO1xufSA6IG5hdGl2ZVBhcnNlSW50O1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHdoaXRlc3BhY2UgPSAnWycgKyB3aGl0ZXNwYWNlcyArICddJztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAod2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKiQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBxdW90ID0gL1wiL2c7XG5cbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlaHRtbFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZShzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBtZXRob2QsIGxvd2VyY2FzZVxuLy8gb2YgYSB0YWcgYW5kIGVzY2FwaW5nIHF1b3RlcyBpbiBhcmd1bWVudHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tNRVRIT0RfTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pO1xufTtcbiIsInZhciByZWR1Y2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JlZHVjZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZWR1Y2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZWR1Y2UpID8gcmVkdWNlIDogb3duO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0KTtcbiAgICB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG5pZiAoSXRlcmF0b3JQcm90b3R5cGUgPT0gdW5kZWZpbmVkKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxuaWYgKCFJU19QVVJFICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSkgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIHNjcmlwdCA9ICdzY3JpcHQnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBqcyA9ICdqYXZhJyArIHNjcmlwdCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gU3RyaW5nKGpzKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArIHNjcmlwdCArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy8nICsgc2NyaXB0ICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4obGVuZ3RoLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIE1FVEhPRF9SRVFVSVJFRCA9IHRvU3RyaW5nICE9PSAoe30pLnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmIE1FVEhPRF9SRVFVSVJFRCkgaGlkZSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIG5ldyAoQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCIvLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mb3JFYWNoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICB8fCBET01JdGVyYWJsZXMuaGFzT3duUHJvcGVydHkoY2xhc3NvZihpdCkpID8gZm9yRWFjaCA6IG93bjtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IGNvbnZlcnRMYW5nTmFtZSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbi8vIGltcG9ydCB7dmlldywgVmlld1R5cGV9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IHBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9MYW5ndWFnZXMnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzTGFuZ3VhZ2VzJ1xufSlcbmNsYXNzIExhbmd1YWdlc1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5mTGFuZyA9IG51bGw7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubGFuZ3MgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZXMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB1c2VyTGFuZ3VhZ2UgPSB0aGlzLnVzZXJMYW5ndWFnZSgpO1xuXHRcdFx0cmV0dXJuIF8ubWFwKHRoaXMubGFuZ3MoKSwgKGxhbmd1YWdlKSA9PiAoe1xuXHRcdFx0XHRrZXk6IGxhbmd1YWdlLFxuXHRcdFx0XHR1c2VyOiBsYW5ndWFnZSA9PT0gdXNlckxhbmd1YWdlLFxuXHRcdFx0XHRzZWxlY3RlZDoga28ub2JzZXJ2YWJsZShmYWxzZSksXG5cdFx0XHRcdGZ1bGxOYW1lOiBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UpXG5cdFx0XHR9KSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmxhbmdzLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnNldExhbmd1YWdlU2VsZWN0aW9uKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRsYW5ndWFnZVRvb2x0aXBOYW1lKGxhbmd1YWdlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gY29udmVydExhbmdOYW1lKGxhbmd1YWdlLCB0cnVlKTtcblx0XHRyZXR1cm4gY29udmVydExhbmdOYW1lKGxhbmd1YWdlLCBmYWxzZSkgPT09IHJlc3VsdCA/ICcnIDogcmVzdWx0O1xuXHR9XG5cblx0c2V0TGFuZ3VhZ2VTZWxlY3Rpb24oKSB7XG5cdFx0Y29uc3QgY3VycmVudExhbmcgPSB0aGlzLmZMYW5nID8ga28udW53cmFwKHRoaXMuZkxhbmcpIDogJyc7XG5cdFx0Xy5lYWNoKHRoaXMubGFuZ3VhZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRpdGVtLnNlbGVjdGVkKGl0ZW0ua2V5ID09PSBjdXJyZW50TGFuZyk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkJlZm9yZVNob3coKSB7XG5cdFx0dGhpcy5mTGFuZyA9IG51bGw7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UoJycpO1xuXG5cdFx0dGhpcy5sYW5ncyhbXSk7XG5cdH1cblxuXHRvblNob3coZkxhbmd1YWdlLCBsYW5ncywgdXNlckxhbmd1YWdlKSB7XG5cdFx0dGhpcy5mTGFuZyA9IGZMYW5ndWFnZTtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSh1c2VyTGFuZ3VhZ2UgfHwgJycpO1xuXG5cdFx0dGhpcy5sYW5ncyhsYW5ncyk7XG5cdH1cblxuXHRjaGFuZ2VMYW5ndWFnZShsYW5nKSB7XG5cdFx0aWYgKHRoaXMuZkxhbmcpIHtcblx0XHRcdHRoaXMuZkxhbmcobGFuZyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgTGFuZ3VhZ2VzUG9wdXBWaWV3LCBMYW5ndWFnZXNQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsga2lsbEN0cmxBQ3RybFMsIGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSwgY3JlYXRlQ29tbWFuZExlZ2FjeSwgZG9tUmVhZHkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgJHdpbiwgJGh0bWwsIGRhdGEgYXMgR2xvYmFsc0RhdGEsIGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgKiBhcyBFbnVtcyBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgRW1haWxNb2RlbCB9IGZyb20gJ01vZGVsL0VtYWlsJztcblxuZXhwb3J0IGRlZmF1bHQgKEFwcCkgPT4ge1xuXHRHbG9iYWxzRGF0YS5fX0FQUF9fID0gQXBwO1xuXG5cdCR3aW4ub24oJ2tleWRvd24nLCBraWxsQ3RybEFDdHJsUykub24oJ3VubG9hZCcsICgpID0+IHtcblx0XHRHbG9iYWxzRGF0YS5iVW5sb2FkID0gdHJ1ZTtcblx0fSk7XG5cblx0JGh0bWwuYWRkQ2xhc3MoYk1vYmlsZURldmljZSA/ICdtb2JpbGUnIDogJ25vLW1vYmlsZScpLm9uKCdjbGljay5kcm9wZG93bi5kYXRhLWFwaScsIGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSk7XG5cblx0Y29uc3QgcmwgPSB3aW5kb3cucmwgfHwge307XG5cblx0cmwuaTE4biA9IGkxOG47XG5cdHJsLmNyZWF0ZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kTGVnYWN5O1xuXG5cdHJsLmFkZFNldHRpbmdzVmlld01vZGVsID0gUGx1Z2lucy5hZGRTZXR0aW5nc1ZpZXdNb2RlbDtcblx0cmwuYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbiA9IFBsdWdpbnMuYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbjtcblxuXHRybC5hZGRIb29rID0gUGx1Z2lucy5hZGRIb29rO1xuXHRybC5zZXR0aW5nc0dldCA9IFBsdWdpbnMubWFpblNldHRpbmdzR2V0O1xuXHRybC5wbHVnaW5TZXR0aW5nc0dldCA9IFBsdWdpbnMuc2V0dGluZ3NHZXQ7XG5cdHJsLnBsdWdpblJlbW90ZVJlcXVlc3QgPSBQbHVnaW5zLnJlbW90ZVJlcXVlc3Q7XG5cblx0cmwuRW1haWxNb2RlbCA9IEVtYWlsTW9kZWw7XG5cdHJsLkVudW1zID0gRW51bXM7XG5cblx0d2luZG93LnJsID0gcmw7XG5cblx0d2luZG93Ll9fQVBQX0JPT1QgPSAoZkVycm9yQ2FsbGJhY2spID0+IHtcblx0XHRkb21SZWFkeSgoKSA9PiB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh3aW5kb3cucmFpbmxvb3BURU1QTEFURVMgJiYgd2luZG93LnJhaW5sb29wVEVNUExBVEVTWzBdKSB7XG5cdFx0XHRcdFx0d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdybC10ZW1wbGF0ZXMnKS5pbm5lckhUTUwgPSB3aW5kb3cucmFpbmxvb3BURU1QTEFURVNbMF07XG5cblx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnbm8tanMgcmwtYm9vdGVkLXRyaWdnZXInKS5hZGRDbGFzcygncmwtYm9vdGVkJyk7XG5cblx0XHRcdFx0XHRcdEFwcC5ib290c3RhcnQoKTtcblx0XHRcdFx0XHR9LCBFbnVtcy5NYWdpY3MuVGltZTEwbXMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZFcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aW5kb3cuX19BUFBfQk9PVCA9IG51bGw7XG5cdFx0XHR9LCBFbnVtcy5NYWdpY3MuVGltZTEwbXMpO1xuXHRcdH0pO1xuXHR9O1xufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyAkaHRtbCwgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBBYnN0cmFjdEFwcFN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLm5ld01vdmVUb0ZvbGRlciA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zdCBhbmltID0gYk1vYmlsZURldmljZSB8fCAhdmFsdWU7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtYW5pbScsICFhbmltKS50b2dnbGVDbGFzcygnbm8tcmwtYW5pbScsIGFuaW0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24udmFsdWVIYXNNdXRhdGVkKCk7XG5cblx0XHR0aGlzLnByZW0gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNvbW11bml0eSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25Mb2dpbighIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0xhbmd1YWdlc09uTG9naW4nKSk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dMYW5ndWFnZXNPblNldHRpbmdzJykpO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ05ld01vdmVUb0ZvbGRlcicpKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0ludGVyZmFjZUFuaW1hdGlvbicpKTtcblxuXHRcdHRoaXMucHJlbSghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdQcmVtVHlwZScpKTtcblx0XHR0aGlzLmNvbW11bml0eSghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdDb21tdW5pdHknKSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RBcHBTdG9yZSwgQWJzdHJhY3RBcHBTdG9yZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuXG5pbXBvcnQgeyBUT0tFTl9FUlJPUl9MSU1JVCwgQUpBWF9FUlJPUl9MSU1JVCwgREVGQVVMVF9BSkFYX1RJTUVPVVQgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaW5BcnJheSwgcEludCwgcFN0cmluZywgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IGFqYXggfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgcnVuSG9vayB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEFic3RyYWN0QWpheFJlbW90ZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1JlcXVlc3RBY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUeXBlXG5cdCAqIEBwYXJhbSB7P0FqYXhKc29uRGVmYXVsdFJlc3BvbnNlfSBvRGF0YVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJDYWNoZWRcblx0ICogQHBhcmFtIHsqPX0gb1JlcXVlc3RQYXJhbWV0ZXJzXG5cdCAqL1xuXHRkZWZhdWx0UmVzcG9uc2UoZkNhbGxiYWNrLCBzUmVxdWVzdEFjdGlvbiwgc1R5cGUsIG9EYXRhLCBiQ2FjaGVkLCBvUmVxdWVzdFBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBmQ2FsbCA9ICgpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSBzVHlwZSAmJiBHbG9iYWxzRGF0YS5iVW5sb2FkKSB7XG5cdFx0XHRcdHNUeXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuVW5sb2FkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgJiYgb0RhdGEgJiYgIW9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0RhdGEgJiZcblx0XHRcdFx0XHQtMSA8XG5cdFx0XHRcdFx0XHRpbkFycmF5KG9EYXRhLkVycm9yQ29kZSwgW1xuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQXV0aEVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQWNjZXNzRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Db25uZWN0aW9uRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Eb21haW5Ob3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5NYWlsU2VydmVyRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bkVycm9yXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQgKz0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvRGF0YSAmJiBOb3RpZmljYXRpb24uSW52YWxpZFRva2VuID09PSBvRGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoVE9LRU5fRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50KSB7XG5cdFx0XHRcdFx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18gJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZCkge1xuXHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9EYXRhLkNsZWFyQXV0aCB8fCBvRGF0YS5Mb2dvdXQgfHwgQUpBWF9FUlJPUl9MSU1JVCA8IEdsb2JhbHNEYXRhLmlBamF4RXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18uY2xlYXJDbGllbnRTaWRlVG9rZW4pIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uY2xlYXJDbGllbnRTaWRlVG9rZW4oKTtcblxuXHRcdFx0XHRcdFx0aWYgKCFvRGF0YS5DbGVhckF1dGggJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZCkge1xuXHRcdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmxvZ2luQW5kTG9nb3V0UmVsb2FkKGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgJiYgb0RhdGEgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdEdsb2JhbHNEYXRhLmlBamF4RXJyb3JDb3VudCA9IDA7XG5cdFx0XHRcdEdsb2JhbHNEYXRhLmlUb2tlbkVycm9yQ291bnQgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHRydW5Ib29rKCdhamF4LWRlZmF1bHQtcmVzcG9uc2UnLCBbXG5cdFx0XHRcdHNSZXF1ZXN0QWN0aW9uLFxuXHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSA/IG9EYXRhIDogbnVsbCxcblx0XHRcdFx0c1R5cGUsXG5cdFx0XHRcdGJDYWNoZWQsXG5cdFx0XHRcdG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHRcdFx0XSk7XG5cblx0XHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdFx0ZkNhbGxiYWNrKFxuXHRcdFx0XHRcdHNUeXBlLFxuXHRcdFx0XHRcdFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlID8gb0RhdGEgOiBudWxsLFxuXHRcdFx0XHRcdGJDYWNoZWQsXG5cdFx0XHRcdFx0c1JlcXVlc3RBY3Rpb24sXG5cdFx0XHRcdFx0b1JlcXVlc3RQYXJhbWV0ZXJzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHN3aXRjaCAoc1R5cGUpIHtcblx0XHRcdGNhc2UgJ3N1Y2Nlc3MnOlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3M7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYWJvcnQnOlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLkFib3J0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHNUeXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3I7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5FcnJvciA9PT0gc1R5cGUpIHtcblx0XHRcdF8uZGVsYXkoZkNhbGwsIDMwMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZDYWxsKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmUmVzdWx0Q2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSB7P251bWJlcj19IGlUaW1lT3V0ID0gMjAwMDBcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzR2V0QWRkID0gJydcblx0ICogQHBhcmFtIHtBcnJheT19IGFBYm9ydEFjdGlvbnMgPSBbXVxuXHQgKiBAcmV0dXJucyB7alF1ZXJ5LmpxWEhSfVxuXHQgKi9cblx0YWpheFJlcXVlc3QoZlJlc3VsdENhbGxiYWNrLCBwYXJhbXMsIGlUaW1lT3V0ID0gMjAwMDAsIHNHZXRBZGQgPSAnJywgYWJvcnRBY3Rpb25zID0gW10pIHtcblx0XHRjb25zdCBpc1Bvc3QgPSAnJyA9PT0gc0dldEFkZCxcblx0XHRcdGhlYWRlcnMgPSB7fSxcblx0XHRcdHN0YXJ0ID0gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpO1xuXG5cdFx0bGV0IGFjdGlvbiA9ICcnO1xuXG5cdFx0cGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXHRcdGFjdGlvbiA9IHBhcmFtcy5BY3Rpb24gfHwgJyc7XG5cblx0XHRpZiAoYWN0aW9uICYmIDAgPCBhYm9ydEFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRfLmVhY2goYWJvcnRBY3Rpb25zLCAoYWN0aW9uVG9BYm9ydCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0pIHtcblx0XHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25Ub0Fib3J0XS5fX2Fib3J0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25Ub0Fib3J0XS5hYm9ydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uYWJvcnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0gPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoaXNQb3N0KSB7XG5cdFx0XHRwYXJhbXMuWFRva2VuID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3Rva2VuJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RlZkFqYXggPSAkLmFqYXgoe1xuXHRcdFx0dHlwZTogaXNQb3N0ID8gJ1BPU1QnIDogJ0dFVCcsXG5cdFx0XHR1cmw6IGFqYXgoc0dldEFkZCksXG5cdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdGRhdGFUeXBlOiAnanNvbicsXG5cdFx0XHRkYXRhOiBpc1Bvc3QgPyBwYXJhbXMgOiB7fSxcblx0XHRcdGhlYWRlcnM6IGhlYWRlcnMsXG5cdFx0XHR0aW1lb3V0OiBpVGltZU91dCxcblx0XHRcdGdsb2JhbDogdHJ1ZVxuXHRcdH0pO1xuXG5cdFx0b0RlZkFqYXguYWx3YXlzKChvRGF0YSwgc1R5cGUpID0+IHtcblx0XHRcdGxldCBjYWNoZWQgPSBmYWxzZTtcblx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5UaW1lKSB7XG5cdFx0XHRcdGNhY2hlZCA9IHBJbnQob0RhdGEuVGltZSkgPiBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCkgLSBzdGFydDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFjdGlvbiAmJiB0aGlzLm9SZXF1ZXN0c1thY3Rpb25dKSB7XG5cdFx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25dLl9fYWJvcnRlZCkge1xuXHRcdFx0XHRcdHNUeXBlID0gJ2Fib3J0Jztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0gPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmRlZmF1bHRSZXNwb25zZShmUmVzdWx0Q2FsbGJhY2ssIGFjdGlvbiwgc1R5cGUsIG9EYXRhLCBjYWNoZWQsIHBhcmFtcyk7XG5cdFx0fSk7XG5cblx0XHRpZiAoYWN0aW9uICYmIDAgPCBhYm9ydEFjdGlvbnMubGVuZ3RoICYmIC0xIDwgaW5BcnJheShhY3Rpb24sIGFib3J0QWN0aW9ucykpIHtcblx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25dKSB7XG5cdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uX19hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uYWJvcnQpIHtcblx0XHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dLmFib3J0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0gPSBvRGVmQWpheDtcblx0XHR9XG5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHRcdG9EZWZBamF4LmNhdGNoKGNvbnNvbGUubG9nKTtcblx0XHRyZXR1cm4gb0RlZkFqYXg7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0FjdGlvblxuXHQgKiBAcGFyYW0ge09iamVjdD19IG9QYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSB7P251bWJlcj19IGlUaW1lb3V0XG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0dldEFkZCA9ICcnXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQWJvcnRBY3Rpb25zID0gW11cblx0ICovXG5cdGRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgc0FjdGlvbiwgb1BhcmFtZXRlcnMsIGlUaW1lb3V0LCBzR2V0QWRkLCBhQWJvcnRBY3Rpb25zKSB7XG5cdFx0b1BhcmFtZXRlcnMgPSBvUGFyYW1ldGVycyB8fCB7fTtcblx0XHRvUGFyYW1ldGVycy5BY3Rpb24gPSBzQWN0aW9uO1xuXG5cdFx0c0dldEFkZCA9IHBTdHJpbmcoc0dldEFkZCk7XG5cblx0XHRydW5Ib29rKCdhamF4LWRlZmF1bHQtcmVxdWVzdCcsIFtzQWN0aW9uLCBvUGFyYW1ldGVycywgc0dldEFkZF0pO1xuXG5cdFx0cmV0dXJuIHRoaXMuYWpheFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHRvUGFyYW1ldGVycyxcblx0XHRcdGlzVW5kKGlUaW1lb3V0KSA/IERFRkFVTFRfQUpBWF9USU1FT1VUIDogcEludChpVGltZW91dCksXG5cdFx0XHRzR2V0QWRkLFxuXHRcdFx0YUFib3J0QWN0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0bm9vcChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ05vb3AnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTWVzc2FnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZpbGVOYW1lXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBpTGluZU5vXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTG9jYXRpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNIdG1sQ2FwYVxuXHQgKiBAcGFyYW0ge251bWJlcn0gaVRpbWVcblx0ICovXG5cdGpzRXJyb3IoZkNhbGxiYWNrLCBzTWVzc2FnZSwgc0ZpbGVOYW1lLCBpTGluZU5vLCBzTG9jYXRpb24sIHNIdG1sQ2FwYSwgaVRpbWUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0pzRXJyb3InLCB7XG5cdFx0XHQnTWVzc2FnZSc6IHNNZXNzYWdlLFxuXHRcdFx0J0ZpbGVOYW1lJzogc0ZpbGVOYW1lLFxuXHRcdFx0J0xpbmVObyc6IGlMaW5lTm8sXG5cdFx0XHQnTG9jYXRpb24nOiBzTG9jYXRpb24sXG5cdFx0XHQnSHRtbENhcGEnOiBzSHRtbENhcGEsXG5cdFx0XHQnVGltZU9uUGFnZSc6IGlUaW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1R5cGVcblx0ICogQHBhcmFtIHtBcnJheT19IG1EYXRhID0gbnVsbFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiSXNFcnJvciA9IGZhbHNlXG5cdCAqL1xuXHRqc0luZm8oZkNhbGxiYWNrLCBzVHlwZSwgbURhdGEsIGJJc0Vycm9yID0gZmFsc2UpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0pzSW5mbycsIHtcblx0XHRcdCdUeXBlJzogc1R5cGUsXG5cdFx0XHQnRGF0YSc6IG1EYXRhLFxuXHRcdFx0J0lzRXJyb3InOiBiSXNFcnJvciA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGdldFB1YmxpY0tleShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0dldFB1YmxpY0tleScpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNWZXJzaW9uXG5cdCAqL1xuXHRqc1ZlcnNpb24oZkNhbGxiYWNrLCBzVmVyc2lvbikge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVmVyc2lvbicsIHtcblx0XHRcdCdWZXJzaW9uJzogc1ZlcnNpb25cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUsIEFic3RyYWN0QWpheFJlbW90ZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgVklFV19NT0RFTFMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1biwgd2luZG93UmVzaXplLCBsb2csIGlzVW5kLCBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5jbGFzcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTY3JlZW4ge1xuXHQvKipcblx0ICogQHBhcmFtIHtBcnJheX0gdmlld01vZGVsc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iodmlld01vZGVscykge1xuXHRcdHN1cGVyKCdzZXR0aW5ncycsIHZpZXdNb2RlbHMpO1xuXG5cdFx0dGhpcy5tZW51ID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBudWxsO1xuXHRcdHRoaXMub1ZpZXdNb2RlbFBsYWNlID0gbnVsbDtcblxuXHRcdHRoaXMuc2V0dXBTZXR0aW5ncygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmQ2FsbGJhY2tcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uUm91dGUoc3ViTmFtZSkge1xuXHRcdGxldCBzZXR0aW5nc1NjcmVlbiA9IG51bGwsXG5cdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxQbGFjZSA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBfLmZpbmQoXG5cdFx0XHRWSUVXX01PREVMUy5zZXR0aW5ncyxcblx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwgJiYgU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSAmJiBzdWJOYW1lID09PSBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLlJvdXRlXG5cdFx0KTtcblxuXHRcdGlmIChSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLXJlbW92ZWQnXSxcblx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRcdERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJlxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10sXG5cdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+XG5cdFx0XHRcdFx0XHREaXNhYmxlZFNldHRpbmdzVmlld01vZGVsICYmIERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgPT09IFJvdXRlZFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFJvdXRlZFNldHRpbmdzVmlld01vZGVsKSB7XG5cdFx0XHRpZiAoUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19idWlsZGVkICYmIFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0pIHtcblx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gPSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3ZtO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmlld01vZGVsUGxhY2UgPSB0aGlzLm9WaWV3TW9kZWxQbGFjZTtcblx0XHRcdFx0aWYgKHZpZXdNb2RlbFBsYWNlICYmIDEgPT09IHZpZXdNb2RlbFBsYWNlLmxlbmd0aCkge1xuXHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuID0gbmV3IFJvdXRlZFNldHRpbmdzVmlld01vZGVsKCk7XG5cblx0XHRcdFx0XHR2aWV3TW9kZWxEb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3JsLXNldHRpbmdzLXZpZXctbW9kZWwnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKTtcblx0XHRcdFx0XHR2aWV3TW9kZWxEb20uYXBwZW5kVG8odmlld01vZGVsUGxhY2UpO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4udmlld01vZGVsRG9tID0gdmlld01vZGVsRG9tO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YSA9IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGE7XG5cblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2RvbSA9IHZpZXdNb2RlbERvbTtcblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2J1aWxkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdGNvbnN0IHRtcGwgPSB7IG5hbWU6IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuVGVtcGxhdGUgfTtcblx0XHRcdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdFx0XHR2aWV3TW9kZWxEb21bMF0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRyYW5zbGF0b3JJbml0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogKCkgPT4gdG1wbFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHNldHRpbmdzU2NyZWVuLCAnb25CdWlsZCcsIFt2aWV3TW9kZWxEb21dKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2coJ0Nhbm5vdCBmaW5kIHN1YiBzZXR0aW5ncyB2aWV3IG1vZGVsIHBvc2l0aW9uOiBTZXR0aW5nc1N1YlNjcmVlbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5nc1NjcmVlbikge1xuXHRcdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0XHQvLyBoaWRlXG5cdFx0XHRcdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4pIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdC8vIHNob3dcblx0XHRcdFx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbikge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uQmVmb3JlU2hvdycpO1xuXHRcdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXG5cdFx0XHRcdFx0XHRfLmVhY2godGhpcy5tZW51KCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uc2VsZWN0ZWQoXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gJiZcblx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0ucm91dGUgPT09IHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEuUm91dGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQkKCcjcmwtY29udGVudCAuYi1zZXR0aW5ncyAuYi1jb250ZW50IC5jb250ZW50Jykuc2Nyb2xsVG9wKDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdFx0d2luZG93UmVzaXplKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRIYXNoKHNldHRpbmdzKCksIGZhbHNlLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gJiYgdGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZWFjaChWSUVXX01PREVMUy5zZXR0aW5ncywgKFNldHRpbmdzVmlld01vZGVsKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsICYmXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0IV8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLFxuXHRcdFx0XHRcdChSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCkgPT4gUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgJiYgUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgPT09IFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLm1lbnUucHVzaCh7XG5cdFx0XHRcdFx0cm91dGU6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUsXG5cdFx0XHRcdFx0bGFiZWw6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuTGFiZWwsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGtvLm9ic2VydmFibGUoZmFsc2UpLFxuXHRcdFx0XHRcdGRpc2FibGVkOiAhIV8uZmluZChcblx0XHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1kaXNhYmxlZCddLFxuXHRcdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+IERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5vVmlld01vZGVsUGxhY2UgPSAkKCcjcmwtY29udGVudCAjcmwtc2V0dGluZ3Mtc3Vic2NyZWVuJyk7XG5cdH1cblxuXHRyb3V0ZXMoKSB7XG5cdFx0Y29uc3QgRGVmYXVsdFZpZXdNb2RlbCA9IF8uZmluZChcblx0XHRcdFx0VklFV19NT0RFTFMuc2V0dGluZ3MsXG5cdFx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhICYmIFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuSXNEZWZhdWx0XG5cdFx0XHQpLFxuXHRcdFx0ZGVmYXVsdFJvdXRlID1cblx0XHRcdFx0RGVmYXVsdFZpZXdNb2RlbCAmJiBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgPyBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUgOiAnZ2VuZXJhbCcsXG5cdFx0XHRydWxlcyA9IHtcblx0XHRcdFx0c3VibmFtZTogL14oLiopJC8sXG5cdFx0XHRcdG5vcm1hbGl6ZV86IChycXVlc3QsIHZhbHMpID0+IHtcblx0XHRcdFx0XHR2YWxzLnN1Ym5hbWUgPSBpc1VuZCh2YWxzLnN1Ym5hbWUpID8gZGVmYXVsdFJvdXRlIDogcFN0cmluZyh2YWxzLnN1Ym5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBbdmFscy5zdWJuYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBbWyd7c3VibmFtZX0vJywgcnVsZXNdLCBbJ3tzdWJuYW1lfScsIHJ1bGVzXSwgWycnLCBydWxlc11dO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0U2V0dGluZ3NTY3JlZW4sIEFic3RyYWN0U2V0dGluZ3NTY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQgc3NtIGZyb20gJ3NzbSc7XG5cbmltcG9ydCB7XG5cdCR3aW4sXG5cdCRodG1sLFxuXHQkZG9jLFxuXHRzdGFydE1pY3JvdGltZSxcblx0bGVmdFBhbmVsRGlzYWJsZWQsXG5cdGxlZnRQYW5lbFR5cGUsXG5cdHNVc2VyQWdlbnQsXG5cdGJNb2JpbGVEZXZpY2UsXG5cdGJBbmltYXRpb25TdXBwb3J0ZWRcbn0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQge1xuXHRub29wLFxuXHRpc05vcm1hbCxcblx0cFN0cmluZyxcblx0aW5BcnJheSxcblx0bWljcm90aW1lLFxuXHR0aW1lc3RhbXAsXG5cdGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSxcblx0d2luZG93UmVzaXplQ2FsbGJhY2tcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgS2V5U3RhdGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyByb290LCByb290QWRtaW4sIHJvb3RVc2VyLCBwb3B1bGF0ZUF1dGhTdWZmaXggfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgaW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UsIGluaXROb3RpZmljYXRpb25MYW5ndWFnZSB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgTGFuZ3VhZ2VTdG9yZSBmcm9tICdTdG9yZXMvTGFuZ3VhZ2UnO1xuaW1wb3J0IFRoZW1lU3RvcmUgZnJvbSAnU3RvcmVzL1RoZW1lJztcbmltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcblxuaW1wb3J0IHsgcm91dGVPZmYsIHNldEhhc2ggfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdEJvb3QgfSBmcm9tICdLbm9pbi9BYnN0cmFjdEJvb3QnO1xuXG5jbGFzcyBBYnN0cmFjdEFwcCBleHRlbmRzIEFic3RyYWN0Qm9vdCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge1JlbW90ZVN0b3JhZ2V8QWRtaW5SZW1vdGVTdG9yYWdlfSBSZW1vdGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKFJlbW90ZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSA9IG51bGw7XG5cdFx0dGhpcy5pc0xvY2FsQXV0b2NvbXBsZXRlID0gdHJ1ZTtcblx0XHR0aGlzLmlmcmFtZSA9IG51bGw7XG5cdFx0dGhpcy5sYXN0RXJyb3JUaW1lID0gMDtcblxuXHRcdHRoaXMuaWZyYW1lID0gJCgnPGlmcmFtZSBjbGFzcz1cImludGVybmFsLWhpZGRkZW5cIiAvPicpLmFwcGVuZFRvKCdib2R5Jyk7XG5cblx0XHQkd2luLm9uKCdlcnJvcicsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRldmVudCAmJlxuXHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50ICYmXG5cdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQubWVzc2FnZSAmJlxuXHRcdFx0XHQtMSA9PT1cblx0XHRcdFx0XHRpbkFycmF5KGV2ZW50Lm9yaWdpbmFsRXZlbnQubWVzc2FnZSwgWydTY3JpcHQgZXJyb3IuJywgJ1VuY2F1Z2h0IEVycm9yOiBFcnJvciBjYWxsaW5nIG1ldGhvZCBvbiBOUE9iamVjdC4nXSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCB0aW1lID0gdGltZXN0YW1wKCk7XG5cdFx0XHRcdGlmICh0aGlzLmxhc3RFcnJvclRpbWUgPj0gdGltZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMubGFzdEVycm9yVGltZSA9IHRpbWU7XG5cblx0XHRcdFx0UmVtb3RlLmpzRXJyb3IoXG5cdFx0XHRcdFx0bm9vcCxcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50Lm1lc3NhZ2UsXG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5maWxlbmFtZSxcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LmxpbmVubyxcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLnRvU3RyaW5nID8gd2luZG93LmxvY2F0aW9uLnRvU3RyaW5nKCkgOiAnJyxcblx0XHRcdFx0XHQkaHRtbC5hdHRyKCdjbGFzcycpLFxuXHRcdFx0XHRcdG1pY3JvdGltZSgpIC0gc3RhcnRNaWNyb3RpbWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdCR3aW4ub24oJ3Jlc2l6ZScsICgpID0+IHtcblx0XHRcdEV2ZW50cy5wdWIoJ3dpbmRvdy5yZXNpemUnKTtcblx0XHR9KTtcblxuXHRcdEV2ZW50cy5zdWIoXG5cdFx0XHQnd2luZG93LnJlc2l6ZScsXG5cdFx0XHRfLnRocm90dGxlKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgaUggPSAkd2luLmhlaWdodCgpLFxuXHRcdFx0XHRcdGlXID0gJHdpbi5oZWlnaHQoKTtcblxuXHRcdFx0XHRpZiAoJHdpbi5fX3NpemVzWzBdICE9PSBpSCB8fCAkd2luLl9fc2l6ZXNbMV0gIT09IGlXKSB7XG5cdFx0XHRcdFx0JHdpbi5fX3NpemVzWzBdID0gaUg7XG5cdFx0XHRcdFx0JHdpbi5fX3NpemVzWzFdID0gaVc7XG5cblx0XHRcdFx0XHRFdmVudHMucHViKCd3aW5kb3cucmVzaXplLnJlYWwnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MG1zKVxuXHRcdCk7XG5cblx0XHQvLyBERUJVR1xuXHRcdC8vXHRcdEV2ZW50cy5zdWIoe1xuXHRcdC8vXHRcdFx0J3dpbmRvdy5yZXNpemUnOiBmdW5jdGlvbigpIHtcblx0XHQvL1x0XHRcdFx0d2luZG93LmNvbnNvbGUubG9nKCd3aW5kb3cucmVzaXplJyk7XG5cdFx0Ly9cdFx0XHR9LFxuXHRcdC8vXHRcdFx0J3dpbmRvdy5yZXNpemUucmVhbCc6IGZ1bmN0aW9uKCkge1xuXHRcdC8vXHRcdFx0XHR3aW5kb3cuY29uc29sZS5sb2coJ3dpbmRvdy5yZXNpemUucmVhbCcpO1xuXHRcdC8vXHRcdFx0fVxuXHRcdC8vXHRcdH0pO1xuXG5cdFx0JGRvY1xuXHRcdFx0Lm9uKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudCAmJiBldmVudC5jdHJsS2V5KSB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLWN0cmwta2V5LXByZXNzZWQnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbigna2V5dXAnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmICFldmVudC5jdHJsS2V5KSB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLWN0cmwta2V5LXByZXNzZWQnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHQkZG9jLm9uKFxuXHRcdFx0J21vdXNlbW92ZSBrZXlwcmVzcyBjbGljaycsXG5cdFx0XHRfLmRlYm91bmNlKCgpID0+IHtcblx0XHRcdFx0RXZlbnRzLnB1YigncmwuYXV0by1sb2dvdXQtcmVmcmVzaCcpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1cylcblx0XHQpO1xuXG5cdFx0a2V5KCdlc2MsIGVudGVyJywgS2V5U3RhdGUuQWxsLCAoKSA9PiB7XG5cdFx0XHRkZXRlY3REcm9wZG93blZpc2liaWxpdHkoKTtcblx0XHR9KTtcblx0fVxuXG5cdHJlbW90ZSgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGRhdGEoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24obmFtZSwgZGVmYXVsdF8pIHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25bbmFtZV0gfHwgZGVmYXVsdF87XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxpbmtcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRkb3dubG9hZChsaW5rKSB7XG5cdFx0aWYgKHNVc2VyQWdlbnQgJiYgKC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKSB8fCAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignY2hyb21lJykpKSB7XG5cdFx0XHRjb25zdCBvTGluayA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cdFx0XHRvTGluay5ocmVmID0gbGluaztcblxuXHRcdFx0aWYgKHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcblx0XHRcdFx0Y29uc3Qgb0UgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRXZlbnQuTW91c2VFdmVudHM7XG5cdFx0XHRcdGlmIChvRSAmJiBvRS5pbml0RXZlbnQgJiYgb0xpbmsuZGlzcGF0Y2hFdmVudCkge1xuXHRcdFx0XHRcdG9FLmluaXRFdmVudCgnY2xpY2snLCB0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRvTGluay5kaXNwYXRjaEV2ZW50KG9FKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR3aW5kb3cub3BlbihsaW5rLCAnX3NlbGYnKTtcblx0XHRcdHdpbmRvdy5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmlmcmFtZS5hdHRyKCdzcmMnLCBsaW5rKTtcblx0XHRcdC8vIHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gbGluaztcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGdvb2dsZVByZXZpZXdTdXBwb3J0ZWQoKSB7XG5cdFx0aWYgKG51bGwgPT09IHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlKSB7XG5cdFx0XHR0aGlzLmdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSA9XG5cdFx0XHRcdCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsJykgJiYgISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxQcmV2aWV3Jyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuXHQgKi9cblx0c2V0V2luZG93VGl0bGUodGl0bGUpIHtcblx0XHR0aXRsZSA9IGlzTm9ybWFsKHRpdGxlKSAmJiAwIDwgdGl0bGUubGVuZ3RoID8gJycgKyB0aXRsZSA6ICcnO1xuXHRcdGlmIChTZXR0aW5ncy5zZXR0aW5nc0dldCgnVGl0bGUnKSkge1xuXHRcdFx0dGl0bGUgKz0gKHRpdGxlID8gJyAtICcgOiAnJykgKyBTZXR0aW5ncy5zZXR0aW5nc0dldCgnVGl0bGUnKTtcblx0XHR9XG5cblx0XHR3aW5kb3cuZG9jdW1lbnQudGl0bGUgPSB0aXRsZSArICcgLi4uJztcblx0XHR3aW5kb3cuZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcblx0fVxuXG5cdHJlZGlyZWN0VG9BZG1pblBhbmVsKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSByb290QWRtaW4oKTtcblx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0fVxuXG5cdGNsZWFyQ2xpZW50U2lkZVRva2VuKCkge1xuXHRcdGlmICh3aW5kb3cuX19ybGFoX2NsZWFyKSB7XG5cdFx0XHR3aW5kb3cuX19ybGFoX2NsZWFyKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuXHQgKi9cblx0c2V0Q2xpZW50U2lkZVRva2VuKHRva2VuKSB7XG5cdFx0aWYgKHdpbmRvdy5fX3JsYWhfc2V0KSB7XG5cdFx0XHR3aW5kb3cuX19ybGFoX3NldCh0b2tlbik7XG5cblx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdBdXRoQWNjb3VudEhhc2gnLCB0b2tlbik7XG5cdFx0XHRwb3B1bGF0ZUF1dGhTdWZmaXgoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYWRtaW4gPSBmYWxzZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBsb2dvdXQgPSBmYWxzZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBjbG9zZSA9IGZhbHNlXG5cdCAqL1xuXHRsb2dpbkFuZExvZ291dFJlbG9hZChhZG1pbiA9IGZhbHNlLCBsb2dvdXQgPSBmYWxzZSwgY2xvc2UgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluSWZyYW1lID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnaW5JZnJhbWUnKTtcblx0XHRsZXQgY3VzdG9tTG9nb3V0TGluayA9IHBTdHJpbmcoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2N1c3RvbUxvZ291dExpbmsnKSk7XG5cblx0XHRpZiAobG9nb3V0KSB7XG5cdFx0XHR0aGlzLmNsZWFyQ2xpZW50U2lkZVRva2VuKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGxvZ291dCAmJiBjbG9zZSAmJiB3aW5kb3cuY2xvc2UpIHtcblx0XHRcdHdpbmRvdy5jbG9zZSgpO1xuXHRcdH1cblxuXHRcdGN1c3RvbUxvZ291dExpbmsgPSBjdXN0b21Mb2dvdXRMaW5rIHx8IChhZG1pbiA/IHJvb3RBZG1pbigpIDogcm9vdFVzZXIoKSk7XG5cblx0XHRpZiAobG9nb3V0ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmICE9PSBjdXN0b21Mb2dvdXRMaW5rKSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0aWYgKGluSWZyYW1lICYmIHdpbmRvdy5wYXJlbnQpIHtcblx0XHRcdFx0XHR3aW5kb3cucGFyZW50LmxvY2F0aW9uLmhyZWYgPSBjdXN0b21Mb2dvdXRMaW5rO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gY3VzdG9tTG9nb3V0TGluaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cdFx0XHRzZXRIYXNoKHJvb3QoKSwgdHJ1ZSk7XG5cdFx0XHRyb3V0ZU9mZigpO1xuXG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0aWYgKGluSWZyYW1lICYmIHdpbmRvdy5wYXJlbnQpIHtcblx0XHRcdFx0XHR3aW5kb3cucGFyZW50LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0aGlzdG9yeUJhY2soKSB7XG5cdFx0d2luZG93Lmhpc3RvcnkuYmFjaygpO1xuXHR9XG5cblx0Ym9vdHN0YXJ0KCkge1xuXHRcdC8vIGxvZygnUHMnICsgJ3NzLCBoYWMnICsgJ2tlcnMhIFRoZScgKyAncmVcXCdzIG5vdCcgKyAnaGluZyBpbnRlJyArICdyZXN0aW5nIDonICsgJyknKTtcblxuXHRcdEV2ZW50cy5wdWIoJ3JsLmJvb3RzdGFydCcpO1xuXG5cdFx0Y29uc3QgbW9iaWxlID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpO1xuXG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignU2F2ZVRyaWdnZXInLCByZXF1aXJlKCdDb21wb25lbnQvU2F2ZVRyaWdnZXInKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdJbnB1dCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9JbnB1dCcpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1NlbGVjdCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9TZWxlY3QnKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdSYWRpbycsIHJlcXVpcmUoJ0NvbXBvbmVudC9SYWRpbycpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1RleHRBcmVhJywgcmVxdWlyZSgnQ29tcG9uZW50L1RleHRBcmVhJykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignRGF0ZScsIHJlcXVpcmUoJ0NvbXBvbmVudC9EYXRlJykuZGVmYXVsdCk7XG5cblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCd4LXNjcmlwdCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9TY3JpcHQnKS5kZWZhdWx0KTtcblx0XHQvLyBrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdzdmctaWNvbicsIHJlcXVpcmUoJ0NvbXBvbmVudC9TdmdJY29uJykuZGVmYXVsdCk7XG5cblx0XHRpZiAoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21hdGVyaWFsRGVzaWduJykgJiYgYkFuaW1hdGlvblN1cHBvcnRlZCkge1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvTWF0ZXJpYWxEZXNpZ24vQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94U2ltcGxlJywgcmVxdWlyZSgnQ29tcG9uZW50L0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94JywgcmVxdWlyZSgnQ29tcG9uZW50L0NsYXNzaWMvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdC8vIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94U2ltcGxlJywgcmVxdWlyZSgnQ29tcG9uZW50L0NsYXNzaWMvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94JywgcmVxdWlyZSgnQ29tcG9uZW50L0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveFNpbXBsZScsIHJlcXVpcmUoJ0NvbXBvbmVudC9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdH1cblxuXHRcdGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlKGluaXROb3RpZmljYXRpb25MYW5ndWFnZSk7XG5cblx0XHRfLmRlbGF5KHdpbmRvd1Jlc2l6ZUNhbGxiYWNrLCBNYWdpY3MuVGltZTFzKTtcblxuXHRcdEV2ZW50cy5zdWIoJ3NzbS5tb2JpbGUtZW50ZXInLCAoKSA9PiB7XG5cdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHR9KTtcblxuXHRcdEV2ZW50cy5zdWIoJ3NzbS5tb2JpbGUtbGVhdmUnLCAoKSA9PiB7XG5cdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZChmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHRpZiAoIW1vYmlsZSkge1xuXHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLWRlc2t0b3AnKTtcblxuXHRcdFx0c3NtLmFkZFN0YXRlKHtcblx0XHRcdFx0aWQ6ICdtb2JpbGUnLFxuXHRcdFx0XHRxdWVyeTogJyhtYXgtd2lkdGg6IDc2N3B4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLW1vYmlsZScpO1xuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3NzbS5tb2JpbGUtZW50ZXInKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtbW9iaWxlJyk7XG5cdFx0XHRcdFx0RXZlbnRzLnB1Yignc3NtLm1vYmlsZS1sZWF2ZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c3NtLmFkZFN0YXRlKHtcblx0XHRcdFx0aWQ6ICd0YWJsZXQnLFxuXHRcdFx0XHRxdWVyeTogJyhtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTk5cHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtdGFibGV0Jyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLXRhYmxldCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c3NtLmFkZFN0YXRlKHtcblx0XHRcdFx0aWQ6ICdkZXNrdG9wJyxcblx0XHRcdFx0cXVlcnk6ICcobWluLXdpZHRoOiAxMDAwcHgpIGFuZCAobWF4LXdpZHRoOiAxNDAwcHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtZGVza3RvcCcpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ2Rlc2t0b3AtbGFyZ2UnLFxuXHRcdFx0XHRxdWVyeTogJyhtaW4td2lkdGg6IDE0MDFweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wLWxhcmdlJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AtbGFyZ2UnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtbW9iaWxlJykuYWRkQ2xhc3MoJ3JsLW1vYmlsZScpO1xuXHRcdFx0RXZlbnRzLnB1Yignc3NtLm1vYmlsZS1lbnRlcicpO1xuXHRcdH1cblxuXHRcdGxlZnRQYW5lbERpc2FibGVkLnN1YnNjcmliZSgoYlZhbHVlKSA9PiB7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1kaXNhYmxlZCcsIGJWYWx1ZSk7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1lbmFibGVkJywgIWJWYWx1ZSk7XG5cdFx0fSk7XG5cblx0XHRsZWZ0UGFuZWxUeXBlLnN1YnNjcmliZSgoc1ZhbHVlKSA9PiB7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1ub25lJywgJ25vbmUnID09PSBzVmFsdWUpO1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLWxlZnQtcGFuZWwtc2hvcnQnLCAnc2hvcnQnID09PSBzVmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQudmFsdWVIYXNNdXRhdGVkKCk7XG5cblx0XHRMYW5ndWFnZVN0b3JlLnBvcHVsYXRlKCk7XG5cdFx0VGhlbWVTdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdFNvY2lhbFN0b3JlLnBvcHVsYXRlKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RBcHAsIEFic3RyYWN0QXBwIGFzIGRlZmF1bHQgfTtcbiIsImV4cG9ydCBjbGFzcyBBYnN0cmFjdEJvb3Qge1xuXHRib290c3RhcnQoKSB7XG5cdFx0Lyogbm8tZW1wdHkgKi9cblx0fVxufVxuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBBYnN0cmFjdFJhZGlvIGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudmFsdWVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMudmFsdWUgPSBwYXJhbXMudmFsdWU7XG5cdFx0aWYgKGlzVW5kKHRoaXMudmFsdWUpIHx8ICF0aGlzLnZhbHVlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdH1cblxuXHRcdHRoaXMuaW5saW5lID0gaXNVbmQocGFyYW1zLmlubGluZSkgPyBmYWxzZSA6IHBhcmFtcy5pbmxpbmU7XG5cdFx0dGhpcy5yZWFkT25seSA9IGlzVW5kKHBhcmFtcy5yZWFkT25seSkgPyBmYWxzZSA6ICEhcGFyYW1zLnJlYWRPbmx5O1xuXG5cdFx0aWYgKHBhcmFtcy52YWx1ZXMpIHtcblx0XHRcdHRoaXMudmFsdWVzKF8ubWFwKHBhcmFtcy52YWx1ZXMsIChsYWJlbCwgdmFsdWUpID0+ICh7IGxhYmVsOiBsYWJlbCwgdmFsdWU6IHZhbHVlIH0pKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jbGljayA9IF8uYmluZCh0aGlzLmNsaWNrLCB0aGlzKTtcblx0fVxuXG5cdGNsaWNrKHZhbHVlKSB7XG5cdFx0aWYgKCF0aGlzLnJlYWRPbmx5ICYmIHZhbHVlKSB7XG5cdFx0XHR0aGlzLnZhbHVlKHZhbHVlLnZhbHVlKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RSYWRpbywgQWJzdHJhY3RSYWRpbyBhcyBkZWZhdWx0IH07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJykgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc2VhcmNoJywgMSwgZnVuY3Rpb24gKFNFQVJDSCwgbmF0aXZlU2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNlYXJjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIHNlYXJjaGVyICE9PSB1bmRlZmluZWQgPyBzZWFyY2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVTZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gIW1ldGhvZCB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnJlZHVjZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktcmVkdWNlJykubGVmdDtcbnZhciBzbG9wcHlBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zbG9wcHktYXJyYXktbWV0aG9kJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IHNsb3BweUFycmF5TWV0aG9kKCdyZWR1Y2UnKSB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgIW5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6IG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogdHlwZW9mIGRldGVjdGlvbiA9PSAnZnVuY3Rpb24nID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiAgbGVmdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgdmFsdWVzID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnZhbHVlcztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnZhbHVlcylcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgfHwgRE9NSXRlcmFibGVzLmhhc093blByb3BlcnR5KGNsYXNzb2YoaXQpKSA/IHZhbHVlcyA6IG93bjtcbn07XG4iLCJ2YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciBvYmplY3RIYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQKSB7XG4gIHZhciBzdG9yZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHZhciB3bWdldCA9IHN0b3JlLmdldDtcbiAgdmFyIHdtaGFzID0gc3RvcmUuaGFzO1xuICB2YXIgd21zZXQgPSBzdG9yZS5zZXQ7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICB3bXNldC5jYWxsKHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaGlkZShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgbmF0aXZlRnVuY3Rpb25Ub1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi10by1zdHJpbmcnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QobmF0aXZlRnVuY3Rpb25Ub1N0cmluZy5jYWxsKFdlYWtNYXApKTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2hhcmVkKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGhpZGUoZ2xvYmFsLCBrZXksIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGhpZGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZBVUxUID09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5hdGl2ZUl0ZXJhdG9yLmNhbGwodGhpcyk7IH07XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgaGlkZShJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvcik7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICByZWRlZmluZShJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICByZXR1cm4gIVN0cmluZyhTeW1ib2woKSk7XG59KTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIFByb3BlcnRpZXNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzKGhpZGRlbktleXMsIGtleSkgJiYgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFyaWFibGUgPT0gJ2Z1bmN0aW9uJyA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpICE9PSAnW29iamVjdCB6XScgPyBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufSA6IHRlc3QudG9TdHJpbmc7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldDtcbiAgICBzZXR0ZXIuY2FsbCh0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlci5jYWxsKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSAmJiBpdCAhPT0gbnVsbCkge1xuICAgIHRocm93IFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArIFN0cmluZyhpdCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBoaWRlKHRhcmdldCwga2V5LCB2YWx1ZSk7XG59O1xuIiwiLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykudmFsdWVzO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9jb25jYXQnKTtcbiIsInZhciBjb25jYXQgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2NvbmNhdCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5jb25jYXQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5jb25jYXQpID8gY29uY2F0IDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuY29uY2F0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGO1xudmFyIE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCA9ICdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFTUEVDSUVTX1NVUFBPUlQ7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gdG9MZW5ndGgoRS5sZW5ndGgpO1xuICAgICAgICBpZiAobiArIGxlbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQpO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobiA+PSBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvaW5kZXgtb2YnKTtcbiIsInZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9pbmRleC1vZicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmRleE9mO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuaW5kZXhPZikgPyBpbmRleE9mIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5pbmRleE9mO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxudmFyIG5hdGl2ZUluZGV4T2YgPSBbXS5pbmRleE9mO1xuXG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhbmF0aXZlSW5kZXhPZiAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTTE9QUFlfTUVUSE9EID0gc2xvcHB5QXJyYXlNZXRob2QoJ2luZGV4T2YnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBORUdBVElWRV9aRVJPIHx8IFNMT1BQWV9NRVRIT0QgfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gbmF0aXZlSW5kZXhPZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmluZCcpO1xuIiwidmFyIGZpbmQgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbmQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmluZDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbmQpID8gZmluZCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbmQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maW5kO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG52YXIgRklORCA9ICdmaW5kJztcbnZhciBTS0lQU19IT0xFUyA9IHRydWU7XG5cbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoRklORCBpbiBbXSkgQXJyYXkoMSlbRklORF0oZnVuY3Rpb24gKCkgeyBTS0lQU19IT0xFUyA9IGZhbHNlOyB9KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTS0lQU19IT0xFUyB9LCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoRklORCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2xhc3QtaW5kZXgtb2YnKTtcbiIsInZhciBsYXN0SW5kZXhPZiA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvbGFzdC1pbmRleC1vZicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5sYXN0SW5kZXhPZjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmxhc3RJbmRleE9mKSA/IGxhc3RJbmRleE9mIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubGFzdC1pbmRleC1vZicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmxhc3RJbmRleE9mO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbGFzdEluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbGFzdC1pbmRleC1vZicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5sYXN0aW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogbGFzdEluZGV4T2YgIT09IFtdLmxhc3RJbmRleE9mIH0sIHtcbiAgbGFzdEluZGV4T2Y6IGxhc3RJbmRleE9mXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIG5hdGl2ZUxhc3RJbmRleE9mID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhbmF0aXZlTGFzdEluZGV4T2YgJiYgMSAvIFsxXS5sYXN0SW5kZXhPZigxLCAtMCkgPCAwO1xudmFyIFNMT1BQWV9NRVRIT0QgPSBzbG9wcHlBcnJheU1ldGhvZCgnbGFzdEluZGV4T2YnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZmAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubGFzdGluZGV4b2Zcbm1vZHVsZS5leHBvcnRzID0gKE5FR0FUSVZFX1pFUk8gfHwgU0xPUFBZX01FVEhPRCkgPyBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiBuYXRpdmVMYXN0SW5kZXhPZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGluZGV4ID0gbWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gIGZvciAoO2luZGV4ID49IDA7IGluZGV4LS0pIGlmIChpbmRleCBpbiBPICYmIE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgcmV0dXJuIC0xO1xufSA6IG5hdGl2ZUxhc3RJbmRleE9mO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9iaW5kJyk7XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZCcpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5iaW5kO1xuICByZXR1cm4gaXQgPT09IEZ1bmN0aW9uUHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG93biA9PT0gRnVuY3Rpb25Qcm90b3R5cGUuYmluZCkgPyBiaW5kIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdGdW5jdGlvbicpLmJpbmQ7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQnKTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4kKHsgdGFyZ2V0OiAnRnVuY3Rpb24nLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGJpbmQ6IGJpbmRcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEMsIGFyZ3NMZW5ndGgsIGFyZ3MpIHtcbiAgaWYgKCEoYXJnc0xlbmd0aCBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbGlzdCA9IFtdLCBpID0gMDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9IEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBsaXN0LmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1thcmdzTGVuZ3RoXShDLCBhcmdzKTtcbn07XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZEZ1bmN0aW9uID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3RyaW0nKTtcbiIsInZhciB0cmltID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvdHJpbScpO1xuXG52YXIgU3RyaW5nUHJvdG90eXBlID0gU3RyaW5nLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnRyaW07XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdzdHJpbmcnIHx8IGl0ID09PSBTdHJpbmdQcm90b3R5cGVcbiAgICB8fCAoaXQgaW5zdGFuY2VvZiBTdHJpbmcgJiYgb3duID09PSBTdHJpbmdQcm90b3R5cGUudHJpbSkgPyB0cmltIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0nKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnU3RyaW5nJykudHJpbTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZvcmNlZC1zdHJpbmctdHJpbS1tZXRob2QnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdUcmltTWV0aG9kKCd0cmltJykgfSwge1xuICB0cmltOiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzKTtcbiAgfVxufSk7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgd2hpdGVzcGFjZSA9ICdbJyArIHdoaXRlc3BhY2VzICsgJ10nO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cCh3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgbm9uID0gJ1xcdTIwMEJcXHUwMDg1XFx1MTgwRSc7XG5cbi8vIGNoZWNrIHRoYXQgYSBtZXRob2Qgd29ya3Mgd2l0aCB0aGUgY29ycmVjdCBsaXN0XG4vLyBvZiB3aGl0ZXNwYWNlcyBhbmQgaGFzIGEgY29ycmVjdCBuYW1lXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXSgpIHx8IG5vbltNRVRIT0RfTkFNRV0oKSAhPSBub24gfHwgd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdLm5hbWUgIT09IE1FVEhPRF9OQU1FO1xuICB9KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuIiwidmFyIG1hcCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvbWFwJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0Lm1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLm1hcCkgPyBtYXAgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5tYXAnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5tYXA7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnbWFwJykgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIURFU0NSSVBUT1JTLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogb2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUuZlxufSk7XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNilcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIG5ldyAoQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2FycmF5XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZm9yRWFjaDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9IHNsb3BweUFycmF5TWV0aG9kKCdmb3JFYWNoJykgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59IDogW10uZm9yRWFjaDtcbiIsIi8vIGBTYW1lVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgXCI8aHRtbD5cXG48aGVhZD5cXG5cXHQ8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwidXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlXFxcIiBjb250ZW50PVxcXCJ5ZXNcXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwicm9ib3RzXFxcIiBjb250ZW50PVxcXCJub2luZGV4LCBub2ZvbGxvdywgbm9vZHBcXFwiIC8+XFxuXFx0PHRpdGxlPnt7dGl0bGV9fTwvdGl0bGU+XFxuXFx0PHN0eWxlPlxcbmh0bWwsIGJvZHkge1xcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuXFx0Zm9udC1zaXplOiAxM3B4O1xcblxcdGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjtcXG5cXHRtYXJnaW46IDA7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuXFxuYSB7Y29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lfVxcbmE6dmlzaXRlZCB7Y29sb3I6ICM2MDl9XFxuYTphY3RpdmUge2NvbG9yOiByZWR9XFxuYmxvY2txdW90ZSB7Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjazsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwcHggMTBweH1cXG5cXG5wcmUge1xcblxcdG1hcmdpbjogMHB4O1xcblxcdHBhZGRpbmc6IDBweDtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcblxcdGJvcmRlcjogbm9uZTtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0d29yZC13cmFwOiBicmVhay13b3JkO1xcblxcdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcXG59XFxuXFxuLmJvZHktd3JwIHtcXG5cXHRwYWRkaW5nOiAxMHB4O1xcbn1cXG5cXG4uYm9keS13cnAuaHRtbCBwcmUge1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHR3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuXFx0d29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4ge1xcblxcdHBhZGRpbmc6IDE1cHg7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gcHJlIHtcXG5cXHRtYXJnaW46IDBweDtcXG5cXHRwYWRkaW5nOiAwcHg7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRib3JkZXI6IG5vbmU7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG5cXHR3b3JkLWJyZWFrOiBub3JtYWw7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsdWU7XFxuXFx0Y29sb3I6IGJsdWU7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JlZW47XFxuXFx0Y29sb3I6IGdyZWVuO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgcmVkO1xcblxcdGNvbG9yOiByZWQ7XFxufVxcbi5ybC1wcmV2aWV3LXN1YmplY3Qge1xcblxcdGZvbnQtc2l6ZTogMTZweDtcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXG5cXHRwYWRkaW5nOiAxNXB4O1xcbn1cXG4ucmwtcHJldmlldy1jcmVkcy1mcm9tLCAucmwtcHJldmlldy1jcmVkcy10bywgLnJsLXByZXZpZXctY3JlZHMtY2Mge1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiA1cHggMTVweDtcXG59XFxuLnJsLXByZXZpZXctZGF0ZSB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiAxMHB4IDE1cHg7XFxufVxcbi5ybC1wcmV2aWV3LXNlY3Rpb24ge1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0bWFyZ2luOiAwO1xcblxcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xcbn1cXG4ucmwtcHJldmlldy1oaWRlIHtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG5cXHQ8L3N0eWxlPlxcbjwvaGVhZD5cXG48Ym9keT5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctc3ViamVjdFxcXCI+e3tzdWJqZWN0fX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctZGF0ZVxcXCI+e3tkYXRlfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWZyb21cXFwiPnt7ZnJvbUNyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLXRvXFxcIj57e3RvTGFiZWx9fToge3t0b0NyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWNjIHt7Y2NDbGFzc319XFxcIj57e2NjTGFiZWx9fToge3tjY0NyZWRzfX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJib2R5LXdycCB7e2JvZHlDbGFzc319XFxcIj57e2h0bWx9fTwvZGl2PlxcbjwvYm9keT5cXG48L2h0bWw+XCIiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbHRlcicpO1xuIiwidmFyIGZpbHRlciA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmlsdGVyJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbHRlcjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBmaWx0ZXIgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maWx0ZXInKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maWx0ZXI7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJykgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBGQUlMU19PTl9QUklNSVRJVkVTO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcbiIsInZhciBzbGljZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc2xpY2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc2xpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBzbGljZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNsaWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykuc2xpY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIG5hdGl2ZVNsaWNlID0gW10uc2xpY2U7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKSB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKHR5cGVvZiBDb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlLmNhbGwoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuIiwidmFyIHJldmVyc2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gcmV2ZXJzZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZS5jYWxsKHRoaXMpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZWR1Y2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZWR1Y2UnKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qva2V5c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9rZXlzJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuIiwiaW1wb3J0IHsgcEludCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50LCBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBTYXZlVHJpZ2dlckNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmVsZW1lbnQgPSBwYXJhbXMuZWxlbWVudCB8fCBudWxsO1xuXHRcdHRoaXMudmFsdWUgPSBwYXJhbXMudmFsdWUgJiYgcGFyYW1zLnZhbHVlLnN1YnNjcmliZSA/IHBhcmFtcy52YWx1ZSA6IG51bGw7XG5cblx0XHRpZiAodGhpcy5lbGVtZW50KSB7XG5cdFx0XHRpZiAodGhpcy52YWx1ZSkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuY3NzKCdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpO1xuXG5cdFx0XHRcdGlmIChwYXJhbXMudmVydGljYWxBbGlnbikge1xuXHRcdFx0XHRcdHRoaXMuZWxlbWVudC5jc3MoJ3ZlcnRpY2FsLWFsaWduJywgcGFyYW1zLnZlcnRpY2FsQWxpZ24pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh0aGlzLnZhbHVlKCkpO1xuXG5cdFx0XHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKHRoaXMudmFsdWUuc3Vic2NyaWJlKHRoaXMuc2V0U3RhdGUsIHRoaXMpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c2V0U3RhdGUodmFsdWUpIHtcblx0XHRzd2l0Y2ggKHBJbnQodmFsdWUpKSB7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdDpcblx0XHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuZXJyb3InKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuc3VjY2VzcycpXG5cdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdDpcblx0XHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuc3VjY2VzcycpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5lcnJvcicpXG5cdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5BbmltYXRlOlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLklkbGU6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoU2F2ZVRyaWdnZXJDb21wb25lbnQsICdTYXZlVHJpZ2dlckNvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNsYXNzIElucHV0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoSW5wdXRDb21wb25lbnQsICdJbnB1dENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY2xhc3MgU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcihwYXJhbXMpO1xuXG5cdFx0dGhpcy5vcHRpb25zID0gcGFyYW1zLm9wdGlvbnMgfHwgJyc7XG5cblx0XHR0aGlzLm9wdGlvbnNUZXh0ID0gcGFyYW1zLm9wdGlvbnNUZXh0IHx8IG51bGw7XG5cdFx0dGhpcy5vcHRpb25zVmFsdWUgPSBwYXJhbXMub3B0aW9uc1ZhbHVlIHx8IG51bGw7XG5cdFx0dGhpcy5vcHRpb25zQ2FwdGlvbiA9IHBhcmFtcy5vcHRpb25zQ2FwdGlvbiB8fCBudWxsO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9uc0NhcHRpb24pIHtcblx0XHRcdHRoaXMub3B0aW9uc0NhcHRpb24gPSBpMThuKHRoaXMub3B0aW9uc0NhcHRpb24pO1xuXHRcdH1cblxuXHRcdHRoaXMuZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyID0gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihTZWxlY3RDb21wb25lbnQsICdTZWxlY3RDb21wb25lbnQnKTtcbiIsImltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdFJhZGlvIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0UmFkaW8nO1xuXG5jbGFzcyBSYWRpb0NvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0UmFkaW8ge31cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFJhZGlvQ29tcG9uZW50LCAnUmFkaW9Db21wb25lbnQnKTtcbiIsImltcG9ydCB7IGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jb25zdCBERUZBVUxUX1JPV1MgPSA1O1xuXG5jbGFzcyBUZXh0QXJlYUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIocGFyYW1zKTtcblxuXHRcdHRoaXMucm93cyA9IHBhcmFtcy5yb3dzIHx8IERFRkFVTFRfUk9XUztcblx0XHR0aGlzLnNwZWxsY2hlY2sgPSBpc1VuZChwYXJhbXMuc3BlbGxjaGVjaykgPyBmYWxzZSA6ICEhcGFyYW1zLnNwZWxsY2hlY2s7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFRleHRBcmVhQ29tcG9uZW50LCAnVGV4dEFyZWFDb21wb25lbnQnKTtcbiIsImltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jbGFzcyBEYXRlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoRGF0ZUNvbXBvbmVudCwgJ0RhdGVDb21wb25lbnQnKTtcbiIsImltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIFNjcmlwdENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoXG5cdFx0XHRwYXJhbXMuY29tcG9uZW50ICYmXG5cdFx0XHRwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXMgJiZcblx0XHRcdHBhcmFtcy5lbGVtZW50ICYmXG5cdFx0XHRwYXJhbXMuZWxlbWVudFswXSAmJlxuXHRcdFx0cGFyYW1zLmVsZW1lbnRbMF0ub3V0ZXJIVE1MXG5cdFx0KSB7XG5cdFx0XHRsZXQgc2NyaXB0ID0gcGFyYW1zLmVsZW1lbnRbMF0ub3V0ZXJIVE1MO1xuXHRcdFx0c2NyaXB0ID0gIXNjcmlwdCA/ICcnIDogc2NyaXB0LnJlcGxhY2UoLzx4LXNjcmlwdC9pLCAnPHNjcmlwdCcpLnJlcGxhY2UoLzxiPjxcXC9iPjxcXC94LXNjcmlwdD4vaSwgJzwvc2NyaXB0PicpO1xuXG5cdFx0XHRpZiAoc2NyaXB0KSB7XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50LnRleHQoJycpO1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudC5yZXBsYWNlV2l0aChcblx0XHRcdFx0XHQkKHNjcmlwdCkudGV4dChcblx0XHRcdFx0XHRcdHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2Rlc1swXSAmJiBwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXNbMF0ubm9kZVZhbHVlXG5cdFx0XHRcdFx0XHRcdD8gcGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzWzBdLm5vZGVWYWx1ZVxuXHRcdFx0XHRcdFx0XHQ6ICcnXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQucmVtb3ZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihTY3JpcHRDb21wb25lbnQsICdTY3JpcHRDb21wb25lbnQnKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdENoZWNrYm94IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0Q2hlY2tib3gnO1xuXG5jbGFzcyBDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDaGVja2JveCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcihwYXJhbXMpO1xuXG5cdFx0dGhpcy5hbmltYXRpb25Cb3ggPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDIwMCB9KTtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFyayA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMjAwIH0pO1xuXG5cdFx0dGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlID0gXy5iaW5kKHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSwgdGhpcyk7XG5cdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlID0gXy5iaW5kKHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSwgdGhpcyk7XG5cblx0XHR0aGlzLmRpc3Bvc2FibGUucHVzaChcblx0XHRcdHRoaXMudmFsdWUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR0aGlzLnRyaWdnZXJBbmltYXRpb24odmFsdWUpO1xuXHRcdFx0fSwgdGhpcylcblx0XHQpO1xuXHR9XG5cblx0YW5pbWF0aW9uQm94U2V0VHJ1ZSgpIHtcblx0XHR0aGlzLmFuaW1hdGlvbkJveCh0cnVlKTtcblx0fVxuXG5cdGFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUoKSB7XG5cdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmsodHJ1ZSk7XG5cdH1cblxuXHR0cmlnZ2VyQW5pbWF0aW9uKGJveCkge1xuXHRcdGlmIChib3gpIHtcblx0XHRcdHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSgpO1xuXHRcdFx0Xy5kZWxheSh0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUsIDIwMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSgpO1xuXHRcdFx0Xy5kZWxheSh0aGlzLmFuaW1hdGlvbkJveFNldFRydWUsIDIwMCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50LCAnQ2hlY2tib3hNYXRlcmlhbERlc2lnbkNvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHByb2dyZXNzSnMgZnJvbSAncHJvZ3Jlc3NKcyc7XG5cbmltcG9ydCB7IHJvb3QgfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBwSW50LCBpc05vcm1hbCwgaXNBcnJheSwgaW5BcnJheSwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9BcHAnO1xuaW1wb3J0IENhcGFTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ2FwYSc7XG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5pbXBvcnQgUGx1Z2luU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BsdWdpbic7XG5pbXBvcnQgTGljZW5zZVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9MaWNlbnNlJztcbmltcG9ydCBQYWNrYWdlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BhY2thZ2UnO1xuaW1wb3J0IENvcmVTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ29yZSc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgU2V0dGluZ3NBZG1pblNjcmVlbiB9IGZyb20gJ1NjcmVlbi9BZG1pbi9TZXR0aW5ncyc7XG5pbXBvcnQgeyBMb2dpbkFkbWluU2NyZWVuIH0gZnJvbSAnU2NyZWVuL0FkbWluL0xvZ2luJztcblxuaW1wb3J0IHsgaGlkZUxvYWRpbmcsIHJvdXRlT2ZmLCBzZXRIYXNoLCBzdGFydFNjcmVlbnMgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcCB9IGZyb20gJ0FwcC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFkbWluQXBwIGV4dGVuZHMgQWJzdHJhY3RBcHAge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcihSZW1vdGUpO1xuXHR9XG5cblx0cmVtb3RlKCkge1xuXHRcdHJldHVybiBSZW1vdGU7XG5cdH1cblxuXHRyZWxvYWREb21haW5MaXN0KCkge1xuXHRcdERvbWFpblN0b3JlLmRvbWFpbnMubG9hZGluZyh0cnVlKTtcblx0XHRSZW1vdGUuZG9tYWluTGlzdCgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHREb21haW5TdG9yZS5kb21haW5zLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdERvbWFpblN0b3JlLmRvbWFpbnMoXG5cdFx0XHRcdFx0Xy5tYXAoZGF0YS5SZXN1bHQsIChbZW5hYmxlZCwgYWxpYXNdLCBuYW1lKSA9PiAoe1xuXHRcdFx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0XHRcdGRpc2FibGVkOiBrby5vYnNlcnZhYmxlKCFlbmFibGVkKSxcblx0XHRcdFx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdFx0XHRcdGRlbGV0ZUFjY2Vzczoga28ub2JzZXJ2YWJsZShmYWxzZSlcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZFBsdWdpbkxpc3QoKSB7XG5cdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5wbHVnaW5MaXN0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFBsdWdpblN0b3JlLnBsdWdpbnMubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucyhcblx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdCwgKGl0ZW0pID0+ICh7XG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLk5hbWUsXG5cdFx0XHRcdFx0XHRkaXNhYmxlZDoga28ub2JzZXJ2YWJsZSghaXRlbS5FbmFibGVkKSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyZWQ6IGtvLm9ic2VydmFibGUoISFpdGVtLkNvbmZpZ3VyZWQpXG5cdFx0XHRcdFx0fSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZWxvYWRQYWNrYWdlc0xpc3QoKSB7XG5cdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcodHJ1ZSk7XG5cdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzUmVhbCh0cnVlKTtcblx0XHRSZW1vdGUucGFja2FnZXNMaXN0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlcy5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsKCEhZGF0YS5SZXN1bHQuUmVhbCk7XG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlc01haW5VcGRhdGFibGUoISFkYXRhLlJlc3VsdC5NYWluVXBkYXRhYmxlKTtcblxuXHRcdFx0XHRsZXQgbGlzdCA9IFtdO1xuXHRcdFx0XHRjb25zdCBsb2FkaW5nID0ge307XG5cblx0XHRcdFx0Xy5lYWNoKFBhY2thZ2VTdG9yZS5wYWNrYWdlcygpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdGlmIChpdGVtICYmIGl0ZW0ubG9hZGluZygpKSB7XG5cdFx0XHRcdFx0XHRsb2FkaW5nW2l0ZW0uZmlsZV0gPSBpdGVtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKGlzQXJyYXkoZGF0YS5SZXN1bHQuTGlzdCkpIHtcblx0XHRcdFx0XHRsaXN0ID0gXy5jb21wYWN0KFxuXHRcdFx0XHRcdFx0Xy5tYXAoZGF0YS5SZXN1bHQuTGlzdCwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0XHRpdGVtLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKCFpc1VuZChsb2FkaW5nW2l0ZW0uZmlsZV0pKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gJ2NvcmUnID09PSBpdGVtLnR5cGUgJiYgIWl0ZW0uY2FuQmVJbnN0YWxsZWQgPyBudWxsIDogaXRlbTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlcyhsaXN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlc1JlYWwoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dXBkYXRlQ29yZURhdGEoKSB7XG5cdFx0Q29yZVN0b3JlLmNvcmVVcGRhdGluZyh0cnVlKTtcblx0XHRSZW1vdGUudXBkYXRlQ29yZURhdGEoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVVcGRhdGluZyhmYWxzZSk7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb24oJycpO1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uKCcnKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZSgnJyk7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb25Db21wYXJlKC0yKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwodHJ1ZSk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVhbChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZWxvYWRDb3JlRGF0YSgpIHtcblx0XHRDb3JlU3RvcmUuY29yZUNoZWNraW5nKHRydWUpO1xuXHRcdENvcmVTdG9yZS5jb3JlUmVhbCh0cnVlKTtcblx0XHRSZW1vdGUuY29yZURhdGEoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVDaGVja2luZyhmYWxzZSk7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZWFsKCEhZGF0YS5SZXN1bHQuUmVhbCk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlQ2hhbm5lbChkYXRhLlJlc3VsdC5DaGFubmVsIHx8ICdzdGFibGUnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVUeXBlKGRhdGEuUmVzdWx0LlR5cGUgfHwgJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVVwZGF0YWJsZSghIWRhdGEuUmVzdWx0LlVwZGF0YWJsZSk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlQWNjZXNzKCEhZGF0YS5SZXN1bHQuQWNjZXNzKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVXYXJuaW5nKCEhZGF0YS5SZXN1bHQuV2FybmluZyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbihkYXRhLlJlc3VsdC5WZXJzaW9uIHx8ICcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uKGRhdGEuUmVzdWx0LlJlbW90ZVZlcnNpb24gfHwgJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVJlbGVhc2UoZGF0YS5SZXN1bHQuUmVtb3RlUmVsZWFzZSB8fCAnJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmUocEludChkYXRhLlJlc3VsdC5WZXJzaW9uQ29tcGFyZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZWFsKGZhbHNlKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVDaGFubmVsKCdzdGFibGUnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVUeXBlKCdzdGFibGUnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVXYXJuaW5nKGZhbHNlKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uKCcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uKCcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVSZWxlYXNlKCcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uQ29tcGFyZSgtMik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gZm9yY2UgPSBmYWxzZVxuXHQgKi9cblx0cmVsb2FkTGljZW5zaW5nKGZvcmNlID0gZmFsc2UpIHtcblx0XHRMaWNlbnNlU3RvcmUubGljZW5zaW5nUHJvY2Vzcyh0cnVlKTtcblx0XHRMaWNlbnNlU3RvcmUubGljZW5zZUVycm9yKCcnKTtcblx0XHRSZW1vdGUubGljZW5zaW5nKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmdQcm9jZXNzKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBpc05vcm1hbChkYXRhLlJlc3VsdC5FeHBpcmVkKSkge1xuXHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zZVZhbGlkKHRydWUpO1xuXHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zZUV4cGlyZWQocEludChkYXRhLlJlc3VsdC5FeHBpcmVkKSk7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXJyb3IoJycpO1xuXHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zaW5nKHRydWUpO1xuXHRcdFx0XHRBcHBTdG9yZS5wcmVtKHRydWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGRhdGEgJiZcblx0XHRcdFx0XHRkYXRhLkVycm9yQ29kZSAmJlxuXHRcdFx0XHRcdC0xIDwgaW5BcnJheShwSW50KGRhdGEuRXJyb3JDb2RlKSwgW05vdGlmaWNhdGlvbi5MaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlLCBOb3RpZmljYXRpb24uTGljZW5zaW5nRXhwaXJlZF0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXJyb3IoZ2V0Tm90aWZpY2F0aW9uKHBJbnQoZGF0YS5FcnJvckNvZGUpKSk7XG5cdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZyh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuQWJvcnQgPT09IHJlc3VsdCkge1xuXHRcdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2VFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUpKTtcblx0XHRcdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmcodHJ1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmcoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sIGZvcmNlKTtcblx0fVxuXG5cdGJvb3RlbmQoYm9vdGVuZENhbGxiYWNrID0gbnVsbCkge1xuXHRcdGlmIChwcm9ncmVzc0pzKSB7XG5cdFx0XHRwcm9ncmVzc0pzLmVuZCgpO1xuXHRcdH1cblxuXHRcdGlmIChib290ZW5kQ2FsbGJhY2spIHtcblx0XHRcdGJvb3RlbmRDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdGJvb3RzdGFydCgpIHtcblx0XHRzdXBlci5ib290c3RhcnQoKTtcblxuXHRcdEFwcFN0b3JlLnBvcHVsYXRlKCk7XG5cdFx0Q2FwYVN0b3JlLnBvcHVsYXRlKCk7XG5cblx0XHRoaWRlTG9hZGluZygpO1xuXG5cdFx0aWYgKCFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWxsb3dBZG1pblBhbmVsJykpIHtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cdFx0XHRzZXRIYXNoKHJvb3QoKSwgdHJ1ZSk7XG5cdFx0XHRyb3V0ZU9mZigpO1xuXG5cdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSAnLyc7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoJykpIHtcblx0XHRcdFx0c3RhcnRTY3JlZW5zKFtTZXR0aW5nc0FkbWluU2NyZWVuXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGFydFNjcmVlbnMoW0xvZ2luQWRtaW5TY3JlZW5dKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmJvb3RlbmQoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQWRtaW5BcHAoKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIFNlcnZlclNlY3VyZSwgUG9ydHMsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBJTUFQX0RFRkFVTFRfUE9SVCwgU0lFVkVfREVGQVVMVF9QT1JULCBTTVRQX0RFRkFVTFRfUE9SVCB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IHRyaW0sIHBJbnQsIHBTdHJpbmcgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IENhcGFBZG1pblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9DYXBhJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0RvbWFpbicsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNEb21haW4nXG59KVxuY2xhc3MgRG9tYWluUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmVkaXQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhZ2UgPSBrby5vYnNlcnZhYmxlKCdtYWluJyk7XG5cdFx0dGhpcy5zaWV2ZVNldHRpbmdzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnRlc3RpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdEb25lID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvckRlc2MoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjKCcnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvckRlc2MoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pbWFwU2VydmVyRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlU2VydmVyRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNtdHBTZXJ2ZXJGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5uYW1lLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuaW1hcFNlcnZlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuaW1hcFBvcnQgPSBrby5vYnNlcnZhYmxlKCcnICsgSU1BUF9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuaW1hcFNlY3VyZSA9IGtvLm9ic2VydmFibGUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXHRcdHRoaXMuaW1hcFNob3J0TG9naW4gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnVzZVNpZXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZUFsbG93UmF3ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZVNlcnZlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2lldmVQb3J0ID0ga28ub2JzZXJ2YWJsZSgnJyArIFNJRVZFX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5zaWV2ZVNlY3VyZSA9IGtvLm9ic2VydmFibGUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXHRcdHRoaXMuc210cFNlcnZlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc210cFBvcnQgPSBrby5vYnNlcnZhYmxlKCcnICsgU01UUF9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc210cFNlY3VyZSA9IGtvLm9ic2VydmFibGUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXHRcdHRoaXMuc210cFNob3J0TG9naW4gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNtdHBBdXRoID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnNtdHBQaHBNYWlsID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy53aGl0ZUxpc3QgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFsaWFzTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFsbG93U2lldmUgPSBrby5jb21wdXRlZCgoKSA9PiBDYXBhQWRtaW5TdG9yZS5maWx0ZXJzKCkgJiYgQ2FwYUFkbWluU3RvcmUuc2lldmUoKSk7XG5cblx0XHR0aGlzLmhlYWRlclRleHQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBuYW1lID0gdGhpcy5uYW1lKCksXG5cdFx0XHRcdGFsaWFzTmFtZSA9IHRoaXMuYWxpYXNOYW1lKCk7XG5cblx0XHRcdGxldCByZXN1bHQgPSAnJztcblxuXHRcdFx0aWYgKHRoaXMuZWRpdCgpKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGkxOG4oJ1BPUFVQU19ET01BSU4vVElUTEVfRURJVF9ET01BSU4nLCB7ICdOQU1FJzogbmFtZSB9KTtcblx0XHRcdFx0aWYgKGFsaWFzTmFtZSkge1xuXHRcdFx0XHRcdHJlc3VsdCArPSAnIOKGkCAnICsgYWxpYXNOYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQgPVxuXHRcdFx0XHRcdCcnID09PSBuYW1lXG5cdFx0XHRcdFx0XHQ/IGkxOG4oJ1BPUFVQU19ET01BSU4vVElUTEVfQUREX0RPTUFJTicpXG5cdFx0XHRcdFx0XHQ6IGkxOG4oJ1BPUFVQU19ET01BSU4vVElUTEVfQUREX0RPTUFJTl9XSVRIX05BTUUnLCB7ICdOQU1FJzogbmFtZSB9KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KTtcblxuXHRcdHRoaXMuZG9tYWluRGVzYyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IG5hbWUgPSB0aGlzLm5hbWUoKTtcblx0XHRcdHJldHVybiAhdGhpcy5lZGl0KCkgJiYgbmFtZSA/IGkxOG4oJ1BPUFVQU19ET01BSU4vTkVXX0RPTUFJTl9ERVNDJywgeyAnTkFNRSc6ICcqQCcgKyBuYW1lIH0pIDogJyc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmRvbWFpbklzQ29tcHV0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB1c2VQaHBNYWlsID0gdGhpcy5zbXRwUGhwTWFpbCgpLFxuXHRcdFx0XHRhbGxvd1NpZXZlID0gdGhpcy5hbGxvd1NpZXZlKCksXG5cdFx0XHRcdHVzZVNpZXZlID0gdGhpcy51c2VTaWV2ZSgpO1xuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnJyAhPT0gdGhpcy5uYW1lKCkgJiZcblx0XHRcdFx0JycgIT09IHRoaXMuaW1hcFNlcnZlcigpICYmXG5cdFx0XHRcdCcnICE9PSB0aGlzLmltYXBQb3J0KCkgJiZcblx0XHRcdFx0KGFsbG93U2lldmUgJiYgdXNlU2lldmUgPyAnJyAhPT0gdGhpcy5zaWV2ZVNlcnZlcigpICYmICcnICE9PSB0aGlzLnNpZXZlUG9ydCgpIDogdHJ1ZSkgJiZcblx0XHRcdFx0KCgnJyAhPT0gdGhpcy5zbXRwU2VydmVyKCkgJiYgJycgIT09IHRoaXMuc210cFBvcnQoKSkgfHwgdXNlUGhwTWFpbClcblx0XHRcdCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNhbkJlVGVzdGVkID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMudGVzdGluZygpICYmIHRoaXMuZG9tYWluSXNDb21wdXRlZCgpKTtcblx0XHR0aGlzLmNhbkJlU2F2ZWQgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy5zYXZpbmcoKSAmJiB0aGlzLmRvbWFpbklzQ29tcHV0ZWQoKSk7XG5cblx0XHR0aGlzLnBhZ2Uuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHQvLyBzbWFydCBmb3JtIGltcHJvdmVtZW50c1xuXHRcdHRoaXMuaW1hcFNlcnZlckZvY3VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSAmJiAnJyAhPT0gdGhpcy5uYW1lKCkgJiYgJycgPT09IHRoaXMuaW1hcFNlcnZlcigpKSB7XG5cdFx0XHRcdHRoaXMuaW1hcFNlcnZlcih0aGlzLm5hbWUoKS5yZXBsYWNlKC9bLl0/WypdWy5dPy9nLCAnJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zaWV2ZVNlcnZlckZvY3VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSAmJiAnJyAhPT0gdGhpcy5pbWFwU2VydmVyKCkgJiYgJycgPT09IHRoaXMuc2lldmVTZXJ2ZXIoKSkge1xuXHRcdFx0XHR0aGlzLnNpZXZlU2VydmVyKHRoaXMuaW1hcFNlcnZlcigpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc210cFNlcnZlckZvY3VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSAmJiAnJyAhPT0gdGhpcy5pbWFwU2VydmVyKCkgJiYgJycgPT09IHRoaXMuc210cFNlcnZlcigpKSB7XG5cdFx0XHRcdHRoaXMuc210cFNlcnZlcih0aGlzLmltYXBTZXJ2ZXIoKS5yZXBsYWNlKC9pbWFwL2dpLCAnc210cCcpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuaW1hcFNlY3VyZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5lbmFibGVTbWFydFBvcnRzKCkpIHtcblx0XHRcdFx0Y29uc3QgcG9ydCA9IHBJbnQodGhpcy5pbWFwUG9ydCgpKTtcblx0XHRcdFx0c3dpdGNoIChwU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0XHRcdGNhc2UgJzAnOlxuXHRcdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLkltYXBTc2wgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5pbWFwUG9ydChwU3RyaW5nKFBvcnRzLkltYXApKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLkltYXAgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5pbWFwUG9ydChwU3RyaW5nKFBvcnRzLkltYXBTc2wpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zbXRwU2VjdXJlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh0aGlzLmVuYWJsZVNtYXJ0UG9ydHMoKSkge1xuXHRcdFx0XHRjb25zdCBwb3J0ID0gcEludCh0aGlzLnNtdHBQb3J0KCkpO1xuXHRcdFx0XHRzd2l0Y2ggKHBTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuU210cFNzbCA9PT0gcG9ydCB8fCBQb3J0cy5TbXRwU3RhcnRUbHMgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zbXRwUG9ydChwU3RyaW5nKFBvcnRzLlNtdHApKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLlNtdHAgPT09IHBvcnQgfHwgUG9ydHMuU210cFN0YXJ0VGxzID09PSBwb3J0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc210cFBvcnQocFN0cmluZyhQb3J0cy5TbXRwU3NsKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICcyJzpcblx0XHRcdFx0XHRcdGlmIChQb3J0cy5TbXRwID09PSBwb3J0IHx8IFBvcnRzLlNtdHBTc2wgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zbXRwUG9ydChwU3RyaW5nKFBvcnRzLlNtdHBTdGFydFRscykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5jYW5CZVNhdmVkKCkpXG5cdGNyZWF0ZU9yQWRkQ29tbWFuZCgpIHtcblx0XHR0aGlzLnNhdmluZyh0cnVlKTtcblx0XHRSZW1vdGUuY3JlYXRlT3JVcGRhdGVEb21haW4oXG5cdFx0XHRfLmJpbmQodGhpcy5vbkRvbWFpbkNyZWF0ZU9yU2F2ZVJlc3BvbnNlLCB0aGlzKSxcblx0XHRcdCF0aGlzLmVkaXQoKSxcblx0XHRcdHRoaXMubmFtZSgpLFxuXG5cdFx0XHR0aGlzLmltYXBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5pbWFwUG9ydCgpKSxcblx0XHRcdHRoaXMuaW1hcFNlY3VyZSgpLFxuXHRcdFx0dGhpcy5pbWFwU2hvcnRMb2dpbigpLFxuXG5cdFx0XHR0aGlzLnVzZVNpZXZlKCksXG5cdFx0XHR0aGlzLnNpZXZlQWxsb3dSYXcoKSxcblx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5zaWV2ZVBvcnQoKSksXG5cdFx0XHR0aGlzLnNpZXZlU2VjdXJlKCksXG5cblx0XHRcdHRoaXMuc210cFNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLnNtdHBQb3J0KCkpLFxuXHRcdFx0dGhpcy5zbXRwU2VjdXJlKCksXG5cdFx0XHR0aGlzLnNtdHBTaG9ydExvZ2luKCksXG5cdFx0XHR0aGlzLnNtdHBBdXRoKCksXG5cdFx0XHR0aGlzLnNtdHBQaHBNYWlsKCksXG5cblx0XHRcdHRoaXMud2hpdGVMaXN0KClcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVUZXN0ZWQoKSlcblx0dGVzdENvbm5lY3Rpb25Db21tYW5kKCkge1xuXHRcdHRoaXMucGFnZSgnbWFpbicpO1xuXG5cdFx0dGhpcy50ZXN0aW5nRG9uZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZyh0cnVlKTtcblxuXHRcdFJlbW90ZS50ZXN0Q29ubmVjdGlvbkZvckRvbWFpbihcblx0XHRcdF8uYmluZCh0aGlzLm9uVGVzdENvbm5lY3Rpb25SZXNwb25zZSwgdGhpcyksXG5cdFx0XHR0aGlzLm5hbWUoKSxcblxuXHRcdFx0dGhpcy5pbWFwU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuaW1hcFBvcnQoKSksXG5cdFx0XHR0aGlzLmltYXBTZWN1cmUoKSxcblxuXHRcdFx0dGhpcy51c2VTaWV2ZSgpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLnNpZXZlUG9ydCgpKSxcblx0XHRcdHRoaXMuc2lldmVTZWN1cmUoKSxcblxuXHRcdFx0dGhpcy5zbXRwU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc210cFBvcnQoKSksXG5cdFx0XHR0aGlzLnNtdHBTZWN1cmUoKSxcblx0XHRcdHRoaXMuc210cEF1dGgoKSxcblx0XHRcdHRoaXMuc210cFBocE1haWwoKVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdHdoaXRlTGlzdENvbW1hbmQoKSB7XG5cdFx0dGhpcy5wYWdlKCd3aGl0ZS1saXN0Jyk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGJhY2tDb21tYW5kKCkge1xuXHRcdHRoaXMucGFnZSgnbWFpbicpO1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRzaWV2ZUNvbW1hbmQoKSB7XG5cdFx0dGhpcy5zaWV2ZVNldHRpbmdzKCF0aGlzLnNpZXZlU2V0dGluZ3MoKSk7XG5cdFx0dGhpcy5jbGVhclRlc3RpbmcoKTtcblx0fVxuXG5cdG9uVGVzdENvbm5lY3Rpb25SZXNwb25zZShzUmVzdWx0LCBvRGF0YSkge1xuXHRcdHRoaXMudGVzdGluZyhmYWxzZSk7XG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRsZXQgYkltYXAgPSBmYWxzZSxcblx0XHRcdFx0YlNpZXZlID0gZmFsc2U7XG5cblx0XHRcdHRoaXMudGVzdGluZ0RvbmUodHJ1ZSk7XG5cdFx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IodHJ1ZSAhPT0gb0RhdGEuUmVzdWx0LkltYXApO1xuXHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcih0cnVlICE9PSBvRGF0YS5SZXN1bHQuU2lldmUpO1xuXHRcdFx0dGhpcy50ZXN0aW5nU210cEVycm9yKHRydWUgIT09IG9EYXRhLlJlc3VsdC5TbXRwKTtcblxuXHRcdFx0aWYgKHRoaXMudGVzdGluZ0ltYXBFcnJvcigpICYmIG9EYXRhLlJlc3VsdC5JbWFwKSB7XG5cdFx0XHRcdGJJbWFwID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYygnJyk7XG5cdFx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvckRlc2Mob0RhdGEuUmVzdWx0LkltYXApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy50ZXN0aW5nU2lldmVFcnJvcigpICYmIG9EYXRhLlJlc3VsdC5TaWV2ZSkge1xuXHRcdFx0XHRiU2lldmUgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yRGVzYygnJyk7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjKG9EYXRhLlJlc3VsdC5TaWV2ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRlc3RpbmdTbXRwRXJyb3IoKSAmJiBvRGF0YS5SZXN1bHQuU210cCkge1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3JEZXNjKCcnKTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYyhvRGF0YS5SZXN1bHQuU210cCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnNpZXZlU2V0dGluZ3MoKSkge1xuXHRcdFx0XHRpZiAoIWJTaWV2ZSAmJiBiSW1hcCkge1xuXHRcdFx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYlNpZXZlICYmICFiSW1hcCkge1xuXHRcdFx0XHR0aGlzLnNpZXZlU2V0dGluZ3ModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3IodHJ1ZSk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3IodHJ1ZSk7XG5cdFx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdG9uRG9tYWluQ3JlYXRlT3JTYXZlUmVzcG9uc2Uoc1Jlc3VsdCwgb0RhdGEpIHtcblx0XHR0aGlzLnNhdmluZyhmYWxzZSk7XG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEpIHtcblx0XHRcdGlmIChvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0Z2V0QXBwKCkucmVsb2FkRG9tYWluTGlzdCgpO1xuXHRcdFx0XHR0aGlzLmNsb3NlQ29tbWFuZCgpO1xuXHRcdFx0fSBlbHNlIGlmIChOb3RpZmljYXRpb24uRG9tYWluQWxyZWFkeUV4aXN0cyA9PT0gb0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2aW5nRXJyb3IoaTE4bignRVJST1JTL0RPTUFJTl9BTFJFQURZX0VYSVNUUycpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvVU5LTk9XTl9FUlJPUicpKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhclRlc3RpbmcoKSB7XG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdEb25lKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcihmYWxzZSk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0fVxuXG5cdG9uU2hvdyhvRG9tYWluKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblxuXHRcdHRoaXMuY2xlYXJUZXN0aW5nKCk7XG5cblx0XHR0aGlzLmNsZWFyRm9ybSgpO1xuXHRcdGlmIChvRG9tYWluKSB7XG5cdFx0XHR0aGlzLmVuYWJsZVNtYXJ0UG9ydHMoZmFsc2UpO1xuXG5cdFx0XHR0aGlzLmVkaXQodHJ1ZSk7XG5cblx0XHRcdHRoaXMubmFtZSh0cmltKG9Eb21haW4uTmFtZSkpO1xuXHRcdFx0dGhpcy5pbWFwU2VydmVyKHRyaW0ob0RvbWFpbi5JbmNIb3N0KSk7XG5cdFx0XHR0aGlzLmltYXBQb3J0KCcnICsgcEludChvRG9tYWluLkluY1BvcnQpKTtcblx0XHRcdHRoaXMuaW1hcFNlY3VyZSh0cmltKG9Eb21haW4uSW5jU2VjdXJlKSk7XG5cdFx0XHR0aGlzLmltYXBTaG9ydExvZ2luKCEhb0RvbWFpbi5JbmNTaG9ydExvZ2luKTtcblx0XHRcdHRoaXMudXNlU2lldmUoISFvRG9tYWluLlVzZVNpZXZlKTtcblx0XHRcdHRoaXMuc2lldmVBbGxvd1JhdyghIW9Eb21haW4uU2lldmVBbGxvd1Jhdyk7XG5cdFx0XHR0aGlzLnNpZXZlU2VydmVyKHRyaW0ob0RvbWFpbi5TaWV2ZUhvc3QpKTtcblx0XHRcdHRoaXMuc2lldmVQb3J0KCcnICsgcEludChvRG9tYWluLlNpZXZlUG9ydCkpO1xuXHRcdFx0dGhpcy5zaWV2ZVNlY3VyZSh0cmltKG9Eb21haW4uU2lldmVTZWN1cmUpKTtcblx0XHRcdHRoaXMuc210cFNlcnZlcih0cmltKG9Eb21haW4uT3V0SG9zdCkpO1xuXHRcdFx0dGhpcy5zbXRwUG9ydCgnJyArIHBJbnQob0RvbWFpbi5PdXRQb3J0KSk7XG5cdFx0XHR0aGlzLnNtdHBTZWN1cmUodHJpbShvRG9tYWluLk91dFNlY3VyZSkpO1xuXHRcdFx0dGhpcy5zbXRwU2hvcnRMb2dpbighIW9Eb21haW4uT3V0U2hvcnRMb2dpbik7XG5cdFx0XHR0aGlzLnNtdHBBdXRoKCEhb0RvbWFpbi5PdXRBdXRoKTtcblx0XHRcdHRoaXMuc210cFBocE1haWwoISFvRG9tYWluLk91dFVzZVBocE1haWwpO1xuXHRcdFx0dGhpcy53aGl0ZUxpc3QodHJpbShvRG9tYWluLldoaXRlTGlzdCkpO1xuXHRcdFx0dGhpcy5hbGlhc05hbWUodHJpbShvRG9tYWluLkFsaWFzTmFtZSkpO1xuXG5cdFx0XHR0aGlzLmVuYWJsZVNtYXJ0UG9ydHModHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICgnJyA9PT0gdGhpcy5uYW1lKCkgJiYgIWJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHRoaXMubmFtZS5mb2N1c2VkKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyRm9ybSgpIHtcblx0XHR0aGlzLmVkaXQoZmFsc2UpO1xuXG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblxuXHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyhmYWxzZSk7XG5cblx0XHR0aGlzLnNhdmluZ0Vycm9yKCcnKTtcblxuXHRcdHRoaXMubmFtZSgnJyk7XG5cdFx0dGhpcy5uYW1lLmZvY3VzZWQoZmFsc2UpO1xuXG5cdFx0dGhpcy5pbWFwU2VydmVyKCcnKTtcblx0XHR0aGlzLmltYXBQb3J0KCcnICsgSU1BUF9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuaW1hcFNlY3VyZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5pbWFwU2hvcnRMb2dpbihmYWxzZSk7XG5cblx0XHR0aGlzLnVzZVNpZXZlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlQWxsb3dSYXcoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVTZXJ2ZXIoJycpO1xuXHRcdHRoaXMuc2lldmVQb3J0KCcnICsgU0lFVkVfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLnNpZXZlU2VjdXJlKFNlcnZlclNlY3VyZS5Ob25lKTtcblxuXHRcdHRoaXMuc210cFNlcnZlcignJyk7XG5cdFx0dGhpcy5zbXRwUG9ydCgnJyArIFNNVFBfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLnNtdHBTZWN1cmUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXHRcdHRoaXMuc210cFNob3J0TG9naW4oZmFsc2UpO1xuXHRcdHRoaXMuc210cEF1dGgodHJ1ZSk7XG5cdFx0dGhpcy5zbXRwUGhwTWFpbChmYWxzZSk7XG5cblx0XHR0aGlzLndoaXRlTGlzdCgnJyk7XG5cdFx0dGhpcy5hbGlhc05hbWUoJycpO1xuXHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyh0cnVlKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5Qb3B1cFZpZXcsIERvbWFpblBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgeyBhZGRTZXR0aW5nc1ZpZXdNb2RlbCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IHJ1blNldHRpbmdzVmlld01vZGVsSG9va3MgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmltcG9ydCB7IEFic3RyYWN0U2V0dGluZ3NTY3JlZW4gfSBmcm9tICdTY3JlZW4vQWJzdHJhY3RTZXR0aW5ncyc7XG5cbmltcG9ydCB7IEdlbmVyYWxBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vR2VuZXJhbCc7XG5pbXBvcnQgeyBEb21haW5zQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL0RvbWFpbnMnO1xuaW1wb3J0IHsgTG9naW5BZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vTG9naW4nO1xuaW1wb3J0IHsgQ29udGFjdHNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vQ29udGFjdHMnO1xuaW1wb3J0IHsgU2VjdXJpdHlBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vU2VjdXJpdHknO1xuaW1wb3J0IHsgU29jaWFsQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL1NvY2lhbCc7XG5pbXBvcnQgeyBQbHVnaW5zQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL1BsdWdpbnMnO1xuaW1wb3J0IHsgUGFja2FnZXNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vUGFja2FnZXMnO1xuaW1wb3J0IHsgQWJvdXRBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vQWJvdXQnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IE1lbnVTZXR0aW5nc0FkbWluVmlldyB9IGZyb20gJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudSc7XG5pbXBvcnQgeyBQYW5lU2V0dGluZ3NBZG1pblZpZXcgfSBmcm9tICdWaWV3L0FkbWluL1NldHRpbmdzL1BhbmUnO1xuXG5jbGFzcyBTZXR0aW5nc0FkbWluU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKFtNZW51U2V0dGluZ3NBZG1pblZpZXcsIFBhbmVTZXR0aW5nc0FkbWluVmlld10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmQ2FsbGJhY2sgPSBudWxsXG5cdCAqL1xuXHRzZXR1cFNldHRpbmdzKGZDYWxsYmFjayA9IG51bGwpIHtcblx0XHRsZXQgYnJhbmRpbmcgPSBudWxsLFxuXHRcdFx0bGljZW5zaW5nID0gbnVsbDtcblxuXHRcdGlmIChSTF9DT01NVU5JVFkpIHtcblx0XHRcdGJyYW5kaW5nID0gcmVxdWlyZSgnU2V0dGluZ3MvQWRtaW4vQnJhbmRpbmcnKS5kZWZhdWx0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmFuZGluZyA9IHJlcXVpcmUoJ1NldHRpbmdzL0FkbWluL1ByZW0vQnJhbmRpbmcnKS5kZWZhdWx0O1xuXHRcdFx0bGljZW5zaW5nID0gcmVxdWlyZSgnU2V0dGluZ3MvQWRtaW4vUHJlbS9MaWNlbnNpbmcnKS5kZWZhdWx0O1xuXHRcdH1cblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFxuXHRcdFx0R2VuZXJhbEFkbWluU2V0dGluZ3MsXG5cdFx0XHQnQWRtaW5TZXR0aW5nc0dlbmVyYWwnLFxuXHRcdFx0J1RBQlNfTEFCRUxTL0xBQkVMX0dFTkVSQUxfTkFNRScsXG5cdFx0XHQnZ2VuZXJhbCcsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKERvbWFpbnNBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0RvbWFpbnMnLCAnVEFCU19MQUJFTFMvTEFCRUxfRE9NQUlOU19OQU1FJywgJ2RvbWFpbnMnKTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKExvZ2luQWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NMb2dpbicsICdUQUJTX0xBQkVMUy9MQUJFTF9MT0dJTl9OQU1FJywgJ2xvZ2luJyk7XG5cblx0XHRpZiAoYnJhbmRpbmcpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKGJyYW5kaW5nLCAnQWRtaW5TZXR0aW5nc0JyYW5kaW5nJywgJ1RBQlNfTEFCRUxTL0xBQkVMX0JSQU5ESU5HX05BTUUnLCAnYnJhbmRpbmcnKTtcblx0XHR9XG5cblx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChDb250YWN0c0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzQ29udGFjdHMnLCAnVEFCU19MQUJFTFMvTEFCRUxfQ09OVEFDVFNfTkFNRScsICdjb250YWN0cycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoU2VjdXJpdHlBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc1NlY3VyaXR5JywgJ1RBQlNfTEFCRUxTL0xBQkVMX1NFQ1VSSVRZX05BTUUnLCAnc2VjdXJpdHknKTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFxuXHRcdFx0U29jaWFsQWRtaW5TZXR0aW5ncyxcblx0XHRcdCdBZG1pblNldHRpbmdzU29jaWFsJyxcblx0XHRcdCdUQUJTX0xBQkVMUy9MQUJFTF9JTlRFR1JBVElPTl9OQU1FJyxcblx0XHRcdCdpbnRlZ3JhdGlvbnMnXG5cdFx0KTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFBsdWdpbnNBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc1BsdWdpbnMnLCAnVEFCU19MQUJFTFMvTEFCRUxfUExVR0lOU19OQU1FJywgJ3BsdWdpbnMnKTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFBhY2thZ2VzQWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NQYWNrYWdlcycsICdUQUJTX0xBQkVMUy9MQUJFTF9QQUNLQUdFU19OQU1FJywgJ3BhY2thZ2VzJyk7XG5cblx0XHRpZiAobGljZW5zaW5nKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChsaWNlbnNpbmcsICdBZG1pblNldHRpbmdzTGljZW5zaW5nJywgJ1RBQlNfTEFCRUxTL0xBQkVMX0xJQ0VOU0lOR19OQU1FJywgJ2xpY2Vuc2luZycpO1xuXHRcdH1cblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKEFib3V0QWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NBYm91dCcsICdUQUJTX0xBQkVMUy9MQUJFTF9BQk9VVF9OQU1FJywgJ2Fib3V0Jyk7XG5cblx0XHRydW5TZXR0aW5nc1ZpZXdNb2RlbEhvb2tzKHRydWUpO1xuXG5cdFx0aWYgKGZDYWxsYmFjaykge1xuXHRcdFx0ZkNhbGxiYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdGdldEFwcCgpLnNldFdpbmRvd1RpdGxlKCcnKTtcblx0fVxufVxuXG5leHBvcnQgeyBTZXR0aW5nc0FkbWluU2NyZWVuLCBTZXR0aW5nc0FkbWluU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHtcblx0dHJpbSxcblx0cEludCxcblx0Ym9vbFRvQWpheCxcblx0c2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24sXG5cdGNoYW5nZVRoZW1lLFxuXHRjb252ZXJ0VGhlbWVOYW1lLFxuXHRjb252ZXJ0TGFuZ05hbWVcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHJlbG9hZCBhcyB0cmFuc2xhdG9yUmVsb2FkIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgcGhwSW5mbyB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgVGhlbWVTdG9yZSBmcm9tICdTdG9yZXMvVGhlbWUnO1xuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcbmltcG9ydCBBcHBBZG1pblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9BcHAnO1xuaW1wb3J0IENhcGFBZG1pblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9DYXBhJztcblxuY2xhc3MgR2VuZXJhbEFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmxhbmd1YWdlID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZTtcblx0XHR0aGlzLmxhbmd1YWdlcyA9IExhbmd1YWdlU3RvcmUubGFuZ3VhZ2VzO1xuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbiA9IExhbmd1YWdlU3RvcmUubGFuZ3VhZ2VBZG1pbjtcblx0XHR0aGlzLmxhbmd1YWdlc0FkbWluID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZXNBZG1pbjtcblxuXHRcdHRoaXMudGhlbWUgPSBUaGVtZVN0b3JlLnRoZW1lO1xuXHRcdHRoaXMudGhlbWVzID0gVGhlbWVTdG9yZS50aGVtZXM7XG5cblx0XHR0aGlzLmNhcGFUaGVtZXMgPSBDYXBhQWRtaW5TdG9yZS50aGVtZXM7XG5cdFx0dGhpcy5jYXBhVXNlckJhY2tncm91bmQgPSBDYXBhQWRtaW5TdG9yZS51c2VyQmFja2dyb3VuZDtcblx0XHR0aGlzLmNhcGFHcmF2YXRhciA9IENhcGFBZG1pblN0b3JlLmdyYXZhdGFyO1xuXHRcdHRoaXMuY2FwYUFkZGl0aW9uYWxBY2NvdW50cyA9IENhcGFBZG1pblN0b3JlLmFkZGl0aW9uYWxBY2NvdW50cztcblx0XHR0aGlzLmNhcGFJZGVudGl0aWVzID0gQ2FwYUFkbWluU3RvcmUuaWRlbnRpdGllcztcblx0XHR0aGlzLmNhcGFBdHRhY2htZW50VGh1bWJuYWlscyA9IENhcGFBZG1pblN0b3JlLmF0dGFjaG1lbnRUaHVtYm5haWxzO1xuXHRcdHRoaXMuY2FwYVRlbXBsYXRlcyA9IENhcGFBZG1pblN0b3JlLnRlbXBsYXRlcztcblxuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzID0gQXBwQWRtaW5TdG9yZS5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3M7XG5cdFx0dGhpcy53ZWFrUGFzc3dvcmQgPSBBcHBBZG1pblN0b3JlLndlYWtQYXNzd29yZDtcblx0XHR0aGlzLm5ld01vdmVUb0ZvbGRlciA9IEFwcEFkbWluU3RvcmUubmV3TW92ZVRvRm9sZGVyO1xuXG5cdFx0dGhpcy5kYXRhRm9sZGVyQWNjZXNzID0gQXBwQWRtaW5TdG9yZS5kYXRhRm9sZGVyQWNjZXNzO1xuXG5cdFx0dGhpcy5tYWluQXR0YWNobWVudExpbWl0ID0ga29cblx0XHRcdC5vYnNlcnZhYmxlKHBJbnQoc2V0dGluZ3NHZXQoJ0F0dGFjaG1lbnRMaW1pdCcpKSAvIChNYWdpY3MuQml0TGVuZ3RoMTAyNCAqIE1hZ2ljcy5CaXRMZW5ndGgxMDI0KSlcblx0XHRcdC5leHRlbmQoeyBwb3NJbnRlcmVyOiAyNSB9KTtcblxuXHRcdHRoaXMudXBsb2FkRGF0YSA9IHNldHRpbmdzR2V0KCdQaHBVcGxvYWRTaXplcycpO1xuXHRcdHRoaXMudXBsb2FkRGF0YURlc2MgPVxuXHRcdFx0dGhpcy51cGxvYWREYXRhICYmICh0aGlzLnVwbG9hZERhdGEudXBsb2FkX21heF9maWxlc2l6ZSB8fCB0aGlzLnVwbG9hZERhdGEucG9zdF9tYXhfc2l6ZSlcblx0XHRcdFx0PyBbXG5cdFx0XHRcdFx0XHR0aGlzLnVwbG9hZERhdGEudXBsb2FkX21heF9maWxlc2l6ZVxuXHRcdFx0XHRcdFx0XHQ/ICd1cGxvYWRfbWF4X2ZpbGVzaXplID0gJyArIHRoaXMudXBsb2FkRGF0YS51cGxvYWRfbWF4X2ZpbGVzaXplICsgJzsgJ1xuXHRcdFx0XHRcdFx0XHQ6ICcnLFxuXHRcdFx0XHRcdFx0dGhpcy51cGxvYWREYXRhLnBvc3RfbWF4X3NpemUgPyAncG9zdF9tYXhfc2l6ZSA9ICcgKyB0aGlzLnVwbG9hZERhdGEucG9zdF9tYXhfc2l6ZSA6ICcnXG5cdFx0XHRcdCAgXS5qb2luKCcnKVxuXHRcdFx0XHQ6ICcnO1xuXG5cdFx0dGhpcy50aGVtZXNPcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8ubWFwKHRoaXMudGhlbWVzKCksICh0aGVtZSkgPT4gKHsgb3B0VmFsdWU6IHRoZW1lLCBvcHRUZXh0OiBjb252ZXJ0VGhlbWVOYW1lKHRoZW1lKSB9KSlcblx0XHQpO1xuXG5cdFx0dGhpcy5sYW5ndWFnZUZ1bGxOYW1lID0ga28uY29tcHV0ZWQoKCkgPT4gY29udmVydExhbmdOYW1lKHRoaXMubGFuZ3VhZ2UoKSkpO1xuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbkZ1bGxOYW1lID0ga28uY29tcHV0ZWQoKCkgPT4gY29udmVydExhbmdOYW1lKHRoaXMubGFuZ3VhZ2VBZG1pbigpKSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRMaW1pdFRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5sYW5ndWFnZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUxMDBtcyB9KTtcblx0XHR0aGlzLnRoZW1lVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRjb25zdCBmMSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuYXR0YWNobWVudExpbWl0VHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYyID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5sYW5ndWFnZVRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMudGhlbWVUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZlJlbG9hZExhbmd1YWdlSGVscGVyID0gKHNhdmVTZXR0aW5nc1N0ZXApID0+ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyKHNhdmVTZXR0aW5nc1N0ZXApO1xuXHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5sYW5ndWFnZUFkbWluVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLklkbGUpLCBNYWdpY3MuVGltZTFzKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0dGhpcy5tYWluQXR0YWNobWVudExpbWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdBdHRhY2htZW50TGltaXQnOiBwSW50KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmxhbmd1YWdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMiwge1xuXHRcdFx0XHRcdCdMYW5ndWFnZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubGFuZ3VhZ2VBZG1pbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMubGFuZ3VhZ2VBZG1pblRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5BbmltYXRlKTtcblx0XHRcdFx0dHJhbnNsYXRvclJlbG9hZCh0cnVlLCB2YWx1ZSlcblx0XHRcdFx0XHQudGhlbihmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIoU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0KSwgZlJlbG9hZExhbmd1YWdlSGVscGVyKFNhdmVTZXR0aW5nc1N0ZXAuRmFsc2VSZXN1bHQpKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdFx0XHQnTGFuZ3VhZ2VBZG1pbic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnRoZW1lLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0Y2hhbmdlVGhlbWUodmFsdWUsIHRoaXMudGhlbWVUcmlnZ2VyKTtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMywge1xuXHRcdFx0XHRcdCdUaGVtZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYUFkZGl0aW9uYWxBY2NvdW50cy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhQWRkaXRpb25hbEFjY291bnRzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhSWRlbnRpdGllcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhSWRlbnRpdGllcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYVRlbXBsYXRlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhVGVtcGxhdGVzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhR3JhdmF0YXIuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYUdyYXZhdGFyJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhQXR0YWNobWVudFRodW1ibmFpbHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhVGhlbWVzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFUaGVtZXMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFVc2VyQmFja2dyb3VuZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhVXNlckJhY2tncm91bmQnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdBbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm5ld01vdmVUb0ZvbGRlci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdOZXdNb3ZlVG9Gb2xkZXInOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cblxuXHRzZWxlY3RMYW5ndWFnZSgpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9MYW5ndWFnZXMnKSwgW3RoaXMubGFuZ3VhZ2UsIHRoaXMubGFuZ3VhZ2VzKCksIExhbmd1YWdlU3RvcmUudXNlckxhbmd1YWdlKCldKTtcblx0fVxuXG5cdHNlbGVjdExhbmd1YWdlQWRtaW4oKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzJyksIFtcblx0XHRcdHRoaXMubGFuZ3VhZ2VBZG1pbixcblx0XHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4oKSxcblx0XHRcdExhbmd1YWdlU3RvcmUudXNlckxhbmd1YWdlQWRtaW4oKVxuXHRcdF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRwaHBJbmZvTGluaygpIHtcblx0XHRyZXR1cm4gcGhwSW5mbygpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEdlbmVyYWxBZG1pblNldHRpbmdzLCBHZW5lcmFsQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IERvbWFpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Eb21haW4nO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuY2xhc3MgRG9tYWluc0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRvbWFpbnMgPSBEb21haW5TdG9yZS5kb21haW5zO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKHRoaXMuZG9tYWlucy5sb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpO1xuXG5cdFx0dGhpcy5kb21haW5Gb3JEZWxldGlvbiA9IGtvLm9ic2VydmFibGUobnVsbCkuZGVsZXRlQWNjZXNzSGVscGVyKCk7XG5cblx0XHR0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QgPSBfLmJpbmQodGhpcy5vbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0LCB0aGlzKTtcblx0XHR0aGlzLm9uRG9tYWluTG9hZFJlcXVlc3QgPSBfLmJpbmQodGhpcy5vbkRvbWFpbkxvYWRSZXF1ZXN0LCB0aGlzKTtcblx0fVxuXG5cdGNyZWF0ZURvbWFpbigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Eb21haW4nKSk7XG5cdH1cblxuXHRjcmVhdGVEb21haW5BbGlhcygpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Eb21haW5BbGlhcycpKTtcblx0fVxuXG5cdGRlbGV0ZURvbWFpbihkb21haW4pIHtcblx0XHR0aGlzLmRvbWFpbnMucmVtb3ZlKGRvbWFpbik7XG5cdFx0UmVtb3RlLmRvbWFpbkRlbGV0ZSh0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QsIGRvbWFpbi5uYW1lKTtcblx0fVxuXG5cdGRpc2FibGVEb21haW4oZG9tYWluKSB7XG5cdFx0ZG9tYWluLmRpc2FibGVkKCFkb21haW4uZGlzYWJsZWQoKSk7XG5cdFx0UmVtb3RlLmRvbWFpbkRpc2FibGUodGhpcy5vbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0LCBkb21haW4ubmFtZSwgZG9tYWluLmRpc2FibGVkKCkpO1xuXHR9XG5cblx0b25CdWlsZChvRG9tKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0b0RvbS5vbignY2xpY2snLCAnLmItYWRtaW4tZG9tYWlucy1saXN0LXRhYmxlIC5lLWl0ZW0gLmUtYWN0aW9uJywgZnVuY3Rpb24oKSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0Y29uc3QgZG9tYWluSXRlbSA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRpZiAoZG9tYWluSXRlbSkge1xuXHRcdFx0XHRSZW1vdGUuZG9tYWluKHNlbGYub25Eb21haW5Mb2FkUmVxdWVzdCwgZG9tYWluSXRlbS5uYW1lKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0fVxuXG5cdG9uRG9tYWluTG9hZFJlcXVlc3Qoc1Jlc3VsdCwgb0RhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0RvbWFpbicpLCBbb0RhdGEuUmVzdWx0XSk7XG5cdFx0fVxuXHR9XG5cblx0b25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCgpIHtcblx0XHRnZXRBcHAoKS5yZWxvYWREb21haW5MaXN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgRG9tYWluc0FkbWluU2V0dGluZ3MsIERvbWFpbnNBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24sIGJvb2xUb0FqYXgsIHRyaW0gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9BcHAnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuY2xhc3MgTG9naW5BZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyTGFuZ3VhZ2UgPSBBcHBTdG9yZS5kZXRlcm1pbmVVc2VyTGFuZ3VhZ2U7XG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyRG9tYWluID0gQXBwU3RvcmUuZGV0ZXJtaW5lVXNlckRvbWFpbjtcblxuXHRcdHRoaXMuZGVmYXVsdERvbWFpbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luRGVmYXVsdERvbWFpbicpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luID0gQXBwU3RvcmUuYWxsb3dMYW5ndWFnZXNPbkxvZ2luO1xuXG5cdFx0dGhpcy5kdW1teSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5kZWZhdWx0RG9tYWluLnRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdEZXRlcm1pbmVVc2VyTGFuZ3VhZ2UnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmRldGVybWluZVVzZXJEb21haW4uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnRGV0ZXJtaW5lVXNlckRvbWFpbic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0FsbG93TGFuZ3VhZ2VzT25Mb2dpbic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZGVmYXVsdERvbWFpbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjEsIHtcblx0XHRcdFx0XHQnTG9naW5EZWZhdWx0RG9tYWluJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9LCA1MCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgTG9naW5BZG1pblNldHRpbmdzLCBMb2dpbkFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyLCBpbkFycmF5LCB0cmltLCBib29sVG9BamF4IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCwgU3RvcmFnZVJlc3VsdFR5cGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuaW1wb3J0IHsgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgQ29udGFjdHNBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdFx0dGhpcy5lbmFibGVDb250YWN0cyA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnQ29udGFjdHNFbmFibGUnKSk7XG5cdFx0dGhpcy5jb250YWN0c1N5bmMgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0NvbnRhY3RzU3luYycpKTtcblxuXHRcdGNvbnN0IHN1cHBvcnRlZFR5cGVzID0gW10sXG5cdFx0XHR0eXBlcyA9IFsnc3FsaXRlJywgJ215c3FsJywgJ3Bnc3FsJ10sXG5cdFx0XHRnZXRUeXBlTmFtZSA9IChuYW1lKSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAobmFtZSkge1xuXHRcdFx0XHRcdGNhc2UgJ3NxbGl0ZSc6XG5cdFx0XHRcdFx0XHRuYW1lID0gJ1NRTGl0ZSc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdteXNxbCc6XG5cdFx0XHRcdFx0XHRuYW1lID0gJ015U1FMJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3Bnc3FsJzpcblx0XHRcdFx0XHRcdG5hbWUgPSAnUG9zdGdyZVNRTCc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdH07XG5cblx0XHRpZiAoc2V0dGluZ3NHZXQoJ1NRTGl0ZUlzU3VwcG9ydGVkJykpIHtcblx0XHRcdHN1cHBvcnRlZFR5cGVzLnB1c2goJ3NxbGl0ZScpO1xuXHRcdH1cblx0XHRpZiAoc2V0dGluZ3NHZXQoJ015U3FsSXNTdXBwb3J0ZWQnKSkge1xuXHRcdFx0c3VwcG9ydGVkVHlwZXMucHVzaCgnbXlzcWwnKTtcblx0XHR9XG5cdFx0aWYgKHNldHRpbmdzR2V0KCdQb3N0Z3JlU3FsSXNTdXBwb3J0ZWQnKSkge1xuXHRcdFx0c3VwcG9ydGVkVHlwZXMucHVzaCgncGdzcWwnKTtcblx0XHR9XG5cblx0XHR0aGlzLmNvbnRhY3RzU3VwcG9ydGVkID0gMCA8IHN1cHBvcnRlZFR5cGVzLmxlbmd0aDtcblxuXHRcdHRoaXMuY29udGFjdHNUeXBlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5jb250YWN0c1R5cGVzT3B0aW9ucyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLm1hcCh0aGlzLmNvbnRhY3RzVHlwZXMoKSwgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRpc2FibGVkID0gLTEgPT09IGluQXJyYXkodmFsdWUsIHN1cHBvcnRlZFR5cGVzKTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHQnaWQnOiB2YWx1ZSxcblx0XHRcdFx0XHQnbmFtZSc6IGdldFR5cGVOYW1lKHZhbHVlKSArIChkaXNhYmxlZCA/ICcgKCcgKyBpMThuKCdISU5UUy9OT1RfU1VQUE9SVEVEJykgKyAnKScgOiAnJyksXG5cdFx0XHRcdFx0J2Rpc2FibGVkJzogZGlzYWJsZWRcblx0XHRcdFx0fTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdHRoaXMuY29udGFjdHNUeXBlcyh0eXBlcyk7XG5cdFx0dGhpcy5jb250YWN0c1R5cGUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubWFpbkNvbnRhY3RzVHlwZSA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoe1xuXHRcdFx0XHRyZWFkOiB0aGlzLmNvbnRhY3RzVHlwZSxcblx0XHRcdFx0d3JpdGU6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gdGhpcy5jb250YWN0c1R5cGUoKSkge1xuXHRcdFx0XHRcdFx0aWYgKC0xIDwgaW5BcnJheSh2YWx1ZSwgc3VwcG9ydGVkVHlwZXMpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29udGFjdHNUeXBlKHZhbHVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoMCA8IHN1cHBvcnRlZFR5cGVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbnRhY3RzVHlwZSgnJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuY29udGFjdHNUeXBlLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5leHRlbmQoeyBub3RpZnk6ICdhbHdheXMnIH0pO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGUuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKCcnKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucGRvRHNuID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnQ29udGFjdHNQZG9Ec24nKSk7XG5cdFx0dGhpcy5wZG9Vc2VyID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnQ29udGFjdHNQZG9Vc2VyJykpO1xuXHRcdHRoaXMucGRvUGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1Bhc3N3b3JkJykpO1xuXG5cdFx0dGhpcy5wZG9Ec25UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMucGRvVXNlclRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5wZG9QYXNzd29yZFRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5jb250YWN0c1R5cGVUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy50ZXN0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNvbnRhY3RzVHlwZShzZXR0aW5nc0dldCgnQ29udGFjdHNQZG9UeXBlJykpO1xuXG5cdFx0dGhpcy5vblRlc3RDb250YWN0c1Jlc3BvbnNlID0gXy5iaW5kKHRoaXMub25UZXN0Q29udGFjdHNSZXNwb25zZSwgdGhpcyk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gJycgIT09IHNlbGYucGRvRHNuKCkgJiYgJycgIT09IHNlbGYucGRvVXNlcigpKVxuXHR0ZXN0Q29udGFjdHNDb21tYW5kKCkge1xuXHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2VzcyhmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXHRcdHRoaXMudGVzdGluZyh0cnVlKTtcblxuXHRcdFJlbW90ZS50ZXN0Q29udGFjdHModGhpcy5vblRlc3RDb250YWN0c1Jlc3BvbnNlLCB7XG5cdFx0XHQnQ29udGFjdHNQZG9UeXBlJzogdGhpcy5jb250YWN0c1R5cGUoKSxcblx0XHRcdCdDb250YWN0c1Bkb0Rzbic6IHRoaXMucGRvRHNuKCksXG5cdFx0XHQnQ29udGFjdHNQZG9Vc2VyJzogdGhpcy5wZG9Vc2VyKCksXG5cdFx0XHQnQ29udGFjdHNQZG9QYXNzd29yZCc6IHRoaXMucGRvUGFzc3dvcmQoKVxuXHRcdH0pO1xuXHR9XG5cblx0b25UZXN0Q29udGFjdHNSZXNwb25zZShyZXN1bHQsIGRhdGEpIHtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKCcnKTtcblxuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBkYXRhLlJlc3VsdC5SZXN1bHQpIHtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2Vzcyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvcih0cnVlKTtcblx0XHRcdGlmIChkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKGRhdGEuUmVzdWx0Lk1lc3NhZ2UgfHwgJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudGVzdGluZyhmYWxzZSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnBkb0RzblRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMucGRvVXNlclRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmNCA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMucGRvUGFzc3dvcmRUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjUgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmNvbnRhY3RzVHlwZVRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLmVuYWJsZUNvbnRhY3RzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzRW5hYmxlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jb250YWN0c1N5bmMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNTeW5jJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jb250YWN0c1R5cGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGY1LCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzUGRvVHlwZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMucGRvRHNuLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb0Rzbic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMucGRvVXNlci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjMsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNQZG9Vc2VyJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wZG9QYXNzd29yZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjQsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNQZG9QYXNzd29yZCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY29udGFjdHNUeXBlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1R5cGUnKSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxufVxuXG5leHBvcnQgeyBDb250YWN0c0FkbWluU2V0dGluZ3MsIENvbnRhY3RzQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHRyaW0sIGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgcGhwSW5mbyB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IEFwcEFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYUFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NhcGEnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgU2VjdXJpdHlBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMgPSBBcHBBZG1pblN0b3JlLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcztcblxuXHRcdHRoaXMud2Vha1Bhc3N3b3JkID0gQXBwQWRtaW5TdG9yZS53ZWFrUGFzc3dvcmQ7XG5cblx0XHR0aGlzLmNhcGFPcGVuUEdQID0gQ2FwYUFkbWluU3RvcmUub3BlblBHUDtcblxuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGggPSBDYXBhQWRtaW5TdG9yZS50d29GYWN0b3JBdXRoO1xuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGhGb3JjZSA9IENhcGFBZG1pblN0b3JlLnR3b0ZhY3RvckF1dGhGb3JjZTtcblxuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGguc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLmNhcGFUd29GYWN0b3JBdXRoRm9yY2UoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy52ZXJpZnlTc2xDZXJ0aWZpY2F0ZSA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnVmVyaWZ5U3NsQ2VydGlmaWNhdGUnKSk7XG5cdFx0dGhpcy5hbGxvd1NlbGZTaWduZWQgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0FsbG93U2VsZlNpZ25lZCcpKTtcblxuXHRcdHRoaXMudmVyaWZ5U3NsQ2VydGlmaWNhdGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLmFsbG93U2VsZlNpZ25lZCh0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuaXNUd29GYWN0b3JEcm9wcGVyU2hvd24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3b0ZhY3RvckRyb3BwZXJVc2VyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlci5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFkbWluTG9naW4gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdBZG1pbkxvZ2luJykpO1xuXHRcdHRoaXMuYWRtaW5Mb2dpbkVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3MiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFkbWluTG9naW4uc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWRtaW5Mb2dpbkVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldy5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXdFcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcyLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMub25OZXdBZG1pblBhc3N3b3JkUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSwgdGhpcyk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gJycgIT09IHRyaW0oc2VsZi5hZG1pbkxvZ2luKCkpICYmICcnICE9PSBzZWxmLmFkbWluUGFzc3dvcmQoKSlcblx0c2F2ZU5ld0FkbWluUGFzc3dvcmRDb21tYW5kKCkge1xuXHRcdGlmICgnJyA9PT0gdHJpbSh0aGlzLmFkbWluTG9naW4oKSkpIHtcblx0XHRcdHRoaXMuYWRtaW5Mb2dpbkVycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmFkbWluUGFzc3dvcmROZXcoKSAhPT0gdGhpcy5hZG1pblBhc3N3b3JkTmV3MigpKSB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXdFcnJvcih0cnVlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cblx0XHRSZW1vdGUuc2F2ZU5ld0FkbWluUGFzc3dvcmQodGhpcy5vbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSwge1xuXHRcdFx0J0xvZ2luJzogdGhpcy5hZG1pbkxvZ2luKCksXG5cdFx0XHQnUGFzc3dvcmQnOiB0aGlzLmFkbWluUGFzc3dvcmQoKSxcblx0XHRcdCdOZXdQYXNzd29yZCc6IHRoaXMuYWRtaW5QYXNzd29yZE5ldygpXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHNob3dUd29GYWN0b3JEcm9wcGVyKCkge1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIoJycpO1xuXHRcdHRoaXMuaXNUd29GYWN0b3JEcm9wcGVyU2hvd24odHJ1ZSk7XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIuZm9jdXNlZCh0cnVlKTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG5cblx0b25OZXdBZG1pblBhc3N3b3JkUmVzcG9uc2UocmVzdWx0LCBkYXRhKSB7XG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmQoJycpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3KCcnKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIoJycpO1xuXG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKHRydWUpO1xuXG5cdFx0XHR0aGlzLndlYWtQYXNzd29yZCghIWRhdGEuUmVzdWx0LldlYWspO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcih0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdHRoaXMuY2FwYU9wZW5QR1Auc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdDYXBhT3BlblBHUCc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGguc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdDYXBhVHdvRmFjdG9yQXV0aCc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGhGb3JjZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0NhcGFUd29GYWN0b3JBdXRoRm9yY2UnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J1VzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMudmVyaWZ5U3NsQ2VydGlmaWNhdGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdWZXJpZnlTc2xDZXJ0aWZpY2F0ZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWxsb3dTZWxmU2lnbmVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnQWxsb3dTZWxmU2lnbmVkJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0b25IaWRlKCkge1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZCgnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3KCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcyKCcnKTtcblxuXHRcdHRoaXMuaXNUd29GYWN0b3JEcm9wcGVyU2hvd24oZmFsc2UpO1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIoJycpO1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIuZm9jdXNlZChmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHBocEluZm9MaW5rKCkge1xuXHRcdHJldHVybiBwaHBJbmZvKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgU2VjdXJpdHlBZG1pblNldHRpbmdzLCBTZWN1cml0eUFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24sIHRyaW0sIGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5jbGFzcyBTb2NpYWxBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5nb29nbGVFbmFibGUgPSBTb2NpYWxTdG9yZS5nb29nbGUuZW5hYmxlZDtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZUF1dGggPSBTb2NpYWxTdG9yZS5nb29nbGUuY2FwYS5hdXRoO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlQXV0aEZhc3QgPSBTb2NpYWxTdG9yZS5nb29nbGUuY2FwYS5hdXRoRmFzdDtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZURyaXZlID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEuZHJpdmU7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVQcmV2aWV3ID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEucHJldmlldztcblxuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUmVxdWlyZUNsaWVudFNldHRpbmdzID0gU29jaWFsU3RvcmUuZ29vZ2xlLnJlcXVpcmUuY2xpZW50U2V0dGluZ3M7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVSZXF1aXJlQXBpS2V5ID0gU29jaWFsU3RvcmUuZ29vZ2xlLnJlcXVpcmUuYXBpS2V5U2V0dGluZ3M7XG5cblx0XHR0aGlzLmdvb2dsZUNsaWVudElEID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNsaWVudElEO1xuXHRcdHRoaXMuZ29vZ2xlQ2xpZW50U2VjcmV0ID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNsaWVudFNlY3JldDtcblx0XHR0aGlzLmdvb2dsZUFwaUtleSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5hcGlLZXk7XG5cblx0XHR0aGlzLmdvb2dsZVRyaWdnZXIxID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMuZ29vZ2xlVHJpZ2dlcjIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5nb29nbGVUcmlnZ2VyMyA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5zdXBwb3J0ZWQ7XG5cdFx0dGhpcy5mYWNlYm9va0VuYWJsZSA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLmVuYWJsZWQ7XG5cdFx0dGhpcy5mYWNlYm9va0FwcElEID0gU29jaWFsU3RvcmUuZmFjZWJvb2suYXBwSUQ7XG5cdFx0dGhpcy5mYWNlYm9va0FwcFNlY3JldCA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLmFwcFNlY3JldDtcblxuXHRcdHRoaXMuZmFjZWJvb2tUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmZhY2Vib29rVHJpZ2dlcjIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLnR3aXR0ZXJFbmFibGUgPSBTb2NpYWxTdG9yZS50d2l0dGVyLmVuYWJsZWQ7XG5cdFx0dGhpcy50d2l0dGVyQ29uc3VtZXJLZXkgPSBTb2NpYWxTdG9yZS50d2l0dGVyLmNvbnN1bWVyS2V5O1xuXHRcdHRoaXMudHdpdHRlckNvbnN1bWVyU2VjcmV0ID0gU29jaWFsU3RvcmUudHdpdHRlci5jb25zdW1lclNlY3JldDtcblxuXHRcdHRoaXMudHdpdHRlclRyaWdnZXIxID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMudHdpdHRlclRyaWdnZXIyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy5kcm9wYm94RW5hYmxlID0gU29jaWFsU3RvcmUuZHJvcGJveC5lbmFibGVkO1xuXHRcdHRoaXMuZHJvcGJveEFwaUtleSA9IFNvY2lhbFN0b3JlLmRyb3Bib3guYXBpS2V5O1xuXG5cdFx0dGhpcy5kcm9wYm94VHJpZ2dlcjEgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmZhY2Vib29rVHJpZ2dlcjEsIHRoaXMpLFxuXHRcdFx0XHRmMiA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuZmFjZWJvb2tUcmlnZ2VyMiwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy50d2l0dGVyVHJpZ2dlcjEsIHRoaXMpLFxuXHRcdFx0XHRmNCA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMudHdpdHRlclRyaWdnZXIyLCB0aGlzKSxcblx0XHRcdFx0ZjUgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmdvb2dsZVRyaWdnZXIxLCB0aGlzKSxcblx0XHRcdFx0ZjYgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmdvb2dsZVRyaWdnZXIyLCB0aGlzKSxcblx0XHRcdFx0ZjcgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmdvb2dsZVRyaWdnZXIzLCB0aGlzKSxcblx0XHRcdFx0ZjggPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmRyb3Bib3hUcmlnZ2VyMSwgdGhpcyk7XG5cblx0XHRcdHRoaXMuZmFjZWJvb2tFbmFibGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5mYWNlYm9va1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0XHQnRmFjZWJvb2tFbmFibGUnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5mYWNlYm9va0FwcElELnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjEsIHtcblx0XHRcdFx0XHRcdCdGYWNlYm9va0FwcElEJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmFjZWJvb2tBcHBTZWNyZXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5mYWNlYm9va1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMiwge1xuXHRcdFx0XHRcdFx0J0ZhY2Vib29rQXBwU2VjcmV0JzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudHdpdHRlckVuYWJsZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignVHdpdHRlckVuYWJsZScsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMudHdpdHRlckNvbnN1bWVyS2V5LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdUd2l0dGVyQ29uc3VtZXJLZXknLCB0cmltLCBmMykpO1xuXHRcdFx0dGhpcy50d2l0dGVyQ29uc3VtZXJTZWNyZXQuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ1R3aXR0ZXJDb25zdW1lclNlY3JldCcsIHRyaW0sIGY0KSk7XG5cblx0XHRcdHRoaXMuZ29vZ2xlRW5hYmxlLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGUnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUVuYWJsZUF1dGguc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZUF1dGgnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUVuYWJsZURyaXZlLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVEcml2ZScsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZ29vZ2xlRW5hYmxlUHJldmlldy5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlRW5hYmxlUHJldmlldycsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZ29vZ2xlQ2xpZW50SUQuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUNsaWVudElEJywgdHJpbSwgZjUpKTtcblx0XHRcdHRoaXMuZ29vZ2xlQ2xpZW50U2VjcmV0LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVDbGllbnRTZWNyZXQnLCB0cmltLCBmNikpO1xuXHRcdFx0dGhpcy5nb29nbGVBcGlLZXkuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUFwaUtleScsIHRyaW0sIGY3KSk7XG5cblx0XHRcdHRoaXMuZHJvcGJveEVuYWJsZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignRHJvcGJveEVuYWJsZScsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZHJvcGJveEFwaUtleS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignRHJvcGJveEFwaUtleScsIHRyaW0sIGY4KSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxufVxuXG5leHBvcnQgeyBTb2NpYWxBZG1pblNldHRpbmdzLCBTb2NpYWxBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBib29sVG9BamF4IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9BcHAnO1xuaW1wb3J0IFBsdWdpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9QbHVnaW4nO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBQbHVnaW5zQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZW5hYmxlZFBsdWdpbnMgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0VuYWJsZWRQbHVnaW5zJykpO1xuXG5cdFx0dGhpcy5wbHVnaW5zID0gUGx1Z2luU3RvcmUucGx1Z2lucztcblx0XHR0aGlzLnBsdWdpbnNFcnJvciA9IFBsdWdpblN0b3JlLnBsdWdpbnMuZXJyb3I7XG5cblx0XHR0aGlzLmNvbW11bml0eSA9IFJMX0NPTU1VTklUWSB8fCBBcHBTdG9yZS5jb21tdW5pdHkoKTtcblxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+IChQbHVnaW5TdG9yZS5wbHVnaW5zLmxvYWRpbmcoKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKSk7XG5cblx0XHR0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QgPSBfLmJpbmQodGhpcy5vblBsdWdpbkxvYWRSZXF1ZXN0LCB0aGlzKTtcblx0XHR0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QgPSBfLmJpbmQodGhpcy5vblBsdWdpbkRpc2FibGVSZXF1ZXN0LCB0aGlzKTtcblx0fVxuXG5cdGRpc2FibGVQbHVnaW4ocGx1Z2luKSB7XG5cdFx0cGx1Z2luLmRpc2FibGVkKCFwbHVnaW4uZGlzYWJsZWQoKSk7XG5cdFx0UmVtb3RlLnBsdWdpbkRpc2FibGUodGhpcy5vblBsdWdpbkRpc2FibGVSZXF1ZXN0LCBwbHVnaW4ubmFtZSwgcGx1Z2luLmRpc2FibGVkKCkpO1xuXHR9XG5cblx0Y29uZmlndXJlUGx1Z2luKHBsdWdpbikge1xuXHRcdFJlbW90ZS5wbHVnaW4odGhpcy5vblBsdWdpbkxvYWRSZXF1ZXN0LCBwbHVnaW4ubmFtZSk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdG9Eb21cblx0XHRcdC5vbignY2xpY2snLCAnLmUtaXRlbSAuY29uZmlndXJlLXBsdWdpbi1hY3Rpb24nLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgcGx1Z2luID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0aWYgKHBsdWdpbikge1xuXHRcdFx0XHRcdHNlbGYuY29uZmlndXJlUGx1Z2luKHBsdWdpbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQub24oJ2NsaWNrJywgJy5lLWl0ZW0gLmRpc2FibGVkLXBsdWdpbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBwbHVnaW4gPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRpZiAocGx1Z2luKSB7XG5cdFx0XHRcdFx0c2VsZi5kaXNhYmxlUGx1Z2luKHBsdWdpbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5lbmFibGVkUGx1Z2lucy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0VuYWJsZWRQbHVnaW5zJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdFBsdWdpblN0b3JlLnBsdWdpbnMuZXJyb3IoJycpO1xuXHRcdGdldEFwcCgpLnJlbG9hZFBsdWdpbkxpc3QoKTtcblx0fVxuXG5cdG9uUGx1Z2luTG9hZFJlcXVlc3QocmVzdWx0LCBkYXRhKSB7XG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9QbHVnaW4nKSwgW2RhdGEuUmVzdWx0XSk7XG5cdFx0fVxuXHR9XG5cblx0b25QbHVnaW5EaXNhYmxlUmVxdWVzdChyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEpIHtcblx0XHRcdGlmICghZGF0YS5SZXN1bHQgJiYgZGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0aWYgKE5vdGlmaWNhdGlvbi5VbnN1cHBvcnRlZFBsdWdpblBhY2thZ2UgPT09IGRhdGEuRXJyb3JDb2RlICYmIGRhdGEuRXJyb3JNZXNzYWdlICYmICcnICE9PSBkYXRhLkVycm9yTWVzc2FnZSkge1xuXHRcdFx0XHRcdFBsdWdpblN0b3JlLnBsdWdpbnMuZXJyb3IoZGF0YS5FcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFBsdWdpblN0b3JlLnBsdWdpbnMuZXJyb3IoZ2V0Tm90aWZpY2F0aW9uKGRhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRnZXRBcHAoKS5yZWxvYWRQbHVnaW5MaXN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGx1Z2luc0FkbWluU2V0dGluZ3MsIFBsdWdpbnNBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBQYWNrYWdlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BhY2thZ2UnO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuY2xhc3MgUGFja2FnZXNBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wYWNrYWdlc0Vycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnBhY2thZ2VzID0gUGFja2FnZVN0b3JlLnBhY2thZ2VzO1xuXHRcdHRoaXMucGFja2FnZXNSZWFsID0gUGFja2FnZVN0b3JlLnBhY2thZ2VzUmVhbDtcblx0XHR0aGlzLnBhY2thZ2VzTWFpblVwZGF0YWJsZSA9IFBhY2thZ2VTdG9yZS5wYWNrYWdlc01haW5VcGRhdGFibGU7XG5cblx0XHR0aGlzLnBhY2thZ2VzQ3VycmVudCA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiBpdGVtICYmICcnICE9PSBpdGVtLmluc3RhbGxlZCAmJiAhaXRlbS5jb21wYXJlKVxuXHRcdCk7XG5cdFx0dGhpcy5wYWNrYWdlc0F2YWlsYWJsZUZvclVwZGF0ZSA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiBpdGVtICYmICcnICE9PSBpdGVtLmluc3RhbGxlZCAmJiAhIWl0ZW0uY29tcGFyZSlcblx0XHQpO1xuXHRcdHRoaXMucGFja2FnZXNBdmFpbGFibGVGb3JJbnN0YWxsYXRpb24gPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIodGhpcy5wYWNrYWdlcygpLCAoaXRlbSkgPT4gaXRlbSAmJiAnJyA9PT0gaXRlbS5pbnN0YWxsZWQpXG5cdFx0KTtcblxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+IChQYWNrYWdlU3RvcmUucGFja2FnZXMubG9hZGluZygpID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLnBhY2thZ2VzRXJyb3IoJycpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRnZXRBcHAoKS5yZWxvYWRQYWNrYWdlc0xpc3QoKTtcblx0fVxuXG5cdHJlcXVlc3RIZWxwZXIocGFja2FnZVRvUmVxdWVzdCwgaW5zdGFsbCkge1xuXHRcdHJldHVybiAocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gcmVzdWx0IHx8ICFkYXRhIHx8ICFkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdHRoaXMucGFja2FnZXNFcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnBhY2thZ2VzRXJyb3IoXG5cdFx0XHRcdFx0XHRnZXROb3RpZmljYXRpb24oaW5zdGFsbCA/IE5vdGlmaWNhdGlvbi5DYW50SW5zdGFsbFBhY2thZ2UgOiBOb3RpZmljYXRpb24uQ2FudERlbGV0ZVBhY2thZ2UpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRfLmVhY2godGhpcy5wYWNrYWdlcygpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoaXRlbSAmJiBwYWNrYWdlVG9SZXF1ZXN0ICYmIGl0ZW0ubG9hZGluZyAmJiBpdGVtLmxvYWRpbmcoKSAmJiBwYWNrYWdlVG9SZXF1ZXN0LmZpbGUgPT09IGl0ZW0uZmlsZSkge1xuXHRcdFx0XHRcdHBhY2thZ2VUb1JlcXVlc3QubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdFx0aXRlbS5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBkYXRhLlJlc3VsdC5SZWxvYWQpIHtcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Z2V0QXBwKCkucmVsb2FkUGFja2FnZXNMaXN0KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGRlbGV0ZVBhY2thZ2UocGFja2FnZVRvRGVsZXRlKSB7XG5cdFx0aWYgKHBhY2thZ2VUb0RlbGV0ZSkge1xuXHRcdFx0cGFja2FnZVRvRGVsZXRlLmxvYWRpbmcodHJ1ZSk7XG5cdFx0XHRSZW1vdGUucGFja2FnZURlbGV0ZSh0aGlzLnJlcXVlc3RIZWxwZXIocGFja2FnZVRvRGVsZXRlLCBmYWxzZSksIHBhY2thZ2VUb0RlbGV0ZSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zdGFsbFBhY2thZ2UocGFja2FnZVRvSW5zdGFsbCkge1xuXHRcdGlmIChwYWNrYWdlVG9JbnN0YWxsKSB7XG5cdFx0XHRwYWNrYWdlVG9JbnN0YWxsLmxvYWRpbmcodHJ1ZSk7XG5cdFx0XHRSZW1vdGUucGFja2FnZUluc3RhbGwodGhpcy5yZXF1ZXN0SGVscGVyKHBhY2thZ2VUb0luc3RhbGwsIHRydWUpLCBwYWNrYWdlVG9JbnN0YWxsKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgUGFja2FnZXNBZG1pblNldHRpbmdzLCBQYWNrYWdlc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgaTE4biwgdHJpZ2dlciBhcyB0cmFuc2xhdG9yVHJpZ2dlciB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGFwcFNldHRpbmdzR2V0LCBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ29yZVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Db3JlJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBBYm91dEFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnZlcnNpb24gPSBrby5vYnNlcnZhYmxlKGFwcFNldHRpbmdzR2V0KCd2ZXJzaW9uJykpO1xuXHRcdHRoaXMuYWNjZXNzID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdDb3JlQWNjZXNzJykpO1xuXHRcdHRoaXMuZXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNvcmVSZWFsID0gQ29yZVN0b3JlLmNvcmVSZWFsO1xuXHRcdHRoaXMuY29yZUNoYW5uZWwgPSBDb3JlU3RvcmUuY29yZUNoYW5uZWw7XG5cdFx0dGhpcy5jb3JlVHlwZSA9IENvcmVTdG9yZS5jb3JlVHlwZTtcblx0XHR0aGlzLmNvcmVVcGRhdGFibGUgPSBDb3JlU3RvcmUuY29yZVVwZGF0YWJsZTtcblx0XHR0aGlzLmNvcmVBY2Nlc3MgPSBDb3JlU3RvcmUuY29yZUFjY2Vzcztcblx0XHR0aGlzLmNvcmVDaGVja2luZyA9IENvcmVTdG9yZS5jb3JlQ2hlY2tpbmc7XG5cdFx0dGhpcy5jb3JlVXBkYXRpbmcgPSBDb3JlU3RvcmUuY29yZVVwZGF0aW5nO1xuXHRcdHRoaXMuY29yZVdhcm5pbmcgPSBDb3JlU3RvcmUuY29yZVdhcm5pbmc7XG5cdFx0dGhpcy5jb3JlVmVyc2lvbiA9IENvcmVTdG9yZS5jb3JlVmVyc2lvbjtcblx0XHR0aGlzLmNvcmVSZW1vdGVWZXJzaW9uID0gQ29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uO1xuXHRcdHRoaXMuY29yZVJlbW90ZVJlbGVhc2UgPSBDb3JlU3RvcmUuY29yZVJlbW90ZVJlbGVhc2U7XG5cdFx0dGhpcy5jb3JlVmVyc2lvbkNvbXBhcmUgPSBDb3JlU3RvcmUuY29yZVZlcnNpb25Db21wYXJlO1xuXG5cdFx0dGhpcy5jb21tdW5pdHkgPSBSTF9DT01NVU5JVFkgfHwgQXBwU3RvcmUuY29tbXVuaXR5KCk7XG5cblx0XHR0aGlzLmNvcmVSZW1vdGVWZXJzaW9uSHRtbERlc2MgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIGkxOG4oJ1RBQl9BQk9VVC9IVE1MX05FV19WRVJTSU9OJywgeyAnVkVSU0lPTic6IHRoaXMuY29yZVJlbW90ZVZlcnNpb24oKSB9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3RhdHVzVHlwZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGxldCB0eXBlID0gJyc7XG5cdFx0XHRjb25zdCB2ZXJzaW9uVG9Db21wYXJlID0gdGhpcy5jb3JlVmVyc2lvbkNvbXBhcmUoKSxcblx0XHRcdFx0aXNDaGVja2luZyA9IHRoaXMuY29yZUNoZWNraW5nKCksXG5cdFx0XHRcdGlzVXBkYXRpbmcgPSB0aGlzLmNvcmVVcGRhdGluZygpLFxuXHRcdFx0XHRpc1JlYWwgPSB0aGlzLmNvcmVSZWFsKCk7XG5cblx0XHRcdGlmIChpc0NoZWNraW5nKSB7XG5cdFx0XHRcdHR5cGUgPSAnY2hlY2tpbmcnO1xuXHRcdFx0fSBlbHNlIGlmIChpc1VwZGF0aW5nKSB7XG5cdFx0XHRcdHR5cGUgPSAndXBkYXRpbmcnO1xuXHRcdFx0fSBlbHNlIGlmIChpc1JlYWwgJiYgMCA9PT0gdmVyc2lvblRvQ29tcGFyZSkge1xuXHRcdFx0XHR0eXBlID0gJ3VwLXRvLWRhdGUnO1xuXHRcdFx0fSBlbHNlIGlmIChpc1JlYWwgJiYgLTEgPT09IHZlcnNpb25Ub0NvbXBhcmUpIHtcblx0XHRcdFx0dHlwZSA9ICdhdmFpbGFibGUnO1xuXHRcdFx0fSBlbHNlIGlmICghaXNSZWFsKSB7XG5cdFx0XHRcdHR5cGUgPSAnZXJyb3InO1xuXHRcdFx0XHR0aGlzLmVycm9yRGVzYygnQ2Fubm90IGFjY2VzcyB0aGUgcmVwb3NpdG9yeSBhdCB0aGUgbW9tZW50LicpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHlwZTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0aWYgKHRoaXMuYWNjZXNzKCkgJiYgIXRoaXMuY29tbXVuaXR5KSB7XG5cdFx0XHRnZXRBcHAoKS5yZWxvYWRDb3JlRGF0YSgpO1xuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZUNvcmVEYXRhKCkge1xuXHRcdGlmICghdGhpcy5jb3JlVXBkYXRpbmcoKSAmJiAhdGhpcy5jb21tdW5pdHkpIHtcblx0XHRcdGdldEFwcCgpLnVwZGF0ZUNvcmVEYXRhKCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEFib3V0QWRtaW5TZXR0aW5ncywgQWJvdXRBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBsZWZ0UGFuZWxEaXNhYmxlZCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHsgdmlldywgVmlld1R5cGUsIHNldHRpbmdzTWVudUtleXNIYW5kbGVyIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L0FkbWluL1NldHRpbmdzL01lbnUnLFxuXHR0eXBlOiBWaWV3VHlwZS5MZWZ0LFxuXHR0ZW1wbGF0ZUlEOiAnQWRtaW5NZW51J1xufSlcbmNsYXNzIE1lbnVTZXR0aW5nc0FkbWluVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHQvKipcblx0ICogQHBhcmFtIHs/fSBzY3JlZW5cblx0ICovXG5cdGNvbnN0cnVjdG9yKHNjcmVlbikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmxlZnRQYW5lbERpc2FibGVkID0gbGVmdFBhbmVsRGlzYWJsZWQ7XG5cblx0XHR0aGlzLm1lbnUgPSBzY3JlZW4ubWVudTtcblx0fVxuXG5cdGxpbmsocm91dGUpIHtcblx0XHRyZXR1cm4gJyMvJyArIHJvdXRlO1xuXHR9XG5cblx0b25CdWlsZChkb20pIHtcblx0XHRrZXkoJ3VwLCBkb3duJywgS2V5U3RhdGUuU2V0dGluZ3MsIHNldHRpbmdzTWVudUtleXNIYW5kbGVyKCQoJy5iLWFkbWluLW1lbnUgLmUtaXRlbScsIGRvbSkpKTtcblx0fVxufVxuXG5leHBvcnQgeyBNZW51U2V0dGluZ3NBZG1pblZpZXcsIE1lbnVTZXR0aW5nc0FkbWluVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCBEb21haW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vRG9tYWluJztcbmltcG9ydCBQbHVnaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGx1Z2luJztcbmltcG9ydCBQYWNrYWdlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BhY2thZ2UnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHZpZXcsIFZpZXdUeXBlIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L0FkbWluL1NldHRpbmdzL1BhbmUnLFxuXHR0eXBlOiBWaWV3VHlwZS5SaWdodCxcblx0dGVtcGxhdGVJRDogJ0FkbWluUGFuZSdcbn0pXG5jbGFzcyBQYW5lU2V0dGluZ3NBZG1pblZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuYWRtaW5Eb21haW4gPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdBZG1pbkRvbWFpbicpKTtcblx0XHR0aGlzLnZlcnNpb24gPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd2ZXJzaW9uJykpO1xuXG5cdFx0dGhpcy5jYXBhID0gISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnUHJlbVR5cGUnKTtcblx0XHR0aGlzLmNvbW11bml0eSA9IFJMX0NPTU1VTklUWTtcblxuXHRcdHRoaXMuYWRtaW5NYW5Mb2FkaW5nID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHQnMDAwJyAhPT1cblx0XHRcdFx0W1xuXHRcdFx0XHRcdERvbWFpblN0b3JlLmRvbWFpbnMubG9hZGluZygpID8gJzEnIDogJzAnLFxuXHRcdFx0XHRcdFBsdWdpblN0b3JlLnBsdWdpbnMubG9hZGluZygpID8gJzEnIDogJzAnLFxuXHRcdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlcy5sb2FkaW5nKCkgPyAnMScgOiAnMCdcblx0XHRcdFx0XS5qb2luKCcnKVxuXHRcdCk7XG5cblx0XHR0aGlzLmFkbWluTWFuTG9hZGluZ1Zpc2liaWxpdHkgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKCgpID0+ICh0aGlzLmFkbWluTWFuTG9hZGluZygpID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpKVxuXHRcdFx0LmV4dGVuZCh7IHJhdGVMaW1pdDogMzAwIH0pO1xuXHR9XG5cblx0bG9nb3V0Q2xpY2soKSB7XG5cdFx0UmVtb3RlLmFkbWluTG9nb3V0KCgpID0+IHtcblx0XHRcdGdldEFwcCgpLmxvZ2luQW5kTG9nb3V0UmVsb2FkKHRydWUsIHRydWUpO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IFBhbmVTZXR0aW5nc0FkbWluVmlldywgUGFuZVNldHRpbmdzQWRtaW5WaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IExvZ2luQWRtaW5WaWV3IH0gZnJvbSAnVmlldy9BZG1pbi9Mb2dpbic7XG5cbmNsYXNzIExvZ2luQWRtaW5TY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNjcmVlbiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdsb2dpbicsIFtMb2dpbkFkbWluVmlld10pO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdGdldEFwcCgpLnNldFdpbmRvd1RpdGxlKCcnKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2dpbkFkbWluU2NyZWVuLCBMb2dpbkFkbWluU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgXyBmcm9tICdfJztcblxuaW1wb3J0IHsgdHJpbSwgdHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7ICR3aW4gfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5pbXBvcnQgeyB2aWV3LCBjb21tYW5kLCBWaWV3VHlwZSwgcm91dGVPZmYgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvQWRtaW4vTG9naW4nLFxuXHR0eXBlOiBWaWV3VHlwZS5DZW50ZXIsXG5cdHRlbXBsYXRlSUQ6ICdBZG1pbkxvZ2luJ1xufSlcbmNsYXNzIExvZ2luQWRtaW5WaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm1vYmlsZSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpO1xuXHRcdHRoaXMubW9iaWxlRGV2aWNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlRGV2aWNlJyk7XG5cblx0XHR0aGlzLmhpZGVTdWJtaXRCdXR0b24gPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdoaWRlU3VibWl0QnV0dG9uJyk7XG5cblx0XHR0aGlzLmxvZ2luID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5sb2dpbkVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3JBbmltYXRpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyAnZmFsc2VUaW1lb3V0JzogNTAwIH0pO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICdmYWxzZVRpbWVvdXQnOiA1MDAgfSk7XG5cblx0XHR0aGlzLmxvZ2luRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZm9ybUhpZGRlbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mb3JtRXJyb3IgPSBrby5jb21wdXRlZCgoKSA9PiB0aGlzLmxvZ2luRXJyb3JBbmltYXRpb24oKSB8fCB0aGlzLnBhc3N3b3JkRXJyb3JBbmltYXRpb24oKSk7XG5cblx0XHR0aGlzLmxvZ2luLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvZ2luRXJyb3IoZmFsc2UpKTtcblxuXHRcdHRoaXMucGFzc3dvcmQuc3Vic2NyaWJlKCgpID0+IHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSkpO1xuXG5cdFx0dGhpcy5sb2dpbkVycm9yLnN1YnNjcmliZSgodikgPT4gdGhpcy5sb2dpbkVycm9yQW5pbWF0aW9uKCEhdikpO1xuXG5cdFx0dGhpcy5wYXNzd29yZEVycm9yLnN1YnNjcmliZSgodikgPT4ge1xuXHRcdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uKCEhdik7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYuc3VibWl0UmVxdWVzdCgpKVxuXHRzdWJtaXRDb21tYW5kKCkge1xuXHRcdHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZSgpO1xuXG5cdFx0dGhpcy5sb2dpbkVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IoZmFsc2UpO1xuXG5cdFx0dGhpcy5sb2dpbkVycm9yKCcnID09PSB0cmltKHRoaXMubG9naW4oKSkpO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvcignJyA9PT0gdHJpbSh0aGlzLnBhc3N3b3JkKCkpKTtcblxuXHRcdGlmICh0aGlzLmxvZ2luRXJyb3IoKSB8fCB0aGlzLnBhc3N3b3JkRXJyb3IoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblx0XHQkd2luLnRyaWdnZXIoJ3JsLnRvb2x0aXBzLmRpYWN0aXZhdGUnKTtcblxuXHRcdFJlbW90ZS5hZG1pbkxvZ2luKFxuXHRcdFx0KHNSZXN1bHQsIG9EYXRhKSA9PiB7XG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXHRcdFx0XHQkd2luLnRyaWdnZXIoJ3JsLnRvb2x0aXBzLmFjdGl2YXRlJyk7XG5cblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEgJiYgJ0FkbWluTG9naW4nID09PSBvRGF0YS5BY3Rpb24pIHtcblx0XHRcdFx0XHRpZiAob0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5sb2dpbkFuZExvZ291dFJlbG9hZCh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9EYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKG9EYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMubG9naW4oKSxcblx0XHRcdHRoaXMucGFzc3dvcmQoKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHRyb3V0ZU9mZigpO1xuXG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR0aGlzLmxvZ2luRm9jdXModHJ1ZSk7XG5cdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5sb2dpbkZvY3VzKGZhbHNlKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0dHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKHRydWUpO1xuXHR9XG5cblx0c3VibWl0Rm9ybSgpIHtcblx0XHR0aGlzLnN1Ym1pdENvbW1hbmQoKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2dpbkFkbWluVmlldywgTG9naW5BZG1pblZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGJvb3RzdHJhcCBmcm9tICdib290c3RyYXAnO1xuaW1wb3J0IEFwcCBmcm9tICdBcHAvQWRtaW4nO1xuXG5ib290c3RyYXAoQXBwKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IERvbWFpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Eb21haW4nO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvRG9tYWluQWxpYXMnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzRG9tYWluQWxpYXMnXG59KVxuY2xhc3MgRG9tYWluQWxpYXNQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuc2F2aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZpbmdFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5uYW1lLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWxpYXMgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZG9tYWlucyA9IERvbWFpblN0b3JlLmRvbWFpbnNXaXRob3V0QWxpYXNlcztcblxuXHRcdHRoaXMuZG9tYWluc09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5tYXAodGhpcy5kb21haW5zKCksIChpdGVtKSA9PiAoeyBvcHRWYWx1ZTogaXRlbS5uYW1lLCBvcHRUZXh0OiBpdGVtLm5hbWUgfSkpXG5cdFx0KTtcblxuXHRcdHRoaXMuY2FuQmVTYXZlZCA9IGtvLmNvbXB1dGVkKCgpID0+ICF0aGlzLnNhdmluZygpICYmICcnICE9PSB0aGlzLm5hbWUoKSAmJiAnJyAhPT0gdGhpcy5hbGlhcygpKTtcblxuXHRcdHRoaXMub25Eb21haW5BbGlhc0NyZWF0ZU9yU2F2ZVJlc3BvbnNlID0gXy5iaW5kKHRoaXMub25Eb21haW5BbGlhc0NyZWF0ZU9yU2F2ZVJlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmNhbkJlU2F2ZWQoKSlcblx0Y3JlYXRlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnNhdmluZyh0cnVlKTtcblx0XHRSZW1vdGUuY3JlYXRlRG9tYWluQWxpYXModGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMubmFtZSgpLCB0aGlzLmFsaWFzKCkpO1xuXHR9XG5cblx0b25Eb21haW5BbGlhc0NyZWF0ZU9yU2F2ZVJlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEpIHtcblx0XHRcdGlmIChkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWREb21haW5MaXN0KCk7XG5cdFx0XHRcdHRoaXMuY2xvc2VDb21tYW5kKCk7XG5cdFx0XHR9IGVsc2UgaWYgKE5vdGlmaWNhdGlvbi5Eb21haW5BbHJlYWR5RXhpc3RzID09PSBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHR0aGlzLnNhdmluZ0Vycm9yKGkxOG4oJ0VSUk9SUy9ET01BSU5fQUxSRUFEWV9FWElTVFMnKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2F2aW5nRXJyb3IoaTE4bignRVJST1JTL1VOS05PV05fRVJST1InKSk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMuY2xlYXJGb3JtKCk7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKCcnID09PSB0aGlzLm5hbWUoKSAmJiAhYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5uYW1lLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJGb3JtKCkge1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZ0Vycm9yKCcnKTtcblxuXHRcdHRoaXMubmFtZSgnJyk7XG5cdFx0dGhpcy5uYW1lLmZvY3VzZWQoZmFsc2UpO1xuXG5cdFx0dGhpcy5hbGlhcygnJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgRG9tYWluQWxpYXNQb3B1cFZpZXcsIERvbWFpbkFsaWFzUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgS2V5U3RhdGUsIE1hZ2ljcywgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpc05vbkVtcHR5QXJyYXksIGRlbGVnYXRlUnVuIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiwgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kLCBpc1BvcHVwVmlzaWJsZSwgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9QbHVnaW4nLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzUGx1Z2luJ1xufSlcbmNsYXNzIFBsdWdpblBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5vblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UsIHRoaXMpO1xuXG5cdFx0dGhpcy5zYXZlRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucmVhZG1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNvbmZpZ3VyZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5oYXNSZWFkbWUgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5yZWFkbWUoKSk7XG5cdFx0dGhpcy5oYXNDb25maWd1cmF0aW9uID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHRoaXMuY29uZmlndXJlcygpLmxlbmd0aCk7XG5cblx0XHR0aGlzLnJlYWRtZVBvcG92ZXJDb25mID0ge1xuXHRcdFx0J3BsYWNlbWVudCc6ICdyaWdodCcsXG5cdFx0XHQndHJpZ2dlcic6ICdob3ZlcicsXG5cdFx0XHQndGl0bGUnOiBpMThuKCdQT1BVUFNfUExVR0lOL1RPT0xUSVBfQUJPVVRfVElUTEUnKSxcblx0XHRcdCdjb250YWluZXInOiAnYm9keScsXG5cdFx0XHQnaHRtbCc6IHRydWUsXG5cdFx0XHQnY29udGVudCc6ICgpID0+IGA8cHJlPiR7dGhpcy5yZWFkbWUoKX08L3ByZT5gXG5cdFx0fTtcblxuXHRcdHRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgPSB0cnVlO1xuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLkFsbDtcblxuXHRcdHRoaXMudHJ5VG9DbG9zZVBvcHVwID0gXy5kZWJvdW5jZShfLmJpbmQodGhpcy50cnlUb0Nsb3NlUG9wdXAsIHRoaXMpLCBNYWdpY3MuVGltZTIwMG1zKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmhhc0NvbmZpZ3VyYXRpb24oKSlcblx0c2F2ZUNvbW1hbmQoKSB7XG5cdFx0Y29uc3QgbGlzdCA9IHt9O1xuXHRcdGxpc3QuTmFtZSA9IHRoaXMubmFtZSgpO1xuXG5cdFx0Xy5lYWNoKHRoaXMuY29uZmlndXJlcygpLCAob0l0ZW0pID0+IHtcblx0XHRcdGxldCB2YWx1ZSA9IG9JdGVtLnZhbHVlKCk7XG5cdFx0XHRpZiAoZmFsc2UgPT09IHZhbHVlIHx8IHRydWUgPT09IHZhbHVlKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPyAnMScgOiAnMCc7XG5cdFx0XHR9XG5cdFx0XHRsaXN0WydfJyArIG9JdGVtLk5hbWVdID0gdmFsdWU7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNhdmVFcnJvcignJyk7XG5cdFx0UmVtb3RlLnBsdWdpblNldHRpbmdzVXBkYXRlKHRoaXMub25QbHVnaW5TZXR0aW5nc1VwZGF0ZVJlc3BvbnNlLCBsaXN0KTtcblx0fVxuXG5cdG9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZShyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNhdmVFcnJvcignJyk7XG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHR0aGlzLnNhdmVFcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uQ2FudFNhdmVQbHVnaW5TZXR0aW5ncykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9uU2hvdyhvUGx1Z2luKSB7XG5cdFx0dGhpcy5uYW1lKCk7XG5cdFx0dGhpcy5yZWFkbWUoKTtcblx0XHR0aGlzLmNvbmZpZ3VyZXMoW10pO1xuXG5cdFx0aWYgKG9QbHVnaW4pIHtcblx0XHRcdHRoaXMubmFtZShvUGx1Z2luLk5hbWUpO1xuXHRcdFx0dGhpcy5yZWFkbWUob1BsdWdpbi5SZWFkbWUpO1xuXG5cdFx0XHRjb25zdCBjb25maWcgPSBvUGx1Z2luLkNvbmZpZztcblx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkoY29uZmlnKSkge1xuXHRcdFx0XHR0aGlzLmNvbmZpZ3VyZXMoXG5cdFx0XHRcdFx0Xy5tYXAoY29uZmlnLCAoaXRlbSkgPT4gKHtcblx0XHRcdFx0XHRcdCd2YWx1ZSc6IGtvLm9ic2VydmFibGUoaXRlbVswXSksXG5cdFx0XHRcdFx0XHQncGxhY2Vob2xkZXInOiBrby5vYnNlcnZhYmxlKGl0ZW1bNl0pLFxuXHRcdFx0XHRcdFx0J05hbWUnOiBpdGVtWzFdLFxuXHRcdFx0XHRcdFx0J1R5cGUnOiBpdGVtWzJdLFxuXHRcdFx0XHRcdFx0J0xhYmVsJzogaXRlbVszXSxcblx0XHRcdFx0XHRcdCdEZWZhdWx0JzogaXRlbVs0XSxcblx0XHRcdFx0XHRcdCdEZXNjJzogaXRlbVs1XVxuXHRcdFx0XHRcdH0pKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRyeVRvQ2xvc2VQb3B1cCgpIHtcblx0XHRjb25zdCBQb3B1cHNBc2tWaWV3TW9kZWwgPSByZXF1aXJlKCdWaWV3L1BvcHVwL0FzaycpO1xuXHRcdGlmICghaXNQb3B1cFZpc2libGUoUG9wdXBzQXNrVmlld01vZGVsKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKFBvcHVwc0Fza1ZpZXdNb2RlbCwgW1xuXHRcdFx0XHRpMThuKCdQT1BVUFNfQVNLL0RFU0NfV0FOVF9DTE9TRV9USElTX1dJTkRPVycpLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMubW9kYWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjYW5jZWxDb21tYW5kJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRdKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGtleSgnZXNjJywgS2V5U3RhdGUuQWxsLCAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHR0aGlzLnRyeVRvQ2xvc2VQb3B1cCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGx1Z2luUG9wdXBWaWV3LCBQbHVnaW5Qb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24sIHRyaW0gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biwgdHJpZ2dlciBhcyB0cmFuc2xhdG9yVHJpZ2dlciB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5cbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEJyYW5kaW5nQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY2FwYSA9IEFwcFN0b3JlLnByZW07XG5cblx0XHR0aGlzLnRpdGxlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVGl0bGUnKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvYWRpbmdEZXNjID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9hZGluZ0Rlc2NyaXB0aW9uJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5mYXZpY29uVXJsID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnRmF2aWNvblVybCcpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9naW5Mb2dvID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5Mb2dvJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5sb2dpbkJhY2tncm91bmQgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2dpbkJhY2tncm91bmQnKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLnVzZXJMb2dvID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckxvZ28nKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLnVzZXJMb2dvTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1VzZXJMb2dvTWVzc2FnZScpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlcklmcmFtZU1lc3NhZ2UgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VySWZyYW1lTWVzc2FnZScpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckxvZ29UaXRsZSA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1VzZXJMb2dvVGl0bGUnKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luRGVzY3JpcHRpb24gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2dpbkRlc2NyaXB0aW9uJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5sb2dpbkNzcyA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luQ3NzJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VyQ3NzID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckNzcycpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMud2VsY29tZVBhZ2VVcmwgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdXZWxjb21lUGFnZVVybCcpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMud2VsY29tZVBhZ2VEaXNwbGF5ID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnV2VsY29tZVBhZ2VEaXNwbGF5JykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy53ZWxjb21lUGFnZURpc3BsYXkub3B0aW9ucyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHR7IG9wdFZhbHVlOiAnbm9uZScsIG9wdFRleHQ6IGkxOG4oJ1RBQl9CUkFORElORy9PUFRJT05fV0VMQ09NRV9QQUdFX0RJU1BMQVlfTk9ORScpIH0sXG5cdFx0XHRcdHsgb3B0VmFsdWU6ICdvbmNlJywgb3B0VGV4dDogaTE4bignVEFCX0JSQU5ESU5HL09QVElPTl9XRUxDT01FX1BBR0VfRElTUExBWV9PTkNFJykgfSxcblx0XHRcdFx0eyBvcHRWYWx1ZTogJ2Fsd2F5cycsIG9wdFRleHQ6IGkxOG4oJ1RBQl9CUkFORElORy9PUFRJT05fV0VMQ09NRV9QQUdFX0RJU1BMQVlfQUxXQVlTJykgfVxuXHRcdFx0XTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZIHx8IEFwcFN0b3JlLmNvbW11bml0eSgpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy50aXRsZS50cmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxvYWRpbmdEZXNjLnRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuZmF2aWNvblVybC50cmlnZ2VyLCB0aGlzKTtcblxuXHRcdFx0dGhpcy50aXRsZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjEsIHtcblx0XHRcdFx0XHQnVGl0bGUnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmxvYWRpbmdEZXNjLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMiwge1xuXHRcdFx0XHRcdCdMb2FkaW5nRGVzY3JpcHRpb24nOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmZhdmljb25Vcmwuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYzLCB7XG5cdFx0XHRcdFx0J0Zhdmljb25VcmwnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQnJhbmRpbmdBZG1pblNldHRpbmdzLCBCcmFuZGluZ0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ== diff --git a/rainloop/app/rainloop/v/1.13.0/static/js/boot.js b/rainloop/app/rainloop/v/1.13.0/static/js/boot.js deleted file mode 100644 index 3caaaadfdf8e6e03f4663298e00c8d2f3e856c47..0000000000000000000000000000000000000000 --- a/rainloop/app/rainloop/v/1.13.0/static/js/boot.js +++ /dev/null @@ -1,8501 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "rainloop/v/0.0.0/static/js/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 486); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */, -/* 1 */, -/* 2 */, -/* 3 */, -/* 4 */ -/*!*************************!*\ - !*** external "window" ***! - \*************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports) { - -module.exports = window; - -/***/ }), -/* 5 */, -/* 6 */, -/* 7 */, -/* 8 */, -/* 9 */, -/* 10 */, -/* 11 */, -/* 12 */, -/* 13 */, -/* 14 */, -/* 15 */, -/* 16 */, -/* 17 */, -/* 18 */, -/* 19 */, -/* 20 */, -/* 21 */, -/* 22 */, -/* 23 */, -/* 24 */, -/* 25 */, -/* 26 */, -/* 27 */, -/* 28 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/global.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {var O = 'object'; -var check = function (it) { - return it && it.Math == Math && it; -}; - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -module.exports = - // eslint-disable-next-line no-undef - check(typeof globalThis == O && globalThis) || - check(typeof window == O && window) || - check(typeof self == O && self) || - check(typeof global == O && global) || - // eslint-disable-next-line no-new-func - Function('return this')(); - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) - -/***/ }), -/* 29 */, -/* 30 */, -/* 31 */, -/* 32 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/well-known-symbol.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var shared = __webpack_require__(/*! ../internals/shared */ 74); -var uid = __webpack_require__(/*! ../internals/uid */ 128); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 180); - -var Symbol = global.Symbol; -var store = shared('wks'); - -module.exports = function (name) { - return store[name] || (store[name] = NATIVE_SYMBOL && Symbol[name] - || (NATIVE_SYMBOL ? Symbol : uid)('Symbol.' + name)); -}; - - -/***/ }), -/* 33 */, -/* 34 */, -/* 35 */, -/* 36 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/an-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -module.exports = function (it) { - if (!isObject(it)) { - throw TypeError(String(it) + ' is not an object'); - } return it; -}; - - -/***/ }), -/* 37 */, -/* 38 */, -/* 39 */ -/*!*************************************************!*\ - !*** ./node_modules/core-js/internals/fails.js ***! - \*************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } -}; - - -/***/ }), -/* 40 */, -/* 41 */, -/* 42 */, -/* 43 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/export.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 90).f; -var hide = __webpack_require__(/*! ../internals/hide */ 45); -var redefine = __webpack_require__(/*! ../internals/redefine */ 54); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 92); -var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 176); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); - -/* - options.target - name of the target object - options.global - target is the global object - options.stat - export as static methods of target - options.proto - export as prototype methods of target - options.real - real prototype method for the `pure` version - options.forced - export even if the native feature is available - options.bind - bind methods to the target, required for the `pure` version - options.wrap - wrap constructors to preventing global pollution, required for the `pure` version - options.unsafe - use the simple assignment of property instead of delete + defineProperty - options.sham - add a flag to not completely full polyfills - options.enumerable - export as enumerable property - options.noTargetGet - prevent calling a getter on target -*/ -module.exports = function (options, source) { - var TARGET = options.target; - var GLOBAL = options.global; - var STATIC = options.stat; - var FORCED, target, key, targetProperty, sourceProperty, descriptor; - if (GLOBAL) { - target = global; - } else if (STATIC) { - target = global[TARGET] || setGlobal(TARGET, {}); - } else { - target = (global[TARGET] || {}).prototype; - } - if (target) for (key in source) { - sourceProperty = source[key]; - if (options.noTargetGet) { - descriptor = getOwnPropertyDescriptor(target, key); - targetProperty = descriptor && descriptor.value; - } else targetProperty = target[key]; - FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); - // contained in target - if (!FORCED && targetProperty !== undefined) { - if (typeof sourceProperty === typeof targetProperty) continue; - copyConstructorProperties(sourceProperty, targetProperty); - } - // add a flag to not completely full polyfills - if (options.sham || (targetProperty && targetProperty.sham)) { - hide(sourceProperty, 'sham', true); - } - // extend global - redefine(target, key, sourceProperty, options); - } -}; - - -/***/ }), -/* 44 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - - -/***/ }), -/* 45 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/hide.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 50); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 59); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 91); - -module.exports = DESCRIPTORS ? function (object, key, value) { - return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), -/* 46 */, -/* 47 */ -/*!***********************************************!*\ - !*** ./node_modules/core-js/internals/has.js ***! - \***********************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; - -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), -/* 48 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/es.regexp.exec.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 43); -var exec = __webpack_require__(/*! ../internals/regexp-exec */ 112); - -$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { - exec: exec -}); - - -/***/ }), -/* 49 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/classof-raw.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), -/* 50 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/descriptors.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 39); - -// Thank's IE8 for his funny defineProperty -module.exports = !fails(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), -/* 51 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/require-object-coercible.js ***! - \********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// `RequireObjectCoercible` abstract operation -// https://tc39.github.io/ecma262/#sec-requireobjectcoercible -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; - - -/***/ }), -/* 52 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/modules/es.function.name.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 50); -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 59).f; - -var FunctionPrototype = Function.prototype; -var FunctionPrototypeToString = FunctionPrototype.toString; -var nameRE = /^\s*function ([^ (]*)/; -var NAME = 'name'; - -// Function instances `.name` property -// https://tc39.github.io/ecma262/#sec-function-instances-name -if (DESCRIPTORS && !(NAME in FunctionPrototype)) { - defineProperty(FunctionPrototype, NAME, { - configurable: true, - get: function () { - try { - return FunctionPrototypeToString.call(this).match(nameRE)[1]; - } catch (error) { - return ''; - } - } - }); -} - - -/***/ }), -/* 53 */, -/* 54 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/redefine.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var shared = __webpack_require__(/*! ../internals/shared */ 74); -var hide = __webpack_require__(/*! ../internals/hide */ 45); -var has = __webpack_require__(/*! ../internals/has */ 47); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 92); -var nativeFunctionToString = __webpack_require__(/*! ../internals/function-to-string */ 127); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 93); - -var getInternalState = InternalStateModule.get; -var enforceInternalState = InternalStateModule.enforce; -var TEMPLATE = String(nativeFunctionToString).split('toString'); - -shared('inspectSource', function (it) { - return nativeFunctionToString.call(it); -}); - -(module.exports = function (O, key, value, options) { - var unsafe = options ? !!options.unsafe : false; - var simple = options ? !!options.enumerable : false; - var noTargetGet = options ? !!options.noTargetGet : false; - if (typeof value == 'function') { - if (typeof key == 'string' && !has(value, 'name')) hide(value, 'name', key); - enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); - } - if (O === global) { - if (simple) O[key] = value; - else setGlobal(key, value); - return; - } else if (!unsafe) { - delete O[key]; - } else if (!noTargetGet && O[key]) { - simple = true; - } - if (simple) O[key] = value; - else hide(O, key, value); -// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative -})(Function.prototype, 'toString', function toString() { - return typeof this == 'function' && getInternalState(this).source || nativeFunctionToString.call(this); -}); - - -/***/ }), -/* 55 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/es.object.to-string.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(/*! ../internals/redefine */ 54); -var toString = __webpack_require__(/*! ../internals/object-to-string */ 181); - -var ObjectPrototype = Object.prototype; - -// `Object.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-object.prototype.tostring -if (toString !== ObjectPrototype.toString) { - redefine(ObjectPrototype, 'toString', toString, { unsafe: true }); -} - - -/***/ }), -/* 56 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/modules/es.string.replace.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 132); -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); -var toObject = __webpack_require__(/*! ../internals/to-object */ 120); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 80); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 51); -var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 150); -var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 133); - -var max = Math.max; -var min = Math.min; -var floor = Math.floor; -var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d\d?|<[^>]*>)/g; -var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d\d?)/g; - -var maybeToString = function (it) { - return it === undefined ? it : String(it); -}; - -// @@replace logic -fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative) { - return [ - // `String.prototype.replace` method - // https://tc39.github.io/ecma262/#sec-string.prototype.replace - function replace(searchValue, replaceValue) { - var O = requireObjectCoercible(this); - var replacer = searchValue == undefined ? undefined : searchValue[REPLACE]; - return replacer !== undefined - ? replacer.call(searchValue, O, replaceValue) - : nativeReplace.call(String(O), searchValue, replaceValue); - }, - // `RegExp.prototype[@@replace]` method - // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace - function (regexp, replaceValue) { - var res = maybeCallNative(nativeReplace, regexp, this, replaceValue); - if (res.done) return res.value; - - var rx = anObject(regexp); - var S = String(this); - - var functionalReplace = typeof replaceValue === 'function'; - if (!functionalReplace) replaceValue = String(replaceValue); - - var global = rx.global; - if (global) { - var fullUnicode = rx.unicode; - rx.lastIndex = 0; - } - var results = []; - while (true) { - var result = regExpExec(rx, S); - if (result === null) break; - - results.push(result); - if (!global) break; - - var matchStr = String(result[0]); - if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); - } - - var accumulatedResult = ''; - var nextSourcePosition = 0; - for (var i = 0; i < results.length; i++) { - result = results[i]; - - var matched = String(result[0]); - var position = max(min(toInteger(result.index), S.length), 0); - var captures = []; - // NOTE: This is equivalent to - // captures = result.slice(1).map(maybeToString) - // but for some reason `nativeSlice.call(result, 1, result.length)` (called in - // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and - // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. - for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); - var namedCaptures = result.groups; - if (functionalReplace) { - var replacerArgs = [matched].concat(captures, position, S); - if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); - var replacement = String(replaceValue.apply(undefined, replacerArgs)); - } else { - replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); - } - if (position >= nextSourcePosition) { - accumulatedResult += S.slice(nextSourcePosition, position) + replacement; - nextSourcePosition = position + matched.length; - } - } - return accumulatedResult + S.slice(nextSourcePosition); - } - ]; - - // https://tc39.github.io/ecma262/#sec-getsubstitution - function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { - var tailPos = position + matched.length; - var m = captures.length; - var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; - if (namedCaptures !== undefined) { - namedCaptures = toObject(namedCaptures); - symbols = SUBSTITUTION_SYMBOLS; - } - return nativeReplace.call(replacement, symbols, function (match, ch) { - var capture; - switch (ch.charAt(0)) { - case '$': return '$'; - case '&': return matched; - case '`': return str.slice(0, position); - case "'": return str.slice(tailPos); - case '<': - capture = namedCaptures[ch.slice(1, -1)]; - break; - default: // \d\d? - var n = +ch; - if (n === 0) return match; - if (n > m) { - var f = floor(n / 10); - if (f === 0) return match; - if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); - return match; - } - capture = captures[n - 1]; - } - return capture === undefined ? '' : capture; - }); - } -}); - - -/***/ }), -/* 57 */, -/* 58 */, -/* 59 */ -/*!******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-define-property.js ***! - \******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 50); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); - -var nativeDefineProperty = Object.defineProperty; - -// `Object.defineProperty` method -// https://tc39.github.io/ecma262/#sec-object.defineproperty -exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return nativeDefineProperty(O, P, Attributes); - } catch (error) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - - -/***/ }), -/* 60 */, -/* 61 */, -/* 62 */, -/* 63 */, -/* 64 */, -/* 65 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/get-built-in.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var path = __webpack_require__(/*! ../internals/path */ 109); -var global = __webpack_require__(/*! ../internals/global */ 28); - -var aFunction = function (variable) { - return typeof variable == 'function' ? variable : undefined; -}; - -module.exports = function (namespace, method) { - return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) - : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; -}; - - -/***/ }), -/* 66 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/a-function.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - if (typeof it != 'function') { - throw TypeError(String(it) + ' is not a function'); - } return it; -}; - - -/***/ }), -/* 67 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/web.timers.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ 43); -var global = __webpack_require__(/*! ../internals/global */ 28); -var userAgent = __webpack_require__(/*! ../internals/user-agent */ 105); - -var slice = [].slice; -var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check - -var wrap = function (scheduler) { - return function (handler, timeout /* , ...arguments */) { - var boundArgs = arguments.length > 2; - var args = boundArgs ? slice.call(arguments, 2) : undefined; - return scheduler(boundArgs ? function () { - // eslint-disable-next-line no-new-func - (typeof handler == 'function' ? handler : Function(handler)).apply(this, args); - } : handler, timeout); - }; -}; - -// ie9- setTimeout & setInterval additional parameters fix -// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers -$({ global: true, bind: true, forced: MSIE }, { - // `setTimeout` method - // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout - setTimeout: wrap(global.setTimeout), - // `setInterval` method - // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval - setInterval: wrap(global.setInterval) -}); - - -/***/ }), -/* 68 */, -/* 69 */, -/* 70 */, -/* 71 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/to-indexed-object.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// toObject with fallback for non-array-like ES3 strings -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 51); - -module.exports = function (it) { - return IndexedObject(requireObjectCoercible(it)); -}; - - -/***/ }), -/* 72 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/to-length.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 80); - -var min = Math.min; - -// `ToLength` abstract operation -// https://tc39.github.io/ecma262/#sec-tolength -module.exports = function (argument) { - return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 -}; - - -/***/ }), -/* 73 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/iterators.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), -/* 74 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/shared.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 92); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 83); - -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || setGlobal(SHARED, {}); - -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: '3.1.3', - mode: IS_PURE ? 'pure' : 'global', - copyright: '© 2019 Denis Pushkarev (zloirock.ru)' -}); - - -/***/ }), -/* 75 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/modules/es.date.to-string.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(/*! ../internals/redefine */ 54); - -var DatePrototype = Date.prototype; -var INVALID_DATE = 'Invalid Date'; -var TO_STRING = 'toString'; -var nativeDateToString = DatePrototype[TO_STRING]; -var getTime = DatePrototype.getTime; - -// `Date.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-date.prototype.tostring -if (new Date(NaN) + '' != INVALID_DATE) { - redefine(DatePrototype, TO_STRING, function toString() { - var value = getTime.call(this); - // eslint-disable-next-line no-self-compare - return value === value ? nativeDateToString.call(this) : INVALID_DATE; - }); -} - - -/***/ }), -/* 76 */, -/* 77 */, -/* 78 */, -/* 79 */, -/* 80 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/to-integer.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var ceil = Math.ceil; -var floor = Math.floor; - -// `ToInteger` abstract operation -// https://tc39.github.io/ecma262/#sec-tointeger -module.exports = function (argument) { - return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); -}; - - -/***/ }), -/* 81 */, -/* 82 */, -/* 83 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/is-pure.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = false; - - -/***/ }), -/* 84 */, -/* 85 */, -/* 86 */, -/* 87 */, -/* 88 */, -/* 89 */, -/* 90 */ -/*!******************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! - \******************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 50); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 161); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 91); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); -var has = __webpack_require__(/*! ../internals/has */ 47); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); - -var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// `Object.getOwnPropertyDescriptor` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor -exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { - O = toIndexedObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return nativeGetOwnPropertyDescriptor(O, P); - } catch (error) { /* empty */ } - if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); -}; - - -/***/ }), -/* 91 */ -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - - -/***/ }), -/* 92 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/set-global.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var hide = __webpack_require__(/*! ../internals/hide */ 45); - -module.exports = function (key, value) { - try { - hide(global, key, value); - } catch (error) { - global[key] = value; - } return value; -}; - - -/***/ }), -/* 93 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/internal-state.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 175); -var global = __webpack_require__(/*! ../internals/global */ 28); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var hide = __webpack_require__(/*! ../internals/hide */ 45); -var objectHas = __webpack_require__(/*! ../internals/has */ 47); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 108); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); - -var WeakMap = global.WeakMap; -var set, get, has; - -var enforce = function (it) { - return has(it) ? get(it) : set(it, {}); -}; - -var getterFor = function (TYPE) { - return function (it) { - var state; - if (!isObject(it) || (state = get(it)).type !== TYPE) { - throw TypeError('Incompatible receiver, ' + TYPE + ' required'); - } return state; - }; -}; - -if (NATIVE_WEAK_MAP) { - var store = new WeakMap(); - var wmget = store.get; - var wmhas = store.has; - var wmset = store.set; - set = function (it, metadata) { - wmset.call(store, it, metadata); - return metadata; - }; - get = function (it) { - return wmget.call(store, it) || {}; - }; - has = function (it) { - return wmhas.call(store, it); - }; -} else { - var STATE = sharedKey('state'); - hiddenKeys[STATE] = true; - set = function (it, metadata) { - hide(it, STATE, metadata); - return metadata; - }; - get = function (it) { - return objectHas(it, STATE) ? it[STATE] : {}; - }; - has = function (it) { - return objectHas(it, STATE); - }; -} - -module.exports = { - set: set, - get: get, - has: has, - enforce: enforce, - getterFor: getterFor -}; - - -/***/ }), -/* 94 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var redefine = __webpack_require__(/*! ../internals/redefine */ 54); -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); -var fails = __webpack_require__(/*! ../internals/fails */ 39); -var flags = __webpack_require__(/*! ../internals/regexp-flags */ 166); - -var TO_STRING = 'toString'; -var RegExpPrototype = RegExp.prototype; -var nativeToString = RegExpPrototype[TO_STRING]; - -var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); -// FF44- RegExp#toString has a wrong name -var INCORRECT_NAME = nativeToString.name != TO_STRING; - -// `RegExp.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring -if (NOT_GENERIC || INCORRECT_NAME) { - redefine(RegExp.prototype, TO_STRING, function toString() { - var R = anObject(this); - var p = String(R.source); - var rf = R.flags; - var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf); - return '/' + p + '/' + f; - }, { unsafe: true }); -} - - -/***/ }), -/* 95 */, -/* 96 */, -/* 97 */, -/* 98 */, -/* 99 */ -/*!************************************!*\ - !*** external "window.progressJs" ***! - \************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports) { - -module.exports = window.progressJs; - -/***/ }), -/* 100 */, -/* 101 */, -/* 102 */ -/*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/document-create-element.js ***! - \*******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -var document = global.document; -// typeof document.createElement is 'object' in old IE -var EXISTS = isObject(document) && isObject(document.createElement); - -module.exports = function (it) { - return EXISTS ? document.createElement(it) : {}; -}; - - -/***/ }), -/* 103 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/hidden-keys.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), -/* 104 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/bind-context.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); - -// optional / simple context binding -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 0: return function () { - return fn.call(that); - }; - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), -/* 105 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/user-agent.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 65); - -module.exports = getBuiltIn('navigator', 'userAgent') || ''; - - -/***/ }), -/* 106 */ -/*!******************************************************************!*\ - !*** ./node_modules/core-js/internals/new-promise-capability.js ***! - \******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); - -var PromiseCapability = function (C) { - var resolve, reject; - this.promise = new C(function ($$resolve, $$reject) { - if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); - resolve = $$resolve; - reject = $$reject; - }); - this.resolve = aFunction(resolve); - this.reject = aFunction(reject); -}; - -// 25.4.1.5 NewPromiseCapability(C) -module.exports.f = function (C) { - return new PromiseCapability(C); -}; - - -/***/ }), -/* 107 */ -/*!*****************************!*\ - !*** ./dev/Common/Jassl.js ***! - \*****************************/ -/*! exports provided: jassl */ -/*! exports used: jassl */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return jassl; }); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 55); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); - - - // let rainloopCaches = window.caches && window.caches.open ? window.caches : null; - -/** - * @param {src} src - * @param {boolean} async = false - * @returns {Promise} - */ - -function jassl(src, async) { - if (async === void 0) { - async = false; - } - - if (!window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise || !window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise.all) { - throw new Error('Promises are not available your environment.'); - } - - if (!src) { - throw new Error('src should not be empty.'); - } - - return new window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise(function (resolve, reject) { - var element = window__WEBPACK_IMPORTED_MODULE_2___default.a.document.createElement('script'); - - element.onload = function () { - resolve(src); - }; - - element.onerror = function () { - reject(new Error(src)); - }; - - element.async = true === async; - element.src = src; - window__WEBPACK_IMPORTED_MODULE_2___default.a.document.body.appendChild(element); - }) - /* .then((s) => { - const found = s && rainloopCaches ? s.match(/rainloop\/v\/([^\/]+)\/static\//) : null; - if (found && found[1]) - { - rainloopCaches.open('rainloop-offline-' + found[1]).then( - (cache) => cache.add(s) - ).catch(() => { - rainloopCaches = null; - }); - } - return s; - })*/ - ; -} - -/***/ }), -/* 108 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/shared-key.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var shared = __webpack_require__(/*! ../internals/shared */ 74); -var uid = __webpack_require__(/*! ../internals/uid */ 128); - -var keys = shared('keys'); - -module.exports = function (key) { - return keys[key] || (keys[key] = uid(key)); -}; - - -/***/ }), -/* 109 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/path.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! ../internals/global */ 28); - - -/***/ }), -/* 110 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// IE8- don't enum bug keys -module.exports = [ - 'constructor', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'toLocaleString', - 'toString', - 'valueOf' -]; - - -/***/ }), -/* 111 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 59).f; -var has = __webpack_require__(/*! ../internals/has */ 47); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); - -module.exports = function (it, TAG, STATIC) { - if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { - defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); - } -}; - - -/***/ }), -/* 112 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/regexp-exec.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var regexpFlags = __webpack_require__(/*! ./regexp-flags */ 166); - -var nativeExec = RegExp.prototype.exec; -// This always refers to the native implementation, because the -// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, -// which loads this file before patching the method. -var nativeReplace = String.prototype.replace; - -var patchedExec = nativeExec; - -var UPDATES_LAST_INDEX_WRONG = (function () { - var re1 = /a/; - var re2 = /b*/g; - nativeExec.call(re1, 'a'); - nativeExec.call(re2, 'a'); - return re1.lastIndex !== 0 || re2.lastIndex !== 0; -})(); - -// nonparticipating capturing group, copied from es5-shim's String#split patch. -var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; - -var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED; - -if (PATCH) { - patchedExec = function exec(str) { - var re = this; - var lastIndex, reCopy, match, i; - - if (NPCG_INCLUDED) { - reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re)); - } - if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; - - match = nativeExec.call(re, str); - - if (UPDATES_LAST_INDEX_WRONG && match) { - re.lastIndex = re.global ? match.index + match[0].length : lastIndex; - } - if (NPCG_INCLUDED && match && match.length > 1) { - // Fix browsers whose `exec` methods don't consistently return `undefined` - // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ - nativeReplace.call(match[0], reCopy, function () { - for (i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === undefined) match[i] = undefined; - } - }); - } - - return match; - }; -} - -module.exports = patchedExec; - - -/***/ }), -/* 113 */, -/* 114 */, -/* 115 */, -/* 116 */, -/* 117 */, -/* 118 */, -/* 119 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/indexed-object.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 39); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); - -var split = ''.split; - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -module.exports = fails(function () { - // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 - // eslint-disable-next-line no-prototype-builtins - return !Object('z').propertyIsEnumerable(0); -}) ? function (it) { - return classof(it) == 'String' ? split.call(it, '') : Object(it); -} : Object; - - -/***/ }), -/* 120 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/to-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 51); - -// `ToObject` abstract operation -// https://tc39.github.io/ecma262/#sec-toobject -module.exports = function (argument) { - return Object(requireObjectCoercible(argument)); -}; - - -/***/ }), -/* 121 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/es.promise.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 43); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 83); -var global = __webpack_require__(/*! ../internals/global */ 28); -var path = __webpack_require__(/*! ../internals/path */ 109); -var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 184); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 111); -var setSpecies = __webpack_require__(/*! ../internals/set-species */ 185); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var anInstance = __webpack_require__(/*! ../internals/an-instance */ 186); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); -var iterate = __webpack_require__(/*! ../internals/iterate */ 141); -var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 190); -var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 142); -var task = __webpack_require__(/*! ../internals/task */ 131).set; -var microtask = __webpack_require__(/*! ../internals/microtask */ 191); -var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 165); -var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 192); -var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 106); -var perform = __webpack_require__(/*! ../internals/perform */ 143); -var userAgent = __webpack_require__(/*! ../internals/user-agent */ 105); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 93); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var SPECIES = wellKnownSymbol('species'); -var PROMISE = 'Promise'; -var getInternalState = InternalStateModule.get; -var setInternalState = InternalStateModule.set; -var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); -var PromiseConstructor = global[PROMISE]; -var TypeError = global.TypeError; -var document = global.document; -var process = global.process; -var $fetch = global.fetch; -var versions = process && process.versions; -var v8 = versions && versions.v8 || ''; -var newPromiseCapability = newPromiseCapabilityModule.f; -var newGenericPromiseCapability = newPromiseCapability; -var IS_NODE = classof(process) == 'process'; -var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); -var UNHANDLED_REJECTION = 'unhandledrejection'; -var REJECTION_HANDLED = 'rejectionhandled'; -var PENDING = 0; -var FULFILLED = 1; -var REJECTED = 2; -var HANDLED = 1; -var UNHANDLED = 2; -var Internal, OwnPromiseCapability, PromiseWrapper; - -var FORCED = isForced(PROMISE, function () { - // correct subclassing with @@species support - var promise = PromiseConstructor.resolve(1); - var empty = function () { /* empty */ }; - var FakePromise = (promise.constructor = {})[SPECIES] = function (exec) { - exec(empty, empty); - }; - // unhandled rejections tracking support, NodeJS Promise without it fails @@species test - return !((IS_NODE || typeof PromiseRejectionEvent == 'function') - && (!IS_PURE || promise['finally']) - && promise.then(empty) instanceof FakePromise - // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables - // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 - // we can't detect it synchronously, so just check versions - && v8.indexOf('6.6') !== 0 - && userAgent.indexOf('Chrome/66') === -1); -}); - -var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { - PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); -}); - -// helpers -var isThenable = function (it) { - var then; - return isObject(it) && typeof (then = it.then) == 'function' ? then : false; -}; - -var notify = function (promise, state, isReject) { - if (state.notified) return; - state.notified = true; - var chain = state.reactions; - microtask(function () { - var value = state.value; - var ok = state.state == FULFILLED; - var index = 0; - // variable length - can't use forEach - while (chain.length > index) { - var reaction = chain[index++]; - var handler = ok ? reaction.ok : reaction.fail; - var resolve = reaction.resolve; - var reject = reaction.reject; - var domain = reaction.domain; - var result, then, exited; - try { - if (handler) { - if (!ok) { - if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state); - state.rejection = HANDLED; - } - if (handler === true) result = value; - else { - if (domain) domain.enter(); - result = handler(value); // can throw - if (domain) { - domain.exit(); - exited = true; - } - } - if (result === reaction.promise) { - reject(TypeError('Promise-chain cycle')); - } else if (then = isThenable(result)) { - then.call(result, resolve, reject); - } else resolve(result); - } else reject(value); - } catch (error) { - if (domain && !exited) domain.exit(); - reject(error); - } - } - state.reactions = []; - state.notified = false; - if (isReject && !state.rejection) onUnhandled(promise, state); - }); -}; - -var dispatchEvent = function (name, promise, reason) { - var event, handler; - if (DISPATCH_EVENT) { - event = document.createEvent('Event'); - event.promise = promise; - event.reason = reason; - event.initEvent(name, false, true); - global.dispatchEvent(event); - } else event = { promise: promise, reason: reason }; - if (handler = global['on' + name]) handler(event); - else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); -}; - -var onUnhandled = function (promise, state) { - task.call(global, function () { - var value = state.value; - var IS_UNHANDLED = isUnhandled(state); - var result; - if (IS_UNHANDLED) { - result = perform(function () { - if (IS_NODE) { - process.emit('unhandledRejection', value, promise); - } else dispatchEvent(UNHANDLED_REJECTION, promise, value); - }); - // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should - state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; - if (result.error) throw result.value; - } - }); -}; - -var isUnhandled = function (state) { - return state.rejection !== HANDLED && !state.parent; -}; - -var onHandleUnhandled = function (promise, state) { - task.call(global, function () { - if (IS_NODE) { - process.emit('rejectionHandled', promise); - } else dispatchEvent(REJECTION_HANDLED, promise, state.value); - }); -}; - -var bind = function (fn, promise, state, unwrap) { - return function (value) { - fn(promise, state, value, unwrap); - }; -}; - -var internalReject = function (promise, state, value, unwrap) { - if (state.done) return; - state.done = true; - if (unwrap) state = unwrap; - state.value = value; - state.state = REJECTED; - notify(promise, state, true); -}; - -var internalResolve = function (promise, state, value, unwrap) { - if (state.done) return; - state.done = true; - if (unwrap) state = unwrap; - try { - if (promise === value) throw TypeError("Promise can't be resolved itself"); - var then = isThenable(value); - if (then) { - microtask(function () { - var wrapper = { done: false }; - try { - then.call(value, - bind(internalResolve, promise, wrapper, state), - bind(internalReject, promise, wrapper, state) - ); - } catch (error) { - internalReject(promise, wrapper, error, state); - } - }); - } else { - state.value = value; - state.state = FULFILLED; - notify(promise, state, false); - } - } catch (error) { - internalReject(promise, { done: false }, error, state); - } -}; - -// constructor polyfill -if (FORCED) { - // 25.4.3.1 Promise(executor) - PromiseConstructor = function Promise(executor) { - anInstance(this, PromiseConstructor, PROMISE); - aFunction(executor); - Internal.call(this); - var state = getInternalState(this); - try { - executor(bind(internalResolve, this, state), bind(internalReject, this, state)); - } catch (error) { - internalReject(this, state, error); - } - }; - // eslint-disable-next-line no-unused-vars - Internal = function Promise(executor) { - setInternalState(this, { - type: PROMISE, - done: false, - notified: false, - parent: false, - reactions: [], - rejection: false, - state: PENDING, - value: undefined - }); - }; - Internal.prototype = redefineAll(PromiseConstructor.prototype, { - // `Promise.prototype.then` method - // https://tc39.github.io/ecma262/#sec-promise.prototype.then - then: function then(onFulfilled, onRejected) { - var state = getInternalPromiseState(this); - var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); - reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; - reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = IS_NODE ? process.domain : undefined; - state.parent = true; - state.reactions.push(reaction); - if (state.state != PENDING) notify(this, state, false); - return reaction.promise; - }, - // `Promise.prototype.catch` method - // https://tc39.github.io/ecma262/#sec-promise.prototype.catch - 'catch': function (onRejected) { - return this.then(undefined, onRejected); - } - }); - OwnPromiseCapability = function () { - var promise = new Internal(); - var state = getInternalState(promise); - this.promise = promise; - this.resolve = bind(internalResolve, promise, state); - this.reject = bind(internalReject, promise, state); - }; - newPromiseCapabilityModule.f = newPromiseCapability = function (C) { - return C === PromiseConstructor || C === PromiseWrapper - ? new OwnPromiseCapability(C) - : newGenericPromiseCapability(C); - }; - - // wrap fetch result - if (!IS_PURE && typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { - // eslint-disable-next-line no-unused-vars - fetch: function fetch(input) { - return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); - } - }); -} - -$({ global: true, wrap: true, forced: FORCED }, { - Promise: PromiseConstructor -}); - -setToStringTag(PromiseConstructor, PROMISE, false, true); -setSpecies(PROMISE); - -PromiseWrapper = path[PROMISE]; - -// statics -$({ target: PROMISE, stat: true, forced: FORCED }, { - // `Promise.reject` method - // https://tc39.github.io/ecma262/#sec-promise.reject - reject: function reject(r) { - var capability = newPromiseCapability(this); - capability.reject.call(undefined, r); - return capability.promise; - } -}); - -$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { - // `Promise.resolve` method - // https://tc39.github.io/ecma262/#sec-promise.resolve - resolve: function resolve(x) { - return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); - } -}); - -$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { - // `Promise.all` method - // https://tc39.github.io/ecma262/#sec-promise.all - all: function all(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var resolve = capability.resolve; - var reject = capability.reject; - var result = perform(function () { - var $promiseResolve = aFunction(C.resolve); - var values = []; - var counter = 0; - var remaining = 1; - iterate(iterable, function (promise) { - var index = counter++; - var alreadyCalled = false; - values.push(undefined); - remaining++; - $promiseResolve.call(C, promise).then(function (value) { - if (alreadyCalled) return; - alreadyCalled = true; - values[index] = value; - --remaining || resolve(values); - }, reject); - }); - --remaining || resolve(values); - }); - if (result.error) reject(result.value); - return capability.promise; - }, - // `Promise.race` method - // https://tc39.github.io/ecma262/#sec-promise.race - race: function race(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var reject = capability.reject; - var result = perform(function () { - var $promiseResolve = aFunction(C.resolve); - iterate(iterable, function (promise) { - $promiseResolve.call(C, promise).then(capability.resolve, reject); - }); - }); - if (result.error) reject(result.value); - return capability.promise; - } -}); - - -/***/ }), -/* 122 */, -/* 123 */, -/* 124 */ -/*!***********************************!*\ - !*** (webpack)/buildin/global.js ***! - \***********************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || new Function("return this")(); -} catch (e) { - // This works if the window reference is available - if (typeof window === "object") g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), -/* 125 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/to-primitive.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -// `ToPrimitive` abstract operation -// https://tc39.github.io/ecma262/#sec-toprimitive -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (input, PREFERRED_STRING) { - if (!isObject(input)) return input; - var fn, val; - if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; - if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - - -/***/ }), -/* 126 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 50); -var fails = __webpack_require__(/*! ../internals/fails */ 39); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 102); - -// Thank's IE8 for his funny defineProperty -module.exports = !DESCRIPTORS && !fails(function () { - return Object.defineProperty(createElement('div'), 'a', { - get: function () { return 7; } - }).a != 7; -}); - - -/***/ }), -/* 127 */ -/*!**************************************************************!*\ - !*** ./node_modules/core-js/internals/function-to-string.js ***! - \**************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var shared = __webpack_require__(/*! ../internals/shared */ 74); - -module.exports = shared('native-function-to-string', Function.toString); - - -/***/ }), -/* 128 */ -/*!***********************************************!*\ - !*** ./node_modules/core-js/internals/uid.js ***! - \***********************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var id = 0; -var postfix = Math.random(); - -module.exports = function (key) { - return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); -}; - - -/***/ }), -/* 129 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-forced.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 39); - -var replacement = /#|\.prototype\./; - -var isForced = function (feature, detection) { - var value = data[normalize(feature)]; - return value == POLYFILL ? true - : value == NATIVE ? false - : typeof detection == 'function' ? fails(detection) - : !!detection; -}; - -var normalize = isForced.normalize = function (string) { - return String(string).replace(replacement, '.').toLowerCase(); -}; - -var data = isForced.data = {}; -var NATIVE = isForced.NATIVE = 'N'; -var POLYFILL = isForced.POLYFILL = 'P'; - -module.exports = isForced; - - -/***/ }), -/* 130 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/classof.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 49); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -// ES3 wrong here -var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (error) { /* empty */ } -}; - -// getting tag from ES6+ `Object.prototype.toString` -module.exports = function (it) { - var O, tag, result; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag - // builtinTag case - : CORRECT_ARGUMENTS ? classofRaw(O) - // ES3 arguments fallback - : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; -}; - - -/***/ }), -/* 131 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/task.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var fails = __webpack_require__(/*! ../internals/fails */ 39); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); -var bind = __webpack_require__(/*! ../internals/bind-context */ 104); -var html = __webpack_require__(/*! ../internals/html */ 140); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 102); - -var location = global.location; -var set = global.setImmediate; -var clear = global.clearImmediate; -var process = global.process; -var MessageChannel = global.MessageChannel; -var Dispatch = global.Dispatch; -var counter = 0; -var queue = {}; -var ONREADYSTATECHANGE = 'onreadystatechange'; -var defer, channel, port; - -var run = function (id) { - // eslint-disable-next-line no-prototype-builtins - if (queue.hasOwnProperty(id)) { - var fn = queue[id]; - delete queue[id]; - fn(); - } -}; - -var runner = function (id) { - return function () { - run(id); - }; -}; - -var listener = function (event) { - run(event.data); -}; - -var post = function (id) { - // old engines have not location.origin - global.postMessage(id + '', location.protocol + '//' + location.host); -}; - -// Node.js 0.9+ & IE10+ has setImmediate, otherwise: -if (!set || !clear) { - set = function setImmediate(fn) { - var args = []; - var i = 1; - while (arguments.length > i) args.push(arguments[i++]); - queue[++counter] = function () { - // eslint-disable-next-line no-new-func - (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); - }; - defer(counter); - return counter; - }; - clear = function clearImmediate(id) { - delete queue[id]; - }; - // Node.js 0.8- - if (classof(process) == 'process') { - defer = function (id) { - process.nextTick(runner(id)); - }; - // Sphere (JS game engine) Dispatch API - } else if (Dispatch && Dispatch.now) { - defer = function (id) { - Dispatch.now(runner(id)); - }; - // Browsers with MessageChannel, includes WebWorkers - } else if (MessageChannel) { - channel = new MessageChannel(); - port = channel.port2; - channel.port1.onmessage = listener; - defer = bind(port.postMessage, port, 1); - // Browsers with postMessage, skip WebWorkers - // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' - } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && !fails(post)) { - defer = post; - global.addEventListener('message', listener, false); - // IE8- - } else if (ONREADYSTATECHANGE in createElement('script')) { - defer = function (id) { - html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { - html.removeChild(this); - run(id); - }; - }; - // Rest old browsers - } else { - defer = function (id) { - setTimeout(runner(id), 0); - }; - } -} - -module.exports = { - set: set, - clear: clear -}; - - -/***/ }), -/* 132 */ -/*!******************************************************************************!*\ - !*** ./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js ***! - \******************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var hide = __webpack_require__(/*! ../internals/hide */ 45); -var redefine = __webpack_require__(/*! ../internals/redefine */ 54); -var fails = __webpack_require__(/*! ../internals/fails */ 39); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 112); - -var SPECIES = wellKnownSymbol('species'); - -var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { - // #replace needs built-in support for named groups. - // #match works fine because it just return the exec results, even if it has - // a "grops" property. - var re = /./; - re.exec = function () { - var result = []; - result.groups = { a: '7' }; - return result; - }; - return ''.replace(re, '$') !== '7'; -}); - -// Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec -// Weex JS has frozen built-in prototypes, so use try / catch wrapper -var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () { - var re = /(?:)/; - var originalExec = re.exec; - re.exec = function () { return originalExec.apply(this, arguments); }; - var result = 'ab'.split(re); - return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; -}); - -module.exports = function (KEY, length, exec, sham) { - var SYMBOL = wellKnownSymbol(KEY); - - var DELEGATES_TO_SYMBOL = !fails(function () { - // String methods call symbol-named RegEp methods - var O = {}; - O[SYMBOL] = function () { return 7; }; - return ''[KEY](O) != 7; - }); - - var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { - // Symbol-named RegExp methods call .exec - var execCalled = false; - var re = /a/; - re.exec = function () { execCalled = true; return null; }; - - if (KEY === 'split') { - // RegExp[@@split] doesn't call the regex's exec method, but first creates - // a new one. We need to return the patched regex when creating the new one. - re.constructor = {}; - re.constructor[SPECIES] = function () { return re; }; - } - - re[SYMBOL](''); - return !execCalled; - }); - - if ( - !DELEGATES_TO_SYMBOL || - !DELEGATES_TO_EXEC || - (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) || - (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) - ) { - var nativeRegExpMethod = /./[SYMBOL]; - var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { - if (regexp.exec === regexpExec) { - if (DELEGATES_TO_SYMBOL && !forceStringMethod) { - // The native String method already delegates to @@method (this - // polyfilled function), leasing to infinite recursion. - // We avoid it by directly calling the native @@method method. - return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; - } - return { done: true, value: nativeMethod.call(str, regexp, arg2) }; - } - return { done: false }; - }); - var stringMethod = methods[0]; - var regexMethod = methods[1]; - - redefine(String.prototype, KEY, stringMethod); - redefine(RegExp.prototype, SYMBOL, length == 2 - // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) - // 21.2.5.11 RegExp.prototype[@@split](string, limit) - ? function (string, arg) { return regexMethod.call(string, this, arg); } - // 21.2.5.6 RegExp.prototype[@@match](string) - // 21.2.5.9 RegExp.prototype[@@search](string) - : function (string) { return regexMethod.call(string, this); } - ); - if (sham) hide(RegExp.prototype[SYMBOL], 'sham', true); - } -}; - - -/***/ }), -/* 133 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/regexp-exec-abstract.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ./classof-raw */ 49); -var regexpExec = __webpack_require__(/*! ./regexp-exec */ 112); - -// `RegExpExec` abstract operation -// https://tc39.github.io/ecma262/#sec-regexpexec -module.exports = function (R, S) { - var exec = R.exec; - if (typeof exec === 'function') { - var result = exec.call(R, S); - if (typeof result !== 'object') { - throw TypeError('RegExp exec method returned something other than an Object or null'); - } - return result; - } - - if (classof(R) !== 'RegExp') { - throw TypeError('RegExp#exec called on incompatible receiver'); - } - - return regexpExec.call(R, S); -}; - - - -/***/ }), -/* 134 */, -/* 135 */, -/* 136 */, -/* 137 */, -/* 138 */, -/* 139 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/object-keys-internal.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ../internals/has */ 47); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var indexOf = __webpack_require__(/*! ../internals/array-includes */ 162).indexOf; -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); - -module.exports = function (object, names) { - var O = toIndexedObject(object); - var i = 0; - var result = []; - var key; - for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while (names.length > i) if (has(O, key = names[i++])) { - ~indexOf(result, key) || result.push(key); - } - return result; -}; - - -/***/ }), -/* 140 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/html.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 65); - -module.exports = getBuiltIn('document', 'documentElement'); - - -/***/ }), -/* 141 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/iterate.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); -var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 187); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var bind = __webpack_require__(/*! ../internals/bind-context */ 104); -var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 188); -var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ 189); - -var Result = function (stopped, result) { - this.stopped = stopped; - this.result = result; -}; - -var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { - var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); - var iterator, iterFn, index, length, result, step; - - if (IS_ITERATOR) { - iterator = iterable; - } else { - iterFn = getIteratorMethod(iterable); - if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); - // optimisation for array iterators - if (isArrayIteratorMethod(iterFn)) { - for (index = 0, length = toLength(iterable.length); length > index; index++) { - result = AS_ENTRIES - ? boundFunction(anObject(step = iterable[index])[0], step[1]) - : boundFunction(iterable[index]); - if (result && result instanceof Result) return result; - } return new Result(false); - } - iterator = iterFn.call(iterable); - } - - while (!(step = iterator.next()).done) { - result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); - if (result && result instanceof Result) return result; - } return new Result(false); -}; - -iterate.stop = function (result) { - return new Result(true, result); -}; - - -/***/ }), -/* 142 */ -/*!***************************************************************!*\ - !*** ./node_modules/core-js/internals/species-constructor.js ***! - \***************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var SPECIES = wellKnownSymbol('species'); - -// `SpeciesConstructor` abstract operation -// https://tc39.github.io/ecma262/#sec-speciesconstructor -module.exports = function (O, defaultConstructor) { - var C = anObject(O).constructor; - var S; - return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); -}; - - -/***/ }), -/* 143 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/perform.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return { error: false, value: exec() }; - } catch (error) { - return { error: true, value: error }; - } -}; - - -/***/ }), -/* 144 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/es.parse-int.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ 43); -var parseIntImplementation = __webpack_require__(/*! ../internals/parse-int */ 229); - -// `parseInt` method -// https://tc39.github.io/ecma262/#sec-parseint-string-radix -$({ global: true, forced: parseInt != parseIntImplementation }, { - parseInt: parseIntImplementation -}); - - -/***/ }), -/* 145 */, -/* 146 */ -/*!*********************************!*\ - !*** ./dev/Storage/RainLoop.js ***! - \*********************************/ -/*! exports provided: isStorageSupported, getHash, setHash, clearHash, checkTimestamp */ -/*! exports used: checkTimestamp, clearHash, getHash, isStorageSupported, setHash */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return isStorageSupported; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return getHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return setHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return clearHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return checkTimestamp; }); -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.date.to-string */ 75); -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 52); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 55); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.parse-int */ 144); -/* harmony import */ var core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 94); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_6__); - - - - - - - -var STORAGE_KEY = '__rlA'; -var TIME_KEY = '__rlT'; -/** - * @param {string} storageName - * @returns {boolean} - */ - -function isStorageSupported(storageName) { - var storageIsAvailable = false; - - try { - // at: window[storageName] firefox throws SecurityError: The operation is insecure. when in iframe - storageIsAvailable = storageName in window__WEBPACK_IMPORTED_MODULE_6___default.a && window__WEBPACK_IMPORTED_MODULE_6___default.a[storageName] && window__WEBPACK_IMPORTED_MODULE_6___default.a[storageName].setItem; - } catch (e) {} // eslint-disable-line no-empty - - - if (storageIsAvailable) { - var s = window__WEBPACK_IMPORTED_MODULE_6___default.a[storageName], - key = 'testLocalStorage_' + window__WEBPACK_IMPORTED_MODULE_6___default.a.Math.random(); - - try { - s.setItem(key, key); - - if (key === s.getItem(key)) { - s.removeItem(key); - return true; - } - } catch (e) {} // eslint-disable-line no-empty - - } - - return false; -} -var SESS_STORAGE = isStorageSupported('sessionStorage') ? window__WEBPACK_IMPORTED_MODULE_6___default.a.sessionStorage || null : null; -var WIN_STORAGE = window__WEBPACK_IMPORTED_MODULE_6___default.a.top || window__WEBPACK_IMPORTED_MODULE_6___default.a || null; - -var __get = function __get(key) { - var result = null; - - if (SESS_STORAGE) { - result = SESS_STORAGE.getItem(key) || null; - } else if (WIN_STORAGE && window__WEBPACK_IMPORTED_MODULE_6___default.a.JSON) { - var data = WIN_STORAGE.name && '{' === WIN_STORAGE.name.toString().substr(0, 1) ? window__WEBPACK_IMPORTED_MODULE_6___default.a.JSON.parse(WIN_STORAGE.name.toString()) : null; - result = data ? data[key] || null : null; - } - - return result; -}; - -var __set = function __set(key, value) { - if (SESS_STORAGE) { - SESS_STORAGE.setItem(key, value); - } else if (WIN_STORAGE && window__WEBPACK_IMPORTED_MODULE_6___default.a.JSON) { - var data = WIN_STORAGE.name && '{' === WIN_STORAGE.name.toString().substr(0, 1) ? window__WEBPACK_IMPORTED_MODULE_6___default.a.JSON.parse(WIN_STORAGE.name.toString()) : null; - data = data || {}; - data[key] = value; - WIN_STORAGE.name = window__WEBPACK_IMPORTED_MODULE_6___default.a.JSON.stringify(data); - } -}; - -var timestamp = function timestamp() { - return window__WEBPACK_IMPORTED_MODULE_6___default.a.Math.round(new window__WEBPACK_IMPORTED_MODULE_6___default.a.Date().getTime() / 1000); -}; - -var setTimestamp = function setTimestamp() { - return __set(TIME_KEY, timestamp()); -}; - -var getTimestamp = function getTimestamp() { - var time = __get(TIME_KEY, 0); - - return time ? window__WEBPACK_IMPORTED_MODULE_6___default.a.parseInt(time, 10) || 0 : 0; -}; -/** - * @returns {string} - */ - - -function getHash() { - return __get(STORAGE_KEY); -} -/** - * @returns {void} - */ - -function setHash() { - var key = 'AuthAccountHash', - appData = window__WEBPACK_IMPORTED_MODULE_6___default.a.__rlah_data(); - - __set(STORAGE_KEY, appData && appData[key] ? appData[key] : ''); - - setTimestamp(); -} -/** - * @returns {void} - */ - -function clearHash() { - __set(STORAGE_KEY, ''); - - setTimestamp(); -} -/** - * @returns {boolean} - */ - -function checkTimestamp() { - if (timestamp() > getTimestamp() + 1000 * 60 * 60) { - // 60m - clearHash(); - return true; - } - - return false; -} // init section - -window__WEBPACK_IMPORTED_MODULE_6___default.a.setInterval(setTimestamp, 1000 * 60); // 1m - -/***/ }), -/* 147 */, -/* 148 */, -/* 149 */, -/* 150 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/advance-string-index.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 182).charAt; - -// `AdvanceStringIndex` abstract operation -// https://tc39.github.io/ecma262/#sec-advancestringindex -module.exports = function (S, index, unicode) { - return index + (unicode ? charAt(S, index).length : 1); -}; - - -/***/ }), -/* 151 */, -/* 152 */, -/* 153 */, -/* 154 */, -/* 155 */, -/* 156 */, -/* 157 */, -/* 158 */, -/* 159 */, -/* 160 */, -/* 161 */ -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! - \*************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var nativePropertyIsEnumerable = {}.propertyIsEnumerable; -var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// Nashorn ~ JDK8 bug -var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); - -// `Object.prototype.propertyIsEnumerable` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable -exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { - var descriptor = getOwnPropertyDescriptor(this, V); - return !!descriptor && descriptor.enumerable; -} : nativePropertyIsEnumerable; - - -/***/ }), -/* 162 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/array-includes.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 179); - -// `Array.prototype.{ indexOf, includes }` methods implementation -var createMethod = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIndexedObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare - if (value != value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) { - if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; -}; - -module.exports = { - // `Array.prototype.includes` method - // https://tc39.github.io/ecma262/#sec-array.prototype.includes - includes: createMethod(true), - // `Array.prototype.indexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - indexOf: createMethod(false) -}; - - -/***/ }), -/* 163 */ -/*!***************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! - \***************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -exports.f = Object.getOwnPropertySymbols; - - -/***/ }), -/* 164 */, -/* 165 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/promise-resolve.js ***! - \***********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 106); - -module.exports = function (C, x) { - anObject(C); - if (isObject(x) && x.constructor === C) return x; - var promiseCapability = newPromiseCapability.f(C); - var resolve = promiseCapability.resolve; - resolve(x); - return promiseCapability.promise; -}; - - -/***/ }), -/* 166 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/regexp-flags.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); - -// `RegExp.prototype.flags` getter implementation -// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags -module.exports = function () { - var that = anObject(this); - var result = ''; - if (that.global) result += 'g'; - if (that.ignoreCase) result += 'i'; - if (that.multiline) result += 'm'; - if (that.dotAll) result += 's'; - if (that.unicode) result += 'u'; - if (that.sticky) result += 'y'; - return result; -}; - - -/***/ }), -/* 167 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/whitespaces.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// a string of all valid unicode whitespaces -// eslint-disable-next-line max-len -module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; - - -/***/ }), -/* 168 */, -/* 169 */, -/* 170 */, -/* 171 */, -/* 172 */, -/* 173 */, -/* 174 */, -/* 175 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/native-weak-map.js ***! - \***********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var nativeFunctionToString = __webpack_require__(/*! ../internals/function-to-string */ 127); - -var WeakMap = global.WeakMap; - -module.exports = typeof WeakMap === 'function' && /native code/.test(nativeFunctionToString.call(WeakMap)); - - -/***/ }), -/* 176 */ -/*!***********************************************************************!*\ - !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! - \***********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ../internals/has */ 47); -var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 177); -var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 90); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 59); - -module.exports = function (target, source) { - var keys = ownKeys(source); - var defineProperty = definePropertyModule.f; - var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); - } -}; - - -/***/ }), -/* 177 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/own-keys.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 65); -var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 178); -var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 163); -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); - -// all object keys, includes non-enumerable and symbols -module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { - var keys = getOwnPropertyNamesModule.f(anObject(it)); - var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; - return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; -}; - - -/***/ }), -/* 178 */ -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! - \*************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 139); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 110); - -var hiddenKeys = enumBugKeys.concat('length', 'prototype'); - -// `Object.getOwnPropertyNames` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertynames -exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return internalObjectKeys(O, hiddenKeys); -}; - - -/***/ }), -/* 179 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/to-absolute-index.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 80); - -var max = Math.max; -var min = Math.min; - -// Helper for a popular repeating case of the spec: -// Let integer be ? ToInteger(index). -// If integer < 0, let result be max((length + integer), 0); else let result be min(length, length). -module.exports = function (index, length) { - var integer = toInteger(index); - return integer < 0 ? max(integer + length, 0) : min(integer, length); -}; - - -/***/ }), -/* 180 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/native-symbol.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 39); - -module.exports = !!Object.getOwnPropertySymbols && !fails(function () { - // Chrome 38 Symbol has incorrect toString conversion - // eslint-disable-next-line no-undef - return !String(Symbol()); -}); - - -/***/ }), -/* 181 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/internals/object-to-string.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var classof = __webpack_require__(/*! ../internals/classof */ 130); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var test = {}; - -test[TO_STRING_TAG] = 'z'; - -// `Object.prototype.toString` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.tostring -module.exports = String(test) !== '[object z]' ? function toString() { - return '[object ' + classof(this) + ']'; -} : test.toString; - - -/***/ }), -/* 182 */ -/*!************************************************************!*\ - !*** ./node_modules/core-js/internals/string-multibyte.js ***! - \************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 80); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 51); - -// `String.prototype.{ codePointAt, at }` methods implementation -var createMethod = function (CONVERT_TO_STRING) { - return function ($this, pos) { - var S = String(requireObjectCoercible($this)); - var position = toInteger(pos); - var size = S.length; - var first, second; - if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; - first = S.charCodeAt(position); - return first < 0xD800 || first > 0xDBFF || position + 1 === size - || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF - ? CONVERT_TO_STRING ? S.charAt(position) : first - : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; - }; -}; - -module.exports = { - // `String.prototype.codePointAt` method - // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat - codeAt: createMethod(false), - // `String.prototype.at` method - // https://github.com/mathiasbynens/String.prototype.at - charAt: createMethod(true) -}; - - -/***/ }), -/* 183 */, -/* 184 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/redefine-all.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(/*! ../internals/redefine */ 54); - -module.exports = function (target, src, options) { - for (var key in src) redefine(target, key, src[key], options); - return target; -}; - - -/***/ }), -/* 185 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/set-species.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 65); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 59); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 50); - -var SPECIES = wellKnownSymbol('species'); - -module.exports = function (CONSTRUCTOR_NAME) { - var Constructor = getBuiltIn(CONSTRUCTOR_NAME); - var defineProperty = definePropertyModule.f; - - if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { - defineProperty(Constructor, SPECIES, { - configurable: true, - get: function () { return this; } - }); - } -}; - - -/***/ }), -/* 186 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/an-instance.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it, Constructor, name) { - if (!(it instanceof Constructor)) { - throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); - } return it; -}; - - -/***/ }), -/* 187 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! - \********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); - -var ITERATOR = wellKnownSymbol('iterator'); -var ArrayPrototype = Array.prototype; - -// check on default Array iterator -module.exports = function (it) { - return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); -}; - - -/***/ }), -/* 188 */ -/*!***************************************************************!*\ - !*** ./node_modules/core-js/internals/get-iterator-method.js ***! - \***************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ../internals/classof */ 130); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 73); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var ITERATOR = wellKnownSymbol('iterator'); - -module.exports = function (it) { - if (it != undefined) return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; - - -/***/ }), -/* 189 */ -/*!****************************************************************************!*\ - !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! - \****************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); - -// call something on iterator step with safe closing on error -module.exports = function (iterator, fn, value, ENTRIES) { - try { - return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch (error) { - var returnMethod = iterator['return']; - if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); - throw error; - } -}; - - -/***/ }), -/* 190 */ -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! - \**************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var ITERATOR = wellKnownSymbol('iterator'); -var SAFE_CLOSING = false; - -try { - var called = 0; - var iteratorWithReturn = { - next: function () { - return { done: !!called++ }; - }, - 'return': function () { - SAFE_CLOSING = true; - } - }; - iteratorWithReturn[ITERATOR] = function () { - return this; - }; - // eslint-disable-next-line no-throw-literal - Array.from(iteratorWithReturn, function () { throw 2; }); -} catch (error) { /* empty */ } - -module.exports = function (exec, SKIP_CLOSING) { - if (!SKIP_CLOSING && !SAFE_CLOSING) return false; - var ITERATION_SUPPORT = false; - try { - var object = {}; - object[ITERATOR] = function () { - return { - next: function () { - return { done: ITERATION_SUPPORT = true }; - } - }; - }; - exec(object); - } catch (error) { /* empty */ } - return ITERATION_SUPPORT; -}; - - -/***/ }), -/* 191 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/microtask.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 90).f; -var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); -var macrotask = __webpack_require__(/*! ../internals/task */ 131).set; -var userAgent = __webpack_require__(/*! ../internals/user-agent */ 105); - -var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; -var process = global.process; -var Promise = global.Promise; -var IS_NODE = classof(process) == 'process'; -// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` -var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); -var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; - -var flush, head, last, notify, toggle, node, promise; - -// modern engines have queueMicrotask method -if (!queueMicrotask) { - flush = function () { - var parent, fn; - if (IS_NODE && (parent = process.domain)) parent.exit(); - while (head) { - fn = head.fn; - head = head.next; - try { - fn(); - } catch (error) { - if (head) notify(); - else last = undefined; - throw error; - } - } last = undefined; - if (parent) parent.enter(); - }; - - // Node.js - if (IS_NODE) { - notify = function () { - process.nextTick(flush); - }; - // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 - } else if (MutationObserver && !/(iphone|ipod|ipad).*applewebkit/i.test(userAgent)) { - toggle = true; - node = document.createTextNode(''); - new MutationObserver(flush).observe(node, { characterData: true }); // eslint-disable-line no-new - notify = function () { - node.data = toggle = !toggle; - }; - // environments with maybe non-completely correct, but existent Promise - } else if (Promise && Promise.resolve) { - // Promise.resolve without an argument throws an error in LG WebOS 2 - promise = Promise.resolve(undefined); - notify = function () { - promise.then(flush); - }; - // for other environments - macrotask based on: - // - setImmediate - // - MessageChannel - // - window.postMessag - // - onreadystatechange - // - setTimeout - } else { - notify = function () { - // strange IE + webpack dev server bug - use .call(global) - macrotask.call(global, flush); - }; - } -} - -module.exports = queueMicrotask || function (fn) { - var task = { fn: fn, next: undefined }; - if (last) last.next = task; - if (!head) { - head = task; - notify(); - } last = task; -}; - - -/***/ }), -/* 192 */ -/*!**************************************************************!*\ - !*** ./node_modules/core-js/internals/host-report-errors.js ***! - \**************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); - -module.exports = function (a, b) { - var console = global.console; - if (console && console.error) { - arguments.length === 1 ? console.error(a) : console.error(a, b); - } -}; - - -/***/ }), -/* 193 */, -/* 194 */, -/* 195 */, -/* 196 */, -/* 197 */, -/* 198 */, -/* 199 */, -/* 200 */, -/* 201 */, -/* 202 */, -/* 203 */, -/* 204 */, -/* 205 */, -/* 206 */, -/* 207 */, -/* 208 */, -/* 209 */, -/* 210 */, -/* 211 */, -/* 212 */, -/* 213 */, -/* 214 */, -/* 215 */, -/* 216 */, -/* 217 */, -/* 218 */, -/* 219 */, -/* 220 */, -/* 221 */, -/* 222 */, -/* 223 */, -/* 224 */, -/* 225 */, -/* 226 */, -/* 227 */, -/* 228 */ -/*!*****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js ***! - \*****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// Thank's IE8 for his funny defineProperty -module.exports = !__webpack_require__(/*! ./_fails */ 274)(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), -/* 229 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/parse-int.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var trim = __webpack_require__(/*! ../internals/string-trim */ 230).trim; -var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 167); - -var nativeParseInt = global.parseInt; -var hex = /^[+-]?0[Xx]/; -var FORCED = nativeParseInt(whitespaces + '08') !== 8 || nativeParseInt(whitespaces + '0x16') !== 22; - -// `parseInt` method -// https://tc39.github.io/ecma262/#sec-parseint-string-radix -module.exports = FORCED ? function parseInt(string, radix) { - var S = trim(String(string)); - return nativeParseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10)); -} : nativeParseInt; - - -/***/ }), -/* 230 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/string-trim.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 51); -var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 167); - -var whitespace = '[' + whitespaces + ']'; -var ltrim = RegExp('^' + whitespace + whitespace + '*'); -var rtrim = RegExp(whitespace + whitespace + '*$'); - -// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation -var createMethod = function (TYPE) { - return function ($this) { - var string = String(requireObjectCoercible($this)); - if (TYPE & 1) string = string.replace(ltrim, ''); - if (TYPE & 2) string = string.replace(rtrim, ''); - return string; - }; -}; - -module.exports = { - // `String.prototype.{ trimLeft, trimStart }` methods - // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart - start: createMethod(1), - // `String.prototype.{ trimRight, trimEnd }` methods - // https://tc39.github.io/ecma262/#sec-string.prototype.trimend - end: createMethod(2), - // `String.prototype.trim` method - // https://tc39.github.io/ecma262/#sec-string.prototype.trim - trim: createMethod(3) -}; - - -/***/ }), -/* 231 */, -/* 232 */, -/* 233 */, -/* 234 */, -/* 235 */, -/* 236 */, -/* 237 */, -/* 238 */, -/* 239 */, -/* 240 */, -/* 241 */, -/* 242 */, -/* 243 */, -/* 244 */, -/* 245 */, -/* 246 */, -/* 247 */, -/* 248 */, -/* 249 */, -/* 250 */, -/* 251 */, -/* 252 */, -/* 253 */, -/* 254 */, -/* 255 */, -/* 256 */, -/* 257 */, -/* 258 */, -/* 259 */, -/* 260 */, -/* 261 */, -/* 262 */, -/* 263 */, -/* 264 */ -/*!**********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var core = module.exports = { version: '2.6.3' }; -if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef - - -/***/ }), -/* 265 */, -/* 266 */, -/* 267 */, -/* 268 */, -/* 269 */, -/* 270 */, -/* 271 */, -/* 272 */, -/* 273 */ -/*!***************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js ***! - \***************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - - -/***/ }), -/* 274 */ -/*!***********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js ***! - \***********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (e) { - return true; - } -}; - - -/***/ }), -/* 275 */, -/* 276 */, -/* 277 */, -/* 278 */, -/* 279 */, -/* 280 */, -/* 281 */, -/* 282 */, -/* 283 */, -/* 284 */, -/* 285 */, -/* 286 */, -/* 287 */, -/* 288 */, -/* 289 */, -/* 290 */, -/* 291 */, -/* 292 */, -/* 293 */, -/* 294 */, -/* 295 */, -/* 296 */, -/* 297 */, -/* 298 */, -/* 299 */, -/* 300 */, -/* 301 */, -/* 302 */, -/* 303 */, -/* 304 */, -/* 305 */, -/* 306 */, -/* 307 */, -/* 308 */, -/* 309 */, -/* 310 */, -/* 311 */, -/* 312 */, -/* 313 */, -/* 314 */, -/* 315 */, -/* 316 */, -/* 317 */, -/* 318 */, -/* 319 */, -/* 320 */, -/* 321 */, -/* 322 */, -/* 323 */, -/* 324 */, -/* 325 */, -/* 326 */, -/* 327 */, -/* 328 */, -/* 329 */, -/* 330 */, -/* 331 */, -/* 332 */, -/* 333 */, -/* 334 */, -/* 335 */, -/* 336 */, -/* 337 */, -/* 338 */, -/* 339 */, -/* 340 */, -/* 341 */, -/* 342 */, -/* 343 */, -/* 344 */, -/* 345 */, -/* 346 */, -/* 347 */, -/* 348 */, -/* 349 */, -/* 350 */, -/* 351 */, -/* 352 */, -/* 353 */, -/* 354 */, -/* 355 */, -/* 356 */, -/* 357 */, -/* 358 */, -/* 359 */, -/* 360 */, -/* 361 */, -/* 362 */, -/* 363 */, -/* 364 */, -/* 365 */, -/* 366 */, -/* 367 */, -/* 368 */, -/* 369 */, -/* 370 */, -/* 371 */, -/* 372 */, -/* 373 */, -/* 374 */, -/* 375 */, -/* 376 */, -/* 377 */, -/* 378 */, -/* 379 */, -/* 380 */, -/* 381 */, -/* 382 */, -/* 383 */, -/* 384 */, -/* 385 */, -/* 386 */, -/* 387 */, -/* 388 */ -/*!**********************************************************************************!*\ - !*** ./node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = { "default": __webpack_require__(/*! core-js/library/fn/object/get-own-property-descriptor */ 494), __esModule: true }; - -/***/ }), -/* 389 */, -/* 390 */, -/* 391 */, -/* 392 */, -/* 393 */, -/* 394 */, -/* 395 */ -/*!************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js ***! - \************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ./_global */ 396); -var core = __webpack_require__(/*! ./_core */ 264); -var ctx = __webpack_require__(/*! ./_ctx */ 489); -var hide = __webpack_require__(/*! ./_hide */ 491); -var has = __webpack_require__(/*! ./_has */ 401); -var PROTOTYPE = 'prototype'; - -var $export = function (type, name, source) { - var IS_FORCED = type & $export.F; - var IS_GLOBAL = type & $export.G; - var IS_STATIC = type & $export.S; - var IS_PROTO = type & $export.P; - var IS_BIND = type & $export.B; - var IS_WRAP = type & $export.W; - var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); - var expProto = exports[PROTOTYPE]; - var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; - var key, own, out; - if (IS_GLOBAL) source = name; - for (key in source) { - // contains in native - own = !IS_FORCED && target && target[key] !== undefined; - if (own && has(exports, key)) continue; - // export native or passed - out = own ? target[key] : source[key]; - // prevent global pollution for namespaces - exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] - // bind timers to global for call from export context - : IS_BIND && own ? ctx(out, global) - // wrap global constructors for prevent change them in library - : IS_WRAP && target[key] == out ? (function (C) { - var F = function (a, b, c) { - if (this instanceof C) { - switch (arguments.length) { - case 0: return new C(); - case 1: return new C(a); - case 2: return new C(a, b); - } return new C(a, b, c); - } return C.apply(this, arguments); - }; - F[PROTOTYPE] = C[PROTOTYPE]; - return F; - // make static versions for prototype methods - })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% - if (IS_PROTO) { - (exports.virtual || (exports.virtual = {}))[key] = out; - // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% - if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); - } - } -}; -// type bitmap -$export.F = 1; // forced -$export.G = 2; // global -$export.S = 4; // static -$export.P = 8; // proto -$export.B = 16; // bind -$export.W = 32; // wrap -$export.U = 64; // safe -$export.R = 128; // real proto method for `library` -module.exports = $export; - - -/***/ }), -/* 396 */ -/*!************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js ***! - \************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self - // eslint-disable-next-line no-new-func - : Function('return this')(); -if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef - - -/***/ }), -/* 397 */ -/*!***************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js ***! - \***************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ./_an-object */ 492); -var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ 398); -var toPrimitive = __webpack_require__(/*! ./_to-primitive */ 399); -var dP = Object.defineProperty; - -exports.f = __webpack_require__(/*! ./_descriptors */ 228) ? Object.defineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - - -/***/ }), -/* 398 */ -/*!********************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js ***! - \********************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = !__webpack_require__(/*! ./_descriptors */ 228) && !__webpack_require__(/*! ./_fails */ 274)(function () { - return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ 493)('div'), 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), -/* 399 */ -/*!******************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js ***! - \******************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = __webpack_require__(/*! ./_is-object */ 273); -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (it, S) { - if (!isObject(it)) return it; - var fn, val; - if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; - if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - - -/***/ }), -/* 400 */ -/*!*******************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js ***! - \*******************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - - -/***/ }), -/* 401 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), -/* 402 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = __webpack_require__(/*! ./_iobject */ 496); -var defined = __webpack_require__(/*! ./_defined */ 498); -module.exports = function (it) { - return IObject(defined(it)); -}; - - -/***/ }), -/* 403 */, -/* 404 */, -/* 405 */, -/* 406 */, -/* 407 */, -/* 408 */, -/* 409 */, -/* 410 */ -/*!**************************************************************!*\ - !*** ./node_modules/element-dataset/lib/browser/index.es.js ***! - \**************************************************************/ -/*! exports provided: default */ -/*! exports used: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/core-js/object/define-property */ 411); -/* harmony import */ var babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/core-js/object/get-own-property-descriptor */ 388); -/* harmony import */ var babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__); - -// -// element-dataset 2.2.6 -// -// element-dataset is released under the terms of the BSD-3-Clause license. -// (c) 2015 - 2017 Mark Milstein -// -// For all details and documentation: https://github.com/epiloque/element-dataset -// - - - - -/* eslint-env browser */ - -function elementDatasetPolyfill() { - if (!document.documentElement.dataset && (!babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(HTMLElement.prototype, 'dataset') || !babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(HTMLElement.prototype, 'dataset').get)) { - var descriptor = {}; - - descriptor.enumerable = true; - - descriptor.get = function get() { - var element = this; - var map = {}; - var attributes = this.attributes; - - function toUpperCase(n0) { - return n0.charAt(1).toUpperCase(); - } - - function getter() { - return this.value; - } - - function setter(name, value) { - if (typeof value !== 'undefined') { - this.setAttribute(name, value); - } else { - this.removeAttribute(name); - } - } - - for (var i = 0; i < attributes.length; i += 1) { - var attribute = attributes[i]; - - // This test really should allow any XML Name without - // colons (and non-uppercase for XHTML) - - if (attribute && attribute.name && /^data-\w[\w-]*$/.test(attribute.name)) { - var name = attribute.name; - var value = attribute.value; - - // Change to CamelCase - - var propName = name.substr(5).replace(/-./g, toUpperCase); - - babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default()(map, propName, { - enumerable: descriptor.enumerable, - get: getter.bind({ value: value || '' }), - set: setter.bind(element, name) - }); - } - } - return map; - }; - - Object.defineProperty(HTMLElement.prototype, 'dataset', descriptor); - } -} - -/* harmony default export */ __webpack_exports__["a"] = (elementDatasetPolyfill); - - -/***/ }), -/* 411 */ -/*!**********************************************************************!*\ - !*** ./node_modules/babel-runtime/core-js/object/define-property.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = { "default": __webpack_require__(/*! core-js/library/fn/object/define-property */ 487), __esModule: true }; - -/***/ }), -/* 412 */ -/*!*********************************************!*\ - !*** ./vendors/Progress.js/src/progress.js ***! - \*********************************************/ -/*! no static exports found */ -/*! exports used: progressJs */ -/***/ (function(module, exports, __webpack_require__) { - -/** - * Progress.js v0.1.0 - * https://github.com/usablica/progress.js - * MIT licensed - * - * Copyright (C) 2013 usabli.ca - Afshin Mehrabani (@afshinmeh) - */ - -(function (root, factory) { - if (true) { - // CommonJS - factory(exports); - } else {} -} (this, function (exports) { - //Default config/variables - var VERSION = '0.1.0'; - - /** - * ProgressJs main class - * - * @class ProgressJs - */ - function ProgressJs(obj) { - - if (typeof obj.length != 'undefined') { - this._targetElement = obj; - } else { - this._targetElement = [obj]; - } - - if (typeof window._progressjsId === 'undefined') - window._progressjsId = 1; - - if (typeof window._progressjsIntervals === 'undefined') - window._progressjsIntervals = {}; - - this._options = { - //progress bar theme - theme: 'blue', - //overlay mode makes an overlay layer in the target element - overlayMode: false, - //to consider CSS3 transitions in events - considerTransition: true - }; - } - - /** - * Start progress for specific element(s) - * - * @api private - * @method _createContainer - */ - function _startProgress() { - - //call onBeforeStart callback - if (typeof this._onBeforeStartCallback != 'undefined') { - this._onBeforeStartCallback.call(this); - } - - //create the container for progress bar - _createContainer.call(this); - - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - _setProgress.call(this, this._targetElement[i]); - } - } - - /** - * Set progress bar for specific element - * - * @api private - * @method _setProgress - * @param {Object} targetElement - */ - function _setProgress(targetElement) { - - //if the target element already as `data-progressjs`, ignore the init - if (targetElement.hasAttribute("data-progressjs")) - return; - - //get target element position - var targetElementOffset = _getOffset.call(this, targetElement); - - targetElement.setAttribute("data-progressjs", window._progressjsId); - - var progressElementContainer = document.createElement('div'); - progressElementContainer.className = 'progressjs-progress progressjs-theme-' + this._options.theme; - - - //set the position percent elements, it depends on targetElement tag - if (targetElement.tagName.toLowerCase() === 'body') { - progressElementContainer.style.position = 'fixed'; - } else { - progressElementContainer.style.position = 'absolute'; - } - - progressElementContainer.setAttribute("data-progressjs", window._progressjsId); - var progressElement = document.createElement("div"); - progressElement.className = "progressjs-inner"; - - //create an element for current percent of progress bar - var progressPercentElement = document.createElement('div'); - progressPercentElement.className = "progressjs-percent"; - progressPercentElement.innerHTML = "1%"; - - progressElement.appendChild(progressPercentElement); - - if (this._options.overlayMode && targetElement.tagName.toLowerCase() === 'body') { - //if we have `body` for target element and also overlay mode is enable, we should use a different - //position for progress bar container element - progressElementContainer.style.left = 0; - progressElementContainer.style.right = 0; - progressElementContainer.style.top = 0; - progressElementContainer.style.bottom = 0; - } else { - //set progress bar container size and offset - progressElementContainer.style.left = targetElementOffset.left + 'px'; - progressElementContainer.style.top = targetElementOffset.top + 'px'; - progressElementContainer.style.width = targetElementOffset.width + 'px'; - - if (this._options.overlayMode) { - progressElementContainer.style.height = targetElementOffset.height + 'px'; - } - } - - progressElementContainer.appendChild(progressElement); - - //append the element to container - var container = document.querySelector('.progressjs-container'); - container.appendChild(progressElementContainer); - - _setPercentFor(targetElement, 1); - - //and increase the progressId - ++window._progressjsId; - } - - /** - * Set percent for all elements - * - * @api private - * @method _setPercent - * @param {Number} percent - */ - function _setPercent(percent) { - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - _setPercentFor.call(this, this._targetElement[i], percent); - } - } - - /** - * Set percent for specific element - * - * @api private - * @method _setPercentFor - * @param {Object} targetElement - * @param {Number} percent - */ - function _setPercentFor(targetElement, percent) { - var self = this; - - //prevent overflow! - if (percent >= 100) - percent = 100; - - if (targetElement.hasAttribute("data-progressjs")) { - //setTimeout for better CSS3 animation applying in some cases - setTimeout(function() { - - //call the onprogress callback - if (typeof self._onProgressCallback != 'undefined') { - self._onProgressCallback.call(self, targetElement, percent); - } - - var percentElement = _getPercentElement(targetElement); - percentElement.style.width = parseInt(percent) + '%'; - - var percentElement = percentElement.querySelector(".progressjs-percent"); - var existingPercent = parseInt(percentElement.innerHTML.replace('%', '')); - - //start increase/decrease the percent element with animation - (function(percentElement, existingPercent, currentPercent) { - - var increasement = true; - if (existingPercent > currentPercent) { - increasement = false; - } - - var intervalIn = 10; - function changePercentTimer(percentElement, existingPercent, currentPercent) { - //calculate the distance between two percents - var distance = Math.abs(existingPercent - currentPercent); - if (distance < 3) { - intervalIn = 30; - } else if (distance < 20) { - intervalIn = 20; - } else { - intervanIn = 1; - } - - if ((existingPercent - currentPercent) != 0) { - //set the percent - percentElement.innerHTML = (increasement ? (++existingPercent) : (--existingPercent)) + '%'; - setTimeout(function() { changePercentTimer(percentElement, existingPercent, currentPercent); }, intervalIn); - } - } - - changePercentTimer(percentElement, existingPercent, currentPercent); - - })(percentElement, existingPercent, parseInt(percent)); - - }, 50); - } - } - - /** - * Get the progress bar element - * - * @api private - * @method _getPercentElement - * @param {Object} targetElement - */ - function _getPercentElement(targetElement) { - var progressjsId = parseInt(targetElement.getAttribute('data-progressjs')); - return document.querySelector('.progressjs-container > .progressjs-progress[data-progressjs="' + progressjsId + '"] > .progressjs-inner'); - } - - /** - * Auto increase the progress bar every X milliseconds - * - * @api private - * @method _autoIncrease - * @param {Number} size - * @param {Number} millisecond - */ - function _autoIncrease(size, millisecond) { - var self = this; - - var progressjsId = parseInt(this._targetElement[0].getAttribute('data-progressjs')); - - if (typeof window._progressjsIntervals[progressjsId] != 'undefined') { - clearInterval(window._progressjsIntervals[progressjsId]); - } - window._progressjsIntervals[progressjsId] = setInterval(function() { - _increasePercent.call(self, size); - }, millisecond); - } - - /** - * Increase the size of progress bar - * - * @api private - * @method _increasePercent - * @param {Number} size - */ - function _increasePercent(size) { - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - var currentElement = this._targetElement[i]; - if (currentElement.hasAttribute('data-progressjs')) { - var percentElement = _getPercentElement(currentElement); - var existingPercent = parseInt(percentElement.style.width.replace('%', '')); - if (existingPercent) { - _setPercentFor.call(this, currentElement, existingPercent + (size || 1)); - } - } - } - } - - /** - * Close and remove progress bar - * - * @api private - * @method _end - */ - function _end() { - - //call onBeforeEnd callback - if (typeof this._onBeforeEndCallback != 'undefined') { - if (this._options.considerTransition === true) { - //we can safety assume that all layers would be the same, so `this._targetElement[0]` is the same as `this._targetElement[1]` - _getPercentElement(this._targetElement[0]).addEventListener(whichTransitionEvent(), this._onBeforeEndCallback, false); - } else { - this._onBeforeEndCallback.call(this); - } - } - - var progressjsId = parseInt(this._targetElement[0].getAttribute('data-progressjs')); - - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - var currentElement = this._targetElement[i]; - var percentElement = _getPercentElement(currentElement); - - if (!percentElement) - return; - - var existingPercent = parseInt(percentElement.style.width.replace('%', '')); - - var timeoutSec = 1; - if (existingPercent < 100) { - _setPercentFor.call(this, currentElement, 100); - timeoutSec = 500; - } - - //I believe I should handle this situation with eventListener and `transitionend` event but I'm not sure - //about compatibility with IEs. Should be fixed in further versions. - (function(percentElement, currentElement) { - setTimeout(function() { - percentElement.parentNode.className += " progressjs-end"; - - setTimeout(function() { - //remove the percent element from page - percentElement.parentNode.parentNode.removeChild(percentElement.parentNode); - //and remove the attribute - currentElement.removeAttribute("data-progressjs"); - }, 1000); - }, timeoutSec); - })(percentElement, currentElement); - } - - //clean the setInterval for autoIncrease function - if (window._progressjsIntervals[progressjsId]) { - //`delete` keyword has some problems in IE - try { - clearInterval(window._progressjsIntervals[progressjsId]); - window._progressjsIntervals[progressjsId] = null; - delete window._progressjsIntervals[progressjsId]; - } catch(ex) { } - } - } - - /** - * Create the progress bar container - * - * @api private - * @method _createContainer - */ - function _createContainer() { - //first check if we have an container already, we don't need to create it again - if (!document.querySelector(".progressjs-container")) { - var containerElement = document.createElement("div"); - containerElement.className = "progressjs-container"; - document.body.appendChild(containerElement); - } - } - - /** - * Get an element position on the page - * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966 - * - * @api private - * @method _getOffset - * @param {Object} element - * @returns Element's position info - */ - function _getOffset(element) { - var elementPosition = {}; - - if (element.tagName.toLowerCase() === 'body') { - //set width - elementPosition.width = element.clientWidth; - //set height - elementPosition.height = element.clientHeight; - } else { - //set width - elementPosition.width = element.offsetWidth; - //set height - elementPosition.height = element.offsetHeight; - } - - //calculate element top and left - var _x = 0; - var _y = 0; - while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) { - _x += element.offsetLeft; - _y += element.offsetTop; - element = element.offsetParent; - } - //set top - elementPosition.top = _y; - //set left - elementPosition.left = _x; - - return elementPosition; - } - - /** - * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1 - * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically - * - * @param obj1 - * @param obj2 - * @returns obj3 a new object based on obj1 and obj2 - */ - function _mergeOptions(obj1, obj2) { - var obj3 = {}; - for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; } - for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; } - return obj3; - } - - var progressJs = function (targetElm) { - if (typeof (targetElm) === 'object') { - //Ok, create a new instance - return new ProgressJs(targetElm); - - } else if (typeof (targetElm) === 'string') { - //select the target element with query selector - var targetElement = document.querySelectorAll(targetElm); - - if (targetElement) { - return new ProgressJs(targetElement); - } else { - throw new Error('There is no element with given selector.'); - } - } else { - return new ProgressJs(document.body); - } - }; - - /** - * Get correct transition callback - * Thanks @webinista: http://stackoverflow.com/a/9090128/375966 - * - * @returns transition name - */ - function whichTransitionEvent() { - var t; - var el = document.createElement('fakeelement'); - var transitions = { - 'transition': 'transitionend', - 'OTransition': 'oTransitionEnd', - 'MozTransition': 'transitionend', - 'WebkitTransition': 'webkitTransitionEnd' - } - - for (t in transitions) { - if (el.style[t] !== undefined) { - return transitions[t]; - } - } - } - - /** - * Current ProgressJs version - * - * @property version - * @type String - */ - progressJs.version = VERSION; - - //Prototype - progressJs.fn = ProgressJs.prototype = { - clone: function () { - return new ProgressJs(this); - }, - setOption: function(option, value) { - this._options[option] = value; - return this; - }, - setOptions: function(options) { - this._options = _mergeOptions(this._options, options); - return this; - }, - start: function() { - _startProgress.call(this); - return this; - }, - set: function(percent) { - _setPercent.call(this, percent); - return this; - }, - increase: function(size) { - _increasePercent.call(this, size); - return this; - }, - autoIncrease: function(size, millisecond) { - _autoIncrease.call(this, size, millisecond); - return this; - }, - end: function() { - _end.call(this); - return this; - }, - onbeforeend: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._onBeforeEndCallback = providedCallback; - } else { - throw new Error('Provided callback for onbeforeend was not a function'); - } - return this; - }, - onbeforestart: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._onBeforeStartCallback = providedCallback; - } else { - throw new Error('Provided callback for onbeforestart was not a function'); - } - return this; - }, - onprogress: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._onProgressCallback = providedCallback; - } else { - throw new Error('Provided callback for onprogress was not a function'); - } - return this; - } - }; - - exports.progressJs = progressJs; - return progressJs; -})); - - -/***/ }), -/* 413 */, -/* 414 */, -/* 415 */, -/* 416 */, -/* 417 */, -/* 418 */, -/* 419 */, -/* 420 */, -/* 421 */, -/* 422 */, -/* 423 */, -/* 424 */, -/* 425 */, -/* 426 */, -/* 427 */, -/* 428 */, -/* 429 */, -/* 430 */, -/* 431 */, -/* 432 */, -/* 433 */, -/* 434 */, -/* 435 */, -/* 436 */, -/* 437 */, -/* 438 */, -/* 439 */, -/* 440 */, -/* 441 */, -/* 442 */, -/* 443 */, -/* 444 */, -/* 445 */, -/* 446 */, -/* 447 */, -/* 448 */, -/* 449 */, -/* 450 */, -/* 451 */, -/* 452 */, -/* 453 */, -/* 454 */, -/* 455 */, -/* 456 */, -/* 457 */, -/* 458 */, -/* 459 */, -/* 460 */, -/* 461 */, -/* 462 */, -/* 463 */, -/* 464 */, -/* 465 */, -/* 466 */, -/* 467 */, -/* 468 */, -/* 469 */, -/* 470 */, -/* 471 */, -/* 472 */, -/* 473 */, -/* 474 */, -/* 475 */, -/* 476 */, -/* 477 */, -/* 478 */, -/* 479 */, -/* 480 */, -/* 481 */, -/* 482 */, -/* 483 */, -/* 484 */, -/* 485 */, -/* 486 */ -/*!*********************!*\ - !*** ./dev/boot.js ***! - \*********************/ -/*! no exports provided */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var element_dataset__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-dataset */ 410); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../vendors/Progress.js/src/progress.js */ 412); -/* harmony import */ var _vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__); - - -Object(element_dataset__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(); - -__webpack_require__(/*! json3 */ 502); - -__webpack_require__(/*! intersection-observer */ 505); - - - -window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs = window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs || Object(_vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__["progressJs"])(); -window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs.onbeforeend(function () { - var _$ = window__WEBPACK_IMPORTED_MODULE_2___default.a.$; - - if (_$) { - try { - _$('.progressjs-container').hide(); - - window__WEBPACK_IMPORTED_MODULE_2___default.a.setTimeout(function () { - _$('.progressjs-container').remove(); - }, 200); // eslint-disable-line no-magic-numbers - } catch (e) {} // eslint-disable-line no-empty - - } -}); - -__webpack_require__(/*! ../vendors/modernizr/modernizr-custom.js */ 506); - -__webpack_require__(/*! Common/Booter */ 507); - -if (window__WEBPACK_IMPORTED_MODULE_2___default.a.__runBoot) { - window__WEBPACK_IMPORTED_MODULE_2___default.a.__runBoot(); -} - -/***/ }), -/* 487 */ -/*!**********************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/object/define-property.js ***! - \**********************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../../modules/es6.object.define-property */ 488); -var $Object = __webpack_require__(/*! ../../modules/_core */ 264).Object; -module.exports = function defineProperty(it, key, desc) { - return $Object.defineProperty(it, key, desc); -}; - - -/***/ }), -/* 488 */ -/*!*******************************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.define-property.js ***! - \*******************************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var $export = __webpack_require__(/*! ./_export */ 395); -// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) -$export($export.S + $export.F * !__webpack_require__(/*! ./_descriptors */ 228), 'Object', { defineProperty: __webpack_require__(/*! ./_object-dp */ 397).f }); - - -/***/ }), -/* 489 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ctx.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// optional / simple context binding -var aFunction = __webpack_require__(/*! ./_a-function */ 490); -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), -/* 490 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_a-function.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; -}; - - -/***/ }), -/* 491 */ -/*!**********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(/*! ./_object-dp */ 397); -var createDesc = __webpack_require__(/*! ./_property-desc */ 400); -module.exports = __webpack_require__(/*! ./_descriptors */ 228) ? function (object, key, value) { - return dP.f(object, key, createDesc(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), -/* 492 */ -/*!***************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js ***! - \***************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ 273); -module.exports = function (it) { - if (!isObject(it)) throw TypeError(it + ' is not an object!'); - return it; -}; - - -/***/ }), -/* 493 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ 273); -var document = __webpack_require__(/*! ./_global */ 396).document; -// typeof document.createElement is 'object' in old IE -var is = isObject(document) && isObject(document.createElement); -module.exports = function (it) { - return is ? document.createElement(it) : {}; -}; - - -/***/ }), -/* 494 */ -/*!**********************************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/object/get-own-property-descriptor.js ***! - \**********************************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../../modules/es6.object.get-own-property-descriptor */ 495); -var $Object = __webpack_require__(/*! ../../modules/_core */ 264).Object; -module.exports = function getOwnPropertyDescriptor(it, key) { - return $Object.getOwnPropertyDescriptor(it, key); -}; - - -/***/ }), -/* 495 */ -/*!*******************************************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js ***! - \*******************************************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) -var toIObject = __webpack_require__(/*! ./_to-iobject */ 402); -var $getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ 499).f; - -__webpack_require__(/*! ./_object-sap */ 501)('getOwnPropertyDescriptor', function () { - return function getOwnPropertyDescriptor(it, key) { - return $getOwnPropertyDescriptor(toIObject(it), key); - }; -}); - - -/***/ }), -/* 496 */ -/*!*************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js ***! - \*************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = __webpack_require__(/*! ./_cof */ 497); -// eslint-disable-next-line no-prototype-builtins -module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { - return cof(it) == 'String' ? it.split('') : Object(it); -}; - - -/***/ }), -/* 497 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), -/* 498 */ -/*!*************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js ***! - \*************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// 7.2.1 RequireObjectCoercible(argument) -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; - - -/***/ }), -/* 499 */ -/*!*****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopd.js ***! - \*****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var pIE = __webpack_require__(/*! ./_object-pie */ 500); -var createDesc = __webpack_require__(/*! ./_property-desc */ 400); -var toIObject = __webpack_require__(/*! ./_to-iobject */ 402); -var toPrimitive = __webpack_require__(/*! ./_to-primitive */ 399); -var has = __webpack_require__(/*! ./_has */ 401); -var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ 398); -var gOPD = Object.getOwnPropertyDescriptor; - -exports.f = __webpack_require__(/*! ./_descriptors */ 228) ? gOPD : function getOwnPropertyDescriptor(O, P) { - O = toIObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return gOPD(O, P); - } catch (e) { /* empty */ } - if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); -}; - - -/***/ }), -/* 500 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -exports.f = {}.propertyIsEnumerable; - - -/***/ }), -/* 501 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-sap.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// most Object methods by ES6 should accept primitives -var $export = __webpack_require__(/*! ./_export */ 395); -var core = __webpack_require__(/*! ./_core */ 264); -var fails = __webpack_require__(/*! ./_fails */ 274); -module.exports = function (KEY, exec) { - var fn = (core.Object || {})[KEY] || Object[KEY]; - var exp = {}; - exp[KEY] = exec(fn); - $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); -}; - - -/***/ }), -/* 502 */ -/*!*****************************************!*\ - !*** ./node_modules/json3/lib/json3.js ***! - \*****************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! JSON v3.3.2 | https://bestiejs.github.io/json3 | Copyright 2012-2015, Kit Cambridge, Benjamin Tan | http://kit.mit-license.org */ -;(function () { - // Detect the `define` function exposed by asynchronous module loaders. The - // strict `define` check is necessary for compatibility with `r.js`. - var isLoader = true && __webpack_require__(/*! !webpack amd options */ 504); - - // A set of types used to distinguish objects from primitives. - var objectTypes = { - "function": true, - "object": true - }; - - // Detect the `exports` object exposed by CommonJS implementations. - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - // Use the `global` object exposed by Node (including Browserify via - // `insert-module-globals`), Narwhal, and Ringo as the default context, - // and the `window` object in browsers. Rhino exports a `global` function - // instead. - var root = objectTypes[typeof window] && window || this, - freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; - - if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) { - root = freeGlobal; - } - - // Public: Initializes JSON 3 using the given `context` object, attaching the - // `stringify` and `parse` functions to the specified `exports` object. - function runInContext(context, exports) { - context || (context = root.Object()); - exports || (exports = root.Object()); - - // Native constructor aliases. - var Number = context.Number || root.Number, - String = context.String || root.String, - Object = context.Object || root.Object, - Date = context.Date || root.Date, - SyntaxError = context.SyntaxError || root.SyntaxError, - TypeError = context.TypeError || root.TypeError, - Math = context.Math || root.Math, - nativeJSON = context.JSON || root.JSON; - - // Delegate to the native `stringify` and `parse` implementations. - if (typeof nativeJSON == "object" && nativeJSON) { - exports.stringify = nativeJSON.stringify; - exports.parse = nativeJSON.parse; - } - - // Convenience aliases. - var objectProto = Object.prototype, - getClass = objectProto.toString, - isProperty = objectProto.hasOwnProperty, - undefined; - - // Internal: Contains `try...catch` logic used by other functions. - // This prevents other functions from being deoptimized. - function attempt(func, errorFunc) { - try { - func(); - } catch (exception) { - if (errorFunc) { - errorFunc(); - } - } - } - - // Test the `Date#getUTC*` methods. Based on work by @Yaffle. - var isExtended = new Date(-3509827334573292); - attempt(function () { - // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical - // results for certain dates in Opera >= 10.53. - isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && - isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; - }); - - // Internal: Determines whether the native `JSON.stringify` and `parse` - // implementations are spec-compliant. Based on work by Ken Snyder. - function has(name) { - if (has[name] != null) { - // Return cached feature test result. - return has[name]; - } - var isSupported; - if (name == "bug-string-char-index") { - // IE <= 7 doesn't support accessing string characters using square - // bracket notation. IE 8 only supports this for primitives. - isSupported = "a"[0] != "a"; - } else if (name == "json") { - // Indicates whether both `JSON.stringify` and `JSON.parse` are - // supported. - isSupported = has("json-stringify") && has("date-serialization") && has("json-parse"); - } else if (name == "date-serialization") { - // Indicates whether `Date`s can be serialized accurately by `JSON.stringify`. - isSupported = has("json-stringify") && isExtended; - if (isSupported) { - var stringify = exports.stringify; - attempt(function () { - isSupported = - // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly - // serialize extended years. - stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && - // The milliseconds are optional in ES 5, but required in 5.1. - stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && - // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative - // four-digit years instead of six-digit years. Credits: @Yaffle. - stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && - // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond - // values less than 1000. Credits: @Yaffle. - stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; - }); - } - } else { - var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; - // Test `JSON.stringify`. - if (name == "json-stringify") { - var stringify = exports.stringify, stringifySupported = typeof stringify == "function"; - if (stringifySupported) { - // A test function object with a custom `toJSON` method. - (value = function () { - return 1; - }).toJSON = value; - attempt(function () { - stringifySupported = - // Firefox 3.1b1 and b2 serialize string, number, and boolean - // primitives as object literals. - stringify(0) === "0" && - // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object - // literals. - stringify(new Number()) === "0" && - stringify(new String()) == '""' && - // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or - // does not define a canonical JSON representation (this applies to - // objects with `toJSON` properties as well, *unless* they are nested - // within an object or array). - stringify(getClass) === undefined && - // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and - // FF 3.1b3 pass this test. - stringify(undefined) === undefined && - // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, - // respectively, if the value is omitted entirely. - stringify() === undefined && - // FF 3.1b1, 2 throw an error if the given value is not a number, - // string, array, object, Boolean, or `null` literal. This applies to - // objects with custom `toJSON` methods as well, unless they are nested - // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` - // methods entirely. - stringify(value) === "1" && - stringify([value]) == "[1]" && - // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of - // `"[null]"`. - stringify([undefined]) == "[null]" && - // YUI 3.0.0b1 fails to serialize `null` literals. - stringify(null) == "null" && - // FF 3.1b1, 2 halts serialization if an array contains a function: - // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 - // elides non-JSON values from objects and arrays, unless they - // define custom `toJSON` methods. - stringify([undefined, getClass, null]) == "[null,null,null]" && - // Simple serialization test. FF 3.1b1 uses Unicode escape sequences - // where character escape codes are expected (e.g., `\b` => `\u0008`). - stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && - // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. - stringify(null, value) === "1" && - stringify([1, 2], null, 1) == "[\n 1,\n 2\n]"; - }, function () { - stringifySupported = false; - }); - } - isSupported = stringifySupported; - } - // Test `JSON.parse`. - if (name == "json-parse") { - var parse = exports.parse, parseSupported; - if (typeof parse == "function") { - attempt(function () { - // FF 3.1b1, b2 will throw an exception if a bare literal is provided. - // Conforming implementations should also coerce the initial argument to - // a string prior to parsing. - if (parse("0") === 0 && !parse(false)) { - // Simple parsing test. - value = parse(serialized); - parseSupported = value["a"].length == 5 && value["a"][0] === 1; - if (parseSupported) { - attempt(function () { - // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. - parseSupported = !parse('"\t"'); - }); - if (parseSupported) { - attempt(function () { - // FF 4.0 and 4.0.1 allow leading `+` signs and leading - // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow - // certain octal literals. - parseSupported = parse("01") !== 1; - }); - } - if (parseSupported) { - attempt(function () { - // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal - // points. These environments, along with FF 3.1b1 and 2, - // also allow trailing commas in JSON objects and arrays. - parseSupported = parse("1.") !== 1; - }); - } - } - } - }, function () { - parseSupported = false; - }); - } - isSupported = parseSupported; - } - } - return has[name] = !!isSupported; - } - has["bug-string-char-index"] = has["date-serialization"] = has["json"] = has["json-stringify"] = has["json-parse"] = null; - - if (!has("json")) { - // Common `[[Class]]` name aliases. - var functionClass = "[object Function]", - dateClass = "[object Date]", - numberClass = "[object Number]", - stringClass = "[object String]", - arrayClass = "[object Array]", - booleanClass = "[object Boolean]"; - - // Detect incomplete support for accessing string characters by index. - var charIndexBuggy = has("bug-string-char-index"); - - // Internal: Normalizes the `for...in` iteration algorithm across - // environments. Each enumerated key is yielded to a `callback` function. - var forOwn = function (object, callback) { - var size = 0, Properties, dontEnums, property; - - // Tests for bugs in the current environment's `for...in` algorithm. The - // `valueOf` property inherits the non-enumerable flag from - // `Object.prototype` in older versions of IE, Netscape, and Mozilla. - (Properties = function () { - this.valueOf = 0; - }).prototype.valueOf = 0; - - // Iterate over a new instance of the `Properties` class. - dontEnums = new Properties(); - for (property in dontEnums) { - // Ignore all properties inherited from `Object.prototype`. - if (isProperty.call(dontEnums, property)) { - size++; - } - } - Properties = dontEnums = null; - - // Normalize the iteration algorithm. - if (!size) { - // A list of non-enumerable properties inherited from `Object.prototype`. - dontEnums = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; - // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable - // properties. - forOwn = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, length; - var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; - for (property in object) { - // Gecko <= 1.0 enumerates the `prototype` property of functions under - // certain conditions; IE does not. - if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { - callback(property); - } - } - // Manually invoke the callback for each non-enumerable property. - for (length = dontEnums.length; property = dontEnums[--length];) { - if (hasProperty.call(object, property)) { - callback(property); - } - } - }; - } else { - // No bugs detected; use the standard `for...in` algorithm. - forOwn = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, isConstructor; - for (property in object) { - if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { - callback(property); - } - } - // Manually invoke the callback for the `constructor` property due to - // cross-environment inconsistencies. - if (isConstructor || isProperty.call(object, (property = "constructor"))) { - callback(property); - } - }; - } - return forOwn(object, callback); - }; - - // Public: Serializes a JavaScript `value` as a JSON string. The optional - // `filter` argument may specify either a function that alters how object and - // array members are serialized, or an array of strings and numbers that - // indicates which properties should be serialized. The optional `width` - // argument may be either a string or number that specifies the indentation - // level of the output. - if (!has("json-stringify") && !has("date-serialization")) { - // Internal: A map of control characters and their escaped equivalents. - var Escapes = { - 92: "\\\\", - 34: '\\"', - 8: "\\b", - 12: "\\f", - 10: "\\n", - 13: "\\r", - 9: "\\t" - }; - - // Internal: Converts `value` into a zero-padded string such that its - // length is at least equal to `width`. The `width` must be <= 6. - var leadingZeroes = "000000"; - var toPaddedString = function (width, value) { - // The `|| 0` expression is necessary to work around a bug in - // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. - return (leadingZeroes + (value || 0)).slice(-width); - }; - - // Internal: Serializes a date object. - var serializeDate = function (value) { - var getData, year, month, date, time, hours, minutes, seconds, milliseconds; - // Define additional utility methods if the `Date` methods are buggy. - if (!isExtended) { - var floor = Math.floor; - // A mapping between the months of the year and the number of days between - // January 1st and the first of the respective month. - var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - // Internal: Calculates the number of days between the Unix epoch and the - // first day of the given month. - var getDay = function (year, month) { - return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); - }; - getData = function (value) { - // Manually compute the year, month, date, hours, minutes, - // seconds, and milliseconds if the `getUTC*` methods are - // buggy. Adapted from @Yaffle's `date-shim` project. - date = floor(value / 864e5); - for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); - for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); - date = 1 + date - getDay(year, month); - // The `time` value specifies the time within the day (see ES - // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used - // to compute `A modulo B`, as the `%` operator does not - // correspond to the `modulo` operation for negative numbers. - time = (value % 864e5 + 864e5) % 864e5; - // The hours, minutes, seconds, and milliseconds are obtained by - // decomposing the time within the day. See section 15.9.1.10. - hours = floor(time / 36e5) % 24; - minutes = floor(time / 6e4) % 60; - seconds = floor(time / 1e3) % 60; - milliseconds = time % 1e3; - }; - } else { - getData = function (value) { - year = value.getUTCFullYear(); - month = value.getUTCMonth(); - date = value.getUTCDate(); - hours = value.getUTCHours(); - minutes = value.getUTCMinutes(); - seconds = value.getUTCSeconds(); - milliseconds = value.getUTCMilliseconds(); - }; - } - serializeDate = function (value) { - if (value > -1 / 0 && value < 1 / 0) { - // Dates are serialized according to the `Date#toJSON` method - // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 - // for the ISO 8601 date time string format. - getData(value); - // Serialize extended years correctly. - value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + - "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + - // Months, dates, hours, minutes, and seconds should have two - // digits; milliseconds should have three. - "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + - // Milliseconds are optional in ES 5.0, but required in 5.1. - "." + toPaddedString(3, milliseconds) + "Z"; - year = month = date = hours = minutes = seconds = milliseconds = null; - } else { - value = null; - } - return value; - }; - return serializeDate(value); - }; - - // For environments with `JSON.stringify` but buggy date serialization, - // we override the native `Date#toJSON` implementation with a - // spec-compliant one. - if (has("json-stringify") && !has("date-serialization")) { - // Internal: the `Date#toJSON` implementation used to override the native one. - function dateToJSON (key) { - return serializeDate(this); - } - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - var nativeStringify = exports.stringify; - exports.stringify = function (source, filter, width) { - var nativeToJSON = Date.prototype.toJSON; - Date.prototype.toJSON = dateToJSON; - var result = nativeStringify(source, filter, width); - Date.prototype.toJSON = nativeToJSON; - return result; - } - } else { - // Internal: Double-quotes a string `value`, replacing all ASCII control - // characters (characters with code unit values between 0 and 31) with - // their escaped equivalents. This is an implementation of the - // `Quote(value)` operation defined in ES 5.1 section 15.12.3. - var unicodePrefix = "\\u00"; - var escapeChar = function (character) { - var charCode = character.charCodeAt(0), escaped = Escapes[charCode]; - if (escaped) { - return escaped; - } - return unicodePrefix + toPaddedString(2, charCode.toString(16)); - }; - var reEscape = /[\x00-\x1f\x22\x5c]/g; - var quote = function (value) { - reEscape.lastIndex = 0; - return '"' + - ( - reEscape.test(value) - ? value.replace(reEscape, escapeChar) - : value - ) + - '"'; - }; - - // Internal: Recursively serializes an object. Implements the - // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. - var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { - var value, type, className, results, element, index, length, prefix, result; - attempt(function () { - // Necessary for host object support. - value = object[property]; - }); - if (typeof value == "object" && value) { - if (value.getUTCFullYear && getClass.call(value) == dateClass && value.toJSON === Date.prototype.toJSON) { - value = serializeDate(value); - } else if (typeof value.toJSON == "function") { - value = value.toJSON(property); - } - } - if (callback) { - // If a replacement function was provided, call it to obtain the value - // for serialization. - value = callback.call(object, property, value); - } - // Exit early if value is `undefined` or `null`. - if (value == undefined) { - return value === undefined ? value : "null"; - } - type = typeof value; - // Only call `getClass` if the value is an object. - if (type == "object") { - className = getClass.call(value); - } - switch (className || type) { - case "boolean": - case booleanClass: - // Booleans are represented literally. - return "" + value; - case "number": - case numberClass: - // JSON numbers must be finite. `Infinity` and `NaN` are serialized as - // `"null"`. - return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; - case "string": - case stringClass: - // Strings are double-quoted and escaped. - return quote("" + value); - } - // Recursively serialize objects and arrays. - if (typeof value == "object") { - // Check for cyclic structures. This is a linear search; performance - // is inversely proportional to the number of unique nested objects. - for (length = stack.length; length--;) { - if (stack[length] === value) { - // Cyclic structures cannot be serialized by `JSON.stringify`. - throw TypeError(); - } - } - // Add the object to the stack of traversed objects. - stack.push(value); - results = []; - // Save the current indentation level and indent one additional level. - prefix = indentation; - indentation += whitespace; - if (className == arrayClass) { - // Recursively serialize array elements. - for (index = 0, length = value.length; index < length; index++) { - element = serialize(index, value, callback, properties, whitespace, indentation, stack); - results.push(element === undefined ? "null" : element); - } - result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; - } else { - // Recursively serialize object members. Members are selected from - // either a user-specified list of property names, or the object - // itself. - forOwn(properties || value, function (property) { - var element = serialize(property, value, callback, properties, whitespace, indentation, stack); - if (element !== undefined) { - // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} - // is not the empty string, let `member` {quote(property) + ":"} - // be the concatenation of `member` and the `space` character." - // The "`space` character" refers to the literal space - // character, not the `space` {width} argument provided to - // `JSON.stringify`. - results.push(quote(property) + ":" + (whitespace ? " " : "") + element); - } - }); - result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; - } - // Remove the object from the traversed object stack. - stack.pop(); - return result; - } - }; - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - exports.stringify = function (source, filter, width) { - var whitespace, callback, properties, className; - if (objectTypes[typeof filter] && filter) { - className = getClass.call(filter); - if (className == functionClass) { - callback = filter; - } else if (className == arrayClass) { - // Convert the property names array into a makeshift set. - properties = {}; - for (var index = 0, length = filter.length, value; index < length;) { - value = filter[index++]; - className = getClass.call(value); - if (className == "[object String]" || className == "[object Number]") { - properties[value] = 1; - } - } - } - } - if (width) { - className = getClass.call(width); - if (className == numberClass) { - // Convert the `width` to an integer and create a string containing - // `width` number of space characters. - if ((width -= width % 1) > 0) { - if (width > 10) { - width = 10; - } - for (whitespace = ""; whitespace.length < width;) { - whitespace += " "; - } - } - } else if (className == stringClass) { - whitespace = width.length <= 10 ? width : width.slice(0, 10); - } - } - // Opera <= 7.54u2 discards the values associated with empty string keys - // (`""`) only if they are used directly within an object member list - // (e.g., `!("" in { "": 1})`). - return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); - }; - } - } - - // Public: Parses a JSON source string. - if (!has("json-parse")) { - var fromCharCode = String.fromCharCode; - - // Internal: A map of escaped control characters and their unescaped - // equivalents. - var Unescapes = { - 92: "\\", - 34: '"', - 47: "/", - 98: "\b", - 116: "\t", - 110: "\n", - 102: "\f", - 114: "\r" - }; - - // Internal: Stores the parser state. - var Index, Source; - - // Internal: Resets the parser state and throws a `SyntaxError`. - var abort = function () { - Index = Source = null; - throw SyntaxError(); - }; - - // Internal: Returns the next token, or `"$"` if the parser has reached - // the end of the source string. A token may be a string, number, `null` - // literal, or Boolean literal. - var lex = function () { - var source = Source, length = source.length, value, begin, position, isSigned, charCode; - while (Index < length) { - charCode = source.charCodeAt(Index); - switch (charCode) { - case 9: case 10: case 13: case 32: - // Skip whitespace tokens, including tabs, carriage returns, line - // feeds, and space characters. - Index++; - break; - case 123: case 125: case 91: case 93: case 58: case 44: - // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at - // the current position. - value = charIndexBuggy ? source.charAt(Index) : source[Index]; - Index++; - return value; - case 34: - // `"` delimits a JSON string; advance to the next character and - // begin parsing the string. String tokens are prefixed with the - // sentinel `@` character to distinguish them from punctuators and - // end-of-string tokens. - for (value = "@", Index++; Index < length;) { - charCode = source.charCodeAt(Index); - if (charCode < 32) { - // Unescaped ASCII control characters (those with a code unit - // less than the space character) are not permitted. - abort(); - } else if (charCode == 92) { - // A reverse solidus (`\`) marks the beginning of an escaped - // control character (including `"`, `\`, and `/`) or Unicode - // escape sequence. - charCode = source.charCodeAt(++Index); - switch (charCode) { - case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: - // Revive escaped control characters. - value += Unescapes[charCode]; - Index++; - break; - case 117: - // `\u` marks the beginning of a Unicode escape sequence. - // Advance to the first character and validate the - // four-digit code point. - begin = ++Index; - for (position = Index + 4; Index < position; Index++) { - charCode = source.charCodeAt(Index); - // A valid sequence comprises four hexdigits (case- - // insensitive) that form a single hexadecimal value. - if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { - // Invalid Unicode escape sequence. - abort(); - } - } - // Revive the escaped character. - value += fromCharCode("0x" + source.slice(begin, Index)); - break; - default: - // Invalid escape sequence. - abort(); - } - } else { - if (charCode == 34) { - // An unescaped double-quote character marks the end of the - // string. - break; - } - charCode = source.charCodeAt(Index); - begin = Index; - // Optimize for the common case where a string is valid. - while (charCode >= 32 && charCode != 92 && charCode != 34) { - charCode = source.charCodeAt(++Index); - } - // Append the string as-is. - value += source.slice(begin, Index); - } - } - if (source.charCodeAt(Index) == 34) { - // Advance to the next character and return the revived string. - Index++; - return value; - } - // Unterminated string. - abort(); - default: - // Parse numbers and literals. - begin = Index; - // Advance past the negative sign, if one is specified. - if (charCode == 45) { - isSigned = true; - charCode = source.charCodeAt(++Index); - } - // Parse an integer or floating-point value. - if (charCode >= 48 && charCode <= 57) { - // Leading zeroes are interpreted as octal literals. - if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { - // Illegal octal literal. - abort(); - } - isSigned = false; - // Parse the integer component. - for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); - // Floats cannot contain a leading decimal point; however, this - // case is already accounted for by the parser. - if (source.charCodeAt(Index) == 46) { - position = ++Index; - // Parse the decimal component. - for (; position < length; position++) { - charCode = source.charCodeAt(position); - if (charCode < 48 || charCode > 57) { - break; - } - } - if (position == Index) { - // Illegal trailing decimal. - abort(); - } - Index = position; - } - // Parse exponents. The `e` denoting the exponent is - // case-insensitive. - charCode = source.charCodeAt(Index); - if (charCode == 101 || charCode == 69) { - charCode = source.charCodeAt(++Index); - // Skip past the sign following the exponent, if one is - // specified. - if (charCode == 43 || charCode == 45) { - Index++; - } - // Parse the exponential component. - for (position = Index; position < length; position++) { - charCode = source.charCodeAt(position); - if (charCode < 48 || charCode > 57) { - break; - } - } - if (position == Index) { - // Illegal empty exponent. - abort(); - } - Index = position; - } - // Coerce the parsed value to a JavaScript number. - return +source.slice(begin, Index); - } - // A negative sign may only precede numbers. - if (isSigned) { - abort(); - } - // `true`, `false`, and `null` literals. - var temp = source.slice(Index, Index + 4); - if (temp == "true") { - Index += 4; - return true; - } else if (temp == "fals" && source.charCodeAt(Index + 4 ) == 101) { - Index += 5; - return false; - } else if (temp == "null") { - Index += 4; - return null; - } - // Unrecognized token. - abort(); - } - } - // Return the sentinel `$` character if the parser has reached the end - // of the source string. - return "$"; - }; - - // Internal: Parses a JSON `value` token. - var get = function (value) { - var results, hasMembers; - if (value == "$") { - // Unexpected end of input. - abort(); - } - if (typeof value == "string") { - if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { - // Remove the sentinel `@` character. - return value.slice(1); - } - // Parse object and array literals. - if (value == "[") { - // Parses a JSON array, returning a new JavaScript array. - results = []; - for (;;) { - value = lex(); - // A closing square bracket marks the end of the array literal. - if (value == "]") { - break; - } - // If the array literal contains elements, the current token - // should be a comma separating the previous element from the - // next. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "]") { - // Unexpected trailing `,` in array literal. - abort(); - } - } else { - // A `,` must separate each array element. - abort(); - } - } else { - hasMembers = true; - } - // Elisions and leading commas are not permitted. - if (value == ",") { - abort(); - } - results.push(get(value)); - } - return results; - } else if (value == "{") { - // Parses a JSON object, returning a new JavaScript object. - results = {}; - for (;;) { - value = lex(); - // A closing curly brace marks the end of the object literal. - if (value == "}") { - break; - } - // If the object literal contains members, the current token - // should be a comma separator. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "}") { - // Unexpected trailing `,` in object literal. - abort(); - } - } else { - // A `,` must separate each object member. - abort(); - } - } else { - hasMembers = true; - } - // Leading commas are not permitted, object property names must be - // double-quoted strings, and a `:` must separate each property - // name and value. - if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { - abort(); - } - results[value.slice(1)] = get(lex()); - } - return results; - } - // Unexpected token encountered. - abort(); - } - return value; - }; - - // Internal: Updates a traversed object member. - var update = function (source, property, callback) { - var element = walk(source, property, callback); - if (element === undefined) { - delete source[property]; - } else { - source[property] = element; - } - }; - - // Internal: Recursively traverses a parsed JSON object, invoking the - // `callback` function for each value. This is an implementation of the - // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. - var walk = function (source, property, callback) { - var value = source[property], length; - if (typeof value == "object" && value) { - // `forOwn` can't be used to traverse an array in Opera <= 8.54 - // because its `Object#hasOwnProperty` implementation returns `false` - // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). - if (getClass.call(value) == arrayClass) { - for (length = value.length; length--;) { - update(getClass, forOwn, value, length, callback); - } - } else { - forOwn(value, function (property) { - update(value, property, callback); - }); - } - } - return callback.call(source, property, value); - }; - - // Public: `JSON.parse`. See ES 5.1 section 15.12.2. - exports.parse = function (source, callback) { - var result, value; - Index = 0; - Source = "" + source; - result = get(lex()); - // If a JSON string contains multiple tokens, it is invalid. - if (lex() != "$") { - abort(); - } - // Reset the parser state. - Index = Source = null; - return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; - }; - } - } - - exports.runInContext = runInContext; - return exports; - } - - if (freeExports && !isLoader) { - // Export for CommonJS environments. - runInContext(root, freeExports); - } else { - // Export for web browsers and JavaScript engines. - var nativeJSON = root.JSON, - previousJSON = root.JSON3, - isRestored = false; - - var JSON3 = runInContext(root, (root.JSON3 = { - // Public: Restores the original value of the global `JSON` object and - // returns a reference to the `JSON3` object. - "noConflict": function () { - if (!isRestored) { - isRestored = true; - root.JSON = nativeJSON; - root.JSON3 = previousJSON; - nativeJSON = previousJSON = null; - } - return JSON3; - } - })); - - root.JSON = { - "parse": JSON3.parse, - "stringify": JSON3.stringify - }; - } - - // Export for asynchronous module loaders. - if (isLoader) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { - return JSON3; - }).call(exports, __webpack_require__, exports, module), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } -}).call(this); - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ 503)(module), __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) - -/***/ }), -/* 503 */ -/*!***********************************!*\ - !*** (webpack)/buildin/module.js ***! - \***********************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function(module) { - if (!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if (!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - return module; -}; - - -/***/ }), -/* 504 */ -/*!****************************************!*\ - !*** (webpack)/buildin/amd-options.js ***! - \****************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */ -module.exports = __webpack_amd_options__; - -/* WEBPACK VAR INJECTION */}.call(this, {})) - -/***/ }), -/* 505 */ -/*!*********************************************************************!*\ - !*** ./node_modules/intersection-observer/intersection-observer.js ***! - \*********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -/** - * Copyright 2016 Google Inc. All Rights Reserved. - * - * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE. - * - * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document - * - */ -(function() { -'use strict'; - -// Exit early if we're not running in a browser. -if (typeof window !== 'object') { - return; -} - -// Exit early if all IntersectionObserver and IntersectionObserverEntry -// features are natively supported. -if ('IntersectionObserver' in window && - 'IntersectionObserverEntry' in window && - 'intersectionRatio' in window.IntersectionObserverEntry.prototype) { - - // Minimal polyfill for Edge 15's lack of `isIntersecting` - // See: https://github.com/w3c/IntersectionObserver/issues/211 - if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) { - Object.defineProperty(window.IntersectionObserverEntry.prototype, - 'isIntersecting', { - get: function () { - return this.intersectionRatio > 0; - } - }); - } - return; -} - - -/** - * A local reference to the document. - */ -var document = window.document; - - -/** - * An IntersectionObserver registry. This registry exists to hold a strong - * reference to IntersectionObserver instances currently observing a target - * element. Without this registry, instances without another reference may be - * garbage collected. - */ -var registry = []; - - -/** - * Creates the global IntersectionObserverEntry constructor. - * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry - * @param {Object} entry A dictionary of instance properties. - * @constructor - */ -function IntersectionObserverEntry(entry) { - this.time = entry.time; - this.target = entry.target; - this.rootBounds = entry.rootBounds; - this.boundingClientRect = entry.boundingClientRect; - this.intersectionRect = entry.intersectionRect || getEmptyRect(); - this.isIntersecting = !!entry.intersectionRect; - - // Calculates the intersection ratio. - var targetRect = this.boundingClientRect; - var targetArea = targetRect.width * targetRect.height; - var intersectionRect = this.intersectionRect; - var intersectionArea = intersectionRect.width * intersectionRect.height; - - // Sets intersection ratio. - if (targetArea) { - // Round the intersection ratio to avoid floating point math issues: - // https://github.com/w3c/IntersectionObserver/issues/324 - this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4)); - } else { - // If area is zero and is intersecting, sets to 1, otherwise to 0 - this.intersectionRatio = this.isIntersecting ? 1 : 0; - } -} - - -/** - * Creates the global IntersectionObserver constructor. - * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface - * @param {Function} callback The function to be invoked after intersection - * changes have queued. The function is not invoked if the queue has - * been emptied by calling the `takeRecords` method. - * @param {Object=} opt_options Optional configuration options. - * @constructor - */ -function IntersectionObserver(callback, opt_options) { - - var options = opt_options || {}; - - if (typeof callback != 'function') { - throw new Error('callback must be a function'); - } - - if (options.root && options.root.nodeType != 1) { - throw new Error('root must be an Element'); - } - - // Binds and throttles `this._checkForIntersections`. - this._checkForIntersections = throttle( - this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT); - - // Private properties. - this._callback = callback; - this._observationTargets = []; - this._queuedEntries = []; - this._rootMarginValues = this._parseRootMargin(options.rootMargin); - - // Public properties. - this.thresholds = this._initThresholds(options.threshold); - this.root = options.root || null; - this.rootMargin = this._rootMarginValues.map(function(margin) { - return margin.value + margin.unit; - }).join(' '); -} - - -/** - * The minimum interval within which the document will be checked for - * intersection changes. - */ -IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100; - - -/** - * The frequency in which the polyfill polls for intersection changes. - * this can be updated on a per instance basis and must be set prior to - * calling `observe` on the first target. - */ -IntersectionObserver.prototype.POLL_INTERVAL = null; - -/** - * Use a mutation observer on the root element - * to detect intersection changes. - */ -IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true; - - -/** - * Starts observing a target element for intersection changes based on - * the thresholds values. - * @param {Element} target The DOM element to observe. - */ -IntersectionObserver.prototype.observe = function(target) { - var isTargetAlreadyObserved = this._observationTargets.some(function(item) { - return item.element == target; - }); - - if (isTargetAlreadyObserved) { - return; - } - - if (!(target && target.nodeType == 1)) { - throw new Error('target must be an Element'); - } - - this._registerInstance(); - this._observationTargets.push({element: target, entry: null}); - this._monitorIntersections(); - this._checkForIntersections(); -}; - - -/** - * Stops observing a target element for intersection changes. - * @param {Element} target The DOM element to observe. - */ -IntersectionObserver.prototype.unobserve = function(target) { - this._observationTargets = - this._observationTargets.filter(function(item) { - - return item.element != target; - }); - if (!this._observationTargets.length) { - this._unmonitorIntersections(); - this._unregisterInstance(); - } -}; - - -/** - * Stops observing all target elements for intersection changes. - */ -IntersectionObserver.prototype.disconnect = function() { - this._observationTargets = []; - this._unmonitorIntersections(); - this._unregisterInstance(); -}; - - -/** - * Returns any queue entries that have not yet been reported to the - * callback and clears the queue. This can be used in conjunction with the - * callback to obtain the absolute most up-to-date intersection information. - * @return {Array} The currently queued entries. - */ -IntersectionObserver.prototype.takeRecords = function() { - var records = this._queuedEntries.slice(); - this._queuedEntries = []; - return records; -}; - - -/** - * Accepts the threshold value from the user configuration object and - * returns a sorted array of unique threshold values. If a value is not - * between 0 and 1 and error is thrown. - * @private - * @param {Array|number=} opt_threshold An optional threshold value or - * a list of threshold values, defaulting to [0]. - * @return {Array} A sorted list of unique and valid threshold values. - */ -IntersectionObserver.prototype._initThresholds = function(opt_threshold) { - var threshold = opt_threshold || [0]; - if (!Array.isArray(threshold)) threshold = [threshold]; - - return threshold.sort().filter(function(t, i, a) { - if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) { - throw new Error('threshold must be a number between 0 and 1 inclusively'); - } - return t !== a[i - 1]; - }); -}; - - -/** - * Accepts the rootMargin value from the user configuration object - * and returns an array of the four margin values as an object containing - * the value and unit properties. If any of the values are not properly - * formatted or use a unit other than px or %, and error is thrown. - * @private - * @param {string=} opt_rootMargin An optional rootMargin value, - * defaulting to '0px'. - * @return {Array
]*><\/p>/gi,"");try{this.editor.setData(e)}catch(e){}t&&this.focus()}},t.replaceHtml=function(e,t){if(this.editor&&this.__inited&&"wysiwyg"===this.editor.mode)try{this.editor.setData(this.editor.getData().replace(e,t))}catch(e){}},t.setPlain=function(e,t){if(this.editor&&this.__inited){if(this.clearCachedSignature(),this.modeToggle(!1),"plain"===this.editor.mode&&this.editor.plugins.plain&&this.editor.__plain)this.editor.__plain.setRawData(e);else try{this.editor.setData(e)}catch(e){}t&&this.focus()}},t.init=function(){var o=this;if(this.element&&!this.editor){var e=function(){var e=f.htmlEditorDefaultConfig,t=h.settingsGet("Language"),n=!!h.appSettingsGet("allowHtmlEditorSourceButton"),i=!!h.appSettingsGet("allowHtmlEditorBitiButtons");!n&&i||e.toolbarGroups.__cfgInited||(e.toolbarGroups.__cfgInited=!0,n&&(e.removeButtons=e.removeButtons.replace(",Source","")),i||(e.removePlugins+=(e.removePlugins?",":"")+"bidi")),e.enterMode=c.a.CKEDITOR.ENTER_BR,e.shiftEnterMode=c.a.CKEDITOR.ENTER_P,e.language=f.htmlEditorLangsMap[(t||"en").toLowerCase()]||"en",c.a.CKEDITOR.env&&(c.a.CKEDITOR.env.isCompatible=!0),o.editor=c.a.CKEDITOR.appendTo(o.element,e),o.editor.on("key",function(e){return!e||!e.data||g.EventKeyCode.Tab!==e.data.keyCode}),o.editor.on("blur",function(){o.blurTrigger()}),o.editor.on("mode",function(){o.blurTrigger(),o.onModeChange&&o.onModeChange("plain"!==o.editor.mode)}),o.editor.on("focus",function(){o.focusTrigger()}),c.a.FileReader&&o.editor.on("drop",function(e){if(0 ]*><\/p>/gi,"").replace(/"},v=function(e,t,n,i,o,r){var a,s,c,u,l,d=e._o,p=n===d.minYear,f=n===d.maxYear,g=' =d.minYear&&c.push('");return l='i.maxDate||i.disableWeekends&&(0===(A=x.getDay())||6===A)||i.disableDayFn&&i.disableDayFn(x),isEmpty:j,isStartRange:k,isEndRange:L,isInRange:M,showDaysInNextAndPreviousMonths:i.showDaysInNextAndPreviousMonths,enableSelectionDaysInNextAndPreviousMonths:i.enableSelectionDaysInNextAndPreviousMonths};i.pickWholeWeek&&E&&(T=!0),c.push(q(F)),7==++_&&(i.showWeekNumber&&c.unshift((v=C-a,S=t,y=e,w=void 0,w=new Date(y,0,1),''+Math.ceil(((new Date(y,S,v)-w)/864e5+w.getDay()+1)/7)+" ")),s.push((m=c,b=i.isRTL,''+(b?m.reverse():m).join("")+" ")),_=0,T=!(c=[]))}return O=s,''+function(e){var t,n=[];for(e.showWeekNumber&&n.push("
"},isVisible:function(){return this._v},show:function(){this.isVisible()||(this._v=!0,this.draw(),g(this.el,"is-hidden"),this._o.bound&&(c(p,"click",this._onClick),this.adjustPosition()),"function"==typeof this._o.onOpen&&this._o.onOpen.call(this))},hide:function(){var e=this._v;!1!==e&&(this._o.bound&&i(p,"click",this._onClick),this.el.style.position="static",this.el.style.left="auto",this.el.style.top="auto",f(this.el,"is-hidden"),this._v=!1,void 0!==e&&"function"==typeof this._o.onClose&&this._o.onClose.call(this))},destroy:function(){var e=this._o;this.hide(),i(this.el,"mousedown",this._onMouseDown,!0),i(this.el,"touchend",this._onMouseDown,!0),i(this.el,"change",this._onChange),e.keyboardInput&&i(p,"keydown",this._onKeyChange),e.field&&(i(e.field,"change",this._onInputChange),e.bound&&(i(e.trigger,"click",this._onInputClick),i(e.trigger,"focus",this._onInputFocus),i(e.trigger,"blur",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}},S)}()},function(e,t){e.exports=window.Autolinker},function(e,t,n){"use strict";n.d(t,"a",function(){return i});var i={eml:"message/rfc822",mime:"message/rfc822",txt:"text/plain",text:"text/plain",def:"text/plain",list:"text/plain",in:"text/plain",ini:"text/plain",log:"text/plain",sql:"text/plain",cfg:"text/plain",conf:"text/plain",asc:"text/plain",rtx:"text/richtext",vcard:"text/vcard",vcf:"text/vcard",htm:"text/html",html:"text/html",csv:"text/csv",ics:"text/calendar",ifb:"text/calendar",xml:"text/xml",json:"application/json",swf:"application/x-shockwave-flash",hlp:"application/winhlp",wgt:"application/widget",chm:"application/vnd.ms-htmlhelp",p10:"application/pkcs10",p7c:"application/pkcs7-mime",p7m:"application/pkcs7-mime",p7s:"application/pkcs7-signature",torrent:"application/x-bittorrent",js:"application/javascript",pl:"text/perl",css:"text/css",asp:"text/asp",php:"application/x-httpd-php",php3:"application/x-httpd-php",php4:"application/x-httpd-php",php5:"application/x-httpd-php",phtml:"application/x-httpd-php",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",jpe:"image/jpeg",jfif:"image/jpeg",gif:"image/gif",bmp:"image/bmp",cgm:"image/cgm",ief:"image/ief",ico:"image/x-icon",tif:"image/tiff",tiff:"image/tiff",svg:"image/svg+xml",svgz:"image/svg+xml",djv:"image/vnd.djvu",djvu:"image/vnd.djvu",webp:"image/webp",zip:"application/zip","7z":"application/x-7z-compressed",rar:"application/x-rar-compressed",exe:"application/x-msdownload",dll:"application/x-msdownload",scr:"application/x-msdownload",com:"application/x-msdownload",bat:"application/x-msdownload",msi:"application/x-msdownload",cab:"application/vnd.ms-cab-compressed",gz:"application/x-gzip",tgz:"application/x-gzip",bz:"application/x-bzip",bz2:"application/x-bzip2",deb:"application/x-debian-package",psf:"application/x-font-linux-psf",otf:"application/x-font-otf",pcf:"application/x-font-pcf",snf:"application/x-font-snf",ttf:"application/x-font-ttf",ttc:"application/x-font-ttf",mp3:"audio/mpeg",amr:"audio/amr",aac:"audio/x-aac",aif:"audio/x-aiff",aifc:"audio/x-aiff",aiff:"audio/x-aiff",wav:"audio/x-wav",wma:"audio/x-ms-wma",wax:"audio/x-ms-wax",midi:"audio/midi",mp4a:"audio/mp4",ogg:"audio/ogg",weba:"audio/webm",ra:"audio/x-pn-realaudio",ram:"audio/x-pn-realaudio",rmp:"audio/x-pn-realaudio-plugin",m3u:"audio/x-mpegurl",flv:"video/x-flv",qt:"video/quicktime",mov:"video/quicktime",wmv:"video/windows-media",avi:"video/x-msvideo",mpg:"video/mpeg",mpeg:"video/mpeg",mpe:"video/mpeg",m1v:"video/mpeg",m2v:"video/mpeg","3gp":"video/3gpp","3g2":"video/3gpp2",h261:"video/h261",h263:"video/h263",h264:"video/h264",jpgv:"video/jpgv",mp4:"video/mp4",mp4v:"video/mp4",mpg4:"video/mp4",ogv:"video/ogg",webm:"video/webm",m4v:"video/x-m4v",asf:"video/x-ms-asf",asx:"video/x-ms-asf",wm:"video/x-ms-wm",wmx:"video/x-ms-wmx",wvx:"video/x-ms-wvx",movie:"video/x-sgi-movie",pdf:"application/pdf",psd:"image/vnd.adobe.photoshop",ai:"application/postscript",eps:"application/postscript",ps:"application/postscript",doc:"application/msword",dot:"application/msword",rtf:"application/rtf",xls:"application/vnd.ms-excel",ppt:"application/vnd.ms-powerpoint",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",dotx:"application/vnd.openxmlformats-officedocument.wordprocessingml.template",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation",odt:"application/vnd.oasis.opendocument.text",ods:"application/vnd.oasis.opendocument.spreadsheet"}},,function(e,t,n){var i=n(139),o=n(110);e.exports=Object.keys||function(e){return i(e,o)}},function(e,t,n){var i=n(32),o=n(148),r=n(45),a=i("unscopables"),s=Array.prototype;null==s[a]&&r(s,a,o(null)),e.exports=function(e){s[a][e]=!0}},function(e,t,n){"use strict";var b=n(43),v=n(223),S=n(149),y=n(215),w=n(111),A=n(45),O=n(54),i=n(32),T=n(83),C=n(73),o=n(164),_=o.IteratorPrototype,x=o.BUGGY_SAFARI_ITERATORS,E=i("iterator"),D="values",N=function(){return this};e.exports=function(e,t,n,i,o,r,a){v(n,t,i);var s,c,u,l=function(e){if(e===o&&h)return h;if(!x&&e in f)return f[e];switch(e){case"keys":case D:case"entries":return function(){return new n(this,e)}}return function(){return new n(this)}},d=t+" Iterator",p=!1,f=e.prototype,g=f[E]||f["@@iterator"]||o&&f[o],h=!x&&g||l(o),m="Array"==t&&f.entries||g;if(m&&(s=S(m.call(new e)),_!==Object.prototype&&s.next&&(T||S(s)===_||(y?y(s,_):"function"!=typeof s[E]&&A(s,E,N)),w(s,d,!0,!0),T&&(C[d]=N))),o==D&&g&&g.name!==D&&(p=!0,h=function(){return g.call(this)}),T&&!a||f[E]===h||A(f,E,h),C[t]=h,o)if(c={values:l(D),keys:r?h:l("keys"),entries:l("entries")},a)for(u in c)!x&&!p&&u in f||O(f,u,c[u]);else b({target:t,proto:!0,forced:x||p},c);return c}},function(e,t,n){var o=n(36),r=n(225);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var n,i=!1,e={};try{(n=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(e,[]),i=e instanceof Array}catch(e){}return function(e,t){return o(e),r(t),i?n.call(e,t):e.__proto__=t,e}}():void 0)},function(e,t,n){n(217);var i=n(299),o=n(77),r=n(85),a=n(153),s=n(68)("toStringTag");for(var c in i){var u=o[c],l=u&&u.prototype;l&&!l[s]&&r(l,s,c),a[c]=a.Array}},function(e,t,n){"use strict";var i=n(95),o=n(238),r=n(153),a=n(283),s=n(287),c="Array Iterator",u=a.set,l=a.getterFor(c);e.exports=s(Array,"Array",function(e,t){u(this,{type:c,target:i(e),index:0,kind:t})},function(){var e=l(this),t=e.target,n=e.kind,i=e.index++;return!t||i>=t.length?{value:e.target=void 0,done:!0}:"keys"==n?{value:i,done:!1}:"values"==n?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}},"values"),r.Arguments=r.Array,o("keys"),o("values"),o("entries")},function(e,t,n){"use strict";n.r(t),n.d(t,"AskPopupView",function(){return g}),n.d(t,"default",function(){return g});var i,o=n(10),r=n.n(o),a=n(1),s=n(21),c=n.n(s),u=n(0),l=n(2),d=n(9),p=n(7),f=n(27),g=Object(p.popup)({name:"View/Popup/Ask",templateID:"PopupsAsk"})(i=function(t){function e(){var e;return(e=t.call(this)||this).askDesc=a.a.observable(""),e.yesButton=a.a.observable(""),e.noButton=a.a.observable(""),e.yesFocus=a.a.observable(!1),e.noFocus=a.a.observable(!1),e.fYesAction=null,e.fNoAction=null,e.bFocusYesOnShow=!0,e.bDisabeCloseOnEsc=!0,e.sDefaultKeyScope=u.KeyState.PopupAsk,e}r()(e,t);var n=e.prototype;return n.clearPopup=function(){this.askDesc(""),this.yesButton(Object(d.i18n)("POPUPS_ASK/BUTTON_YES")),this.noButton(Object(d.i18n)("POPUPS_ASK/BUTTON_NO")),this.yesFocus(!1),this.noFocus(!1),this.fYesAction=null,this.fNoAction=null},n.yesClick=function(){this.cancelCommand(),Object(l.isFunc)(this.fYesAction)&&this.fYesAction.call(null)},n.noClick=function(){this.cancelCommand(),Object(l.isFunc)(this.fNoAction)&&this.fNoAction.call(null)},n.onShow=function(e,t,n,i,o,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===i&&(i=""),void 0===o&&(o=""),void 0===r&&(r=!0),this.clearPopup(),this.fYesAction=t||null,this.fNoAction=n||null,this.askDesc(e||""),i&&this.yesButton(i),o&&this.noButton(o),this.bFocusYesOnShow=!!r},n.onShowWithDelay=function(){this.bFocusYesOnShow&&this.yesFocus(!0)},n.onBuild=function(){var e=this;c()("tab, shift+tab, right, left",u.KeyState.PopupAsk,function(){return e.yesFocus()?e.noFocus(!0):e.yesFocus(!0),!1}),c()("esc",u.KeyState.PopupAsk,function(){return e.noClick(),!1})},e}(f.a))||i},,,function(e,t,n){var i=n(50),a=n(59),s=n(36),c=n(212);e.exports=i?Object.defineProperties:function(e,t){s(e);for(var n,i=c(t),o=i.length,r=0;r"),t=0;t<7;t++)n.push(' '+V(e,t,!0)+" ");return""+(e.isRTL?n.reverse():n).join("")+" "}(i)+""+O.join("")+"]*>([\s\S\r\n\t]*)<\/pre>/gim,function(){for(var e=arguments.length,t=new Array(e),n=0;n
').text(a)).html():h&&u.isPgpEncrypted()?w.$div.append(v()('').text(a)).html():"]*>/gim,"\n").replace(/<\/ul>/gi,"\n").replace(/
]*>/gim,"\n_______________________________\n\n").replace(/]*>/gim,"\n__bq__start__\n").replace(/<\/blockquote>/gim,"\n__bq__end__\n").replace(/]*>([\s\S\r\n]*?)<\/a>/gim,function(){for(var e=arguments.length,t=new Array(e),n=0;n
").replace(/\n/g,"
"),t?Pe(e):e}function _e(e,t,n,i,o,a,r,s,c,l){var u=null,d=!1,p=0,f=0,h=[];for(l=!k(l)&&!!l,c=q(c)?c:0
").before("
"))})}},t.initOpenPgpControls=function(e,t){e&&m()(e)&&m()(e).call(e,".b-plain-openpgp:not(.inited)").each(function(){L.a.initMessageBodyControls(v()(this),t)})},t.setMessage=function(e,t){var n=!1,i=null,o="",a="",r="",s=!1,c=this.messagesBodiesDom(),l=this.selectorMessageSelected(),u=this.message();if(e&&u&&e.Result&&"Object/Message"===e.Result["@Object"]&&u.folderFullNameRaw===e.Result.Folder){var d=u.threads();if(u.uid!==e.Result.Uid&&1"+r+"
",w.$div.empty(),u.isPgpSigned(s),u.isPgpEncrypted(h)}else r=""+r+"
";else f=!1,r=""+r+"
";w.data.iMessageBodyCacheCount+=1,(i=v()('').hide().addClass("rl-cache-class")).data("rl-cache-count",w.data.iMessageBodyCacheCount),i.html(Object(S.findEmailAndLinks)(r)).addClass("b-text-part "+(f?"html":"plain")),u.isHtml(!!f),u.hasImages(!!e.Result.HasExternals),u.body=i,u.body&&c.append(u.body),u.storeDataInDom(),e.Result.HasInternals&&u.showInternalImages(!0),u.hasImages()&&P.a.showImages()&&u.showExternalImages(!0),this.purgeMessageBodyCacheThrottle()}this.messageActiveDom(u.body),this.hideMessageBodies(),i&&(this.initOpenPgpControls(i,u),this.initBlockquoteSwitcher(i)),u.body.show()}Object(O.n)(u),(u.unseen()||u.hasUnseenSubMessage())&&Object(D.a)().messageListAction(u.folderFullNameRaw,y.MessageSetAction.SetSeen,[u]),n&&(u=this.message(),l&&u&&(u.folderFullNameRaw!==l.folderFullNameRaw||u.uid!==l.uid)?(this.selectorMessageSelected(null),1===this.messageList().length&&this.selectorMessageFocused(null)):!l&&u&&(l=m()(b.a).call(b.a,this.messageList(),function(e){return e&&e.folderFullNameRaw===u.folderFullNameRaw&&e.uid===u.uid}))&&(this.selectorMessageSelected(l),this.selectorMessageFocused(l))),Object(S.windowResize)()}}},t.selectMessage=function(e){e?(this.message(this.staticMessage.populateByMessageListItem(e)),this.populateMessageBody(this.message())):this.message(null)},t.selectMessageByFolderAndUid=function(e,t){e&&t?(this.message(this.staticMessage.populateByMessageListItem(null)),this.message().folderFullNameRaw=e,this.message().uid=t,this.populateMessageBody(this.message())):this.message(null)},t.populateMessageBody=function(e){e&&_.a.message(this.onMessageResponse,e.folderFullNameRaw,e.uid)&&this.messageCurrentLoading(!0)},t.onMessageResponse=function(e,t,n){this.hideMessageBodies(),this.messageCurrentLoading(!1),y.StorageResultType.Success===e&&t&&t.Result?this.setMessage(t,n):y.StorageResultType.Unload===e?(this.message(null),this.messageError("")):y.StorageResultType.Abort!==e&&(this.message(null),this.messageError(t&&t.ErrorCode?Object(C.getNotification)(t.ErrorCode):Object(C.getNotification)(y.Notification.UnknownError)))},t.calculateMessageListHash=function(e){return h()(b.a).call(b.a,e,function(e){return e.hash+"_"+e.threadsLen()+"_"+e.flagHash()}).join("|")},t.setMessageList=function(e,n){if(e&&e.Result&&"Collection/MessageCollection"===e.Result["@Object"]&&e.Result["@Collection"]&&Object(S.isArray)(e.Result["@Collection"])){var i=0,t=!1,o=[],a=Object(A.momentNowUnix)(),r=Object(S.pInt)(e.Result.MessageResultCount),s=Object(S.pInt)(e.Result.Offset),c=Object(O.e)(Object(S.isNormal)(e.Result.Folder)?e.Result.Folder:"");c&&!n&&(c.interval=a,Object(O.q)(e.Result.Folder,e.Result.FolderHash),Object(S.isNormal)(e.Result.MessageCount)&&c.messageCountAll(e.Result.MessageCount),Object(S.isNormal)(e.Result.MessageUnseenCount)&&(Object(S.pInt)(c.messageCountUnread())!==Object(S.pInt)(e.Result.MessageUnseenCount)&&(t=!0),c.messageCountUnread(e.Result.MessageUnseenCount)),this.initUidNextAndNewMessages(c.fullNameRaw,e.Result.UidNext,e.Result.NewMessages)),t&&c&&Object(O.c)(c.fullNameRaw),b.a.each(e.Result["@Collection"],function(e){if(e&&"Object/Message"===e["@Object"]){var t=F.a.newInstanceFromJson(e);t&&(Object(O.l)(t.folderFullNameRaw,t.uid)&&i<=5&&(i+=1,t.newForAnimation(!0)),t.deleted(!1),n?Object(O.n)(t):Object(O.u)(t),o.push(t))}}),this.messageListCount(r),this.messageListSearch(Object(S.isNormal)(e.Result.Search)?e.Result.Search:""),this.messageListPage(l.a.Math.ceil(s/P.a.messagesPerPage()+1)),this.messageListThreadUid(Object(S.isNormal)(e.Result.ThreadUid)?Object(S.pString)(e.Result.ThreadUid):""),this.messageListEndFolder(Object(S.isNormal)(e.Result.Folder)?e.Result.Folder:""),this.messageListEndSearch(this.messageListSearch()),this.messageListEndThreadUid(this.messageListThreadUid()),this.messageListEndPage(this.messageListPage()),this.messageListDisableAutoSelect(!0),this.messageList(o),this.messageListIsNotCompleted(!1),Object(O.d)(),c&&(n||t||P.a.useThreads())&&Object(D.a)().folderInformation(c.fullNameRaw,o)}else this.messageListCount(0),this.messageList([]),this.messageListError(Object(C.getNotification)(e&&e.ErrorCode?e.ErrorCode:y.Notification.CantGetMessageList))},e}();t.a=new k},function(e,t,n){"use strict";n.d(t,"k",function(){return S}),n.d(t,"b",function(){return w}),n.d(t,"m",function(){return T}),n.d(t,"a",function(){return C}),n.d(t,"l",function(){return A}),n.d(t,"d",function(){return E}),n.d(t,"h",function(){return F}),n.d(t,"f",function(){return j}),n.d(t,"p",function(){return N}),n.d(t,"g",function(){return R}),n.d(t,"q",function(){return I}),n.d(t,"i",function(){return L}),n.d(t,"s",function(){return P}),n.d(t,"e",function(){return M}),n.d(t,"r",function(){return D}),n.d(t,"o",function(){return _}),n.d(t,"j",function(){return k}),n.d(t,"t",function(){return x}),n.d(t,"c",function(){return U}),n.d(t,"n",function(){return H}),n.d(t,"u",function(){return B}),n.d(t,"v",function(){return G}),n.d(t,"w",function(){return V});var i=n(12),a=n.n(i),o=n(3),r=n.n(o),s=n(0),c=n(2),l=n(15),u=n(5),d={},p={},f={},h={},m={},g={},b="",v={},y=u.capa(s.Capa.Gravatar);function S(e,t){e=Object(c.trim)(e),t(y&&""!==e?l.h(e):"",e)}function O(e,t){return e+"#"+t}function w(e,t){v[O(e,t)]=!0}function T(e,t){return!0===v[O(e,t)]}function C(e,t){g[O(e,t)]=!0}function A(e,t){return!!g[O(e,t)]&&!(g[O(e,t)]=null)}function E(){g={}}function F(){return""===b?"INBOX":b}function j(e){return""!==e&&p[e]?p[e]:""}function N(e,t){"INBOX"!==(p[e]=t)&&""!==b||(b=t)}function R(e){return""!==e&&f[e]?f[e]:""}function I(e,t){""!==e&&(f[e]=t)}function L(e){return""!==e&&h[e]?h[e]:""}function P(e,t){h[e]=t}function M(e){return""!==e&&d[e]?d[e]:null}function D(e,t){d[e]=t}function _(e){D(e,null)}function k(e,t){return m[e]&&m[e][t]?m[e][t]:null}function x(e,t,n){m[e]||(m[e]={}),m[e][t]=n}function U(e){m[e]={}}function H(n){if(n){var i=n.uid,e=k(n.folderFullNameRaw,i);if(e&&0
"+Object(V.trim)(f)+"";break;case G.ComposeType.Forward:c=b.fromToLine(!1,!0),l=b.toToLine(!1,!0),u=b.ccToLine(!1,!0),f="
" + _this.readme() + ""; + } + }; + _this.bDisabeCloseOnEsc = true; + _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_10__["KeyState"].All; + _this.tryToClosePopup = ___WEBPACK_IMPORTED_MODULE_7___default.a.debounce(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, _this.tryToClosePopup, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"])(_this)), Common_Enums__WEBPACK_IMPORTED_MODULE_10__["Magics"].Time200ms); + return _this; + } + + var _proto = PluginPopupView.prototype; + + _proto.saveCommand = function saveCommand() { + var list = {}; + list.Name = this.name(); + + ___WEBPACK_IMPORTED_MODULE_7___default.a.each(this.configures(), function (oItem) { + var value = oItem.value(); + + if (false === value || true === value) { + value = value ? '1' : '0'; + } + + list['_' + oItem.Name] = value; + }); + + this.saveError(''); + Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].pluginSettingsUpdate(this.onPluginSettingsUpdateResponse, list); + }; + + _proto.onPluginSettingsUpdateResponse = function onPluginSettingsUpdateResponse(result, data) { + if (Common_Enums__WEBPACK_IMPORTED_MODULE_10__["StorageResultType"].Success === result && data && data.Result) { + this.cancelCommand(); + } else { + this.saveError(''); + + if (data && data.ErrorCode) { + this.saveError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["getNotification"])(data.ErrorCode)); + } else { + this.saveError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_10__["Notification"].CantSavePluginSettings)); + } + } + }; + + _proto.onShow = function onShow(oPlugin) { + this.name(); + this.readme(); + this.configures([]); + + if (oPlugin) { + this.name(oPlugin.Name); + this.readme(oPlugin.Readme); + var config = oPlugin.Config; + + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["isNonEmptyArray"])(config)) { + this.configures(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, config, function (item) { + return { + 'value': ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(item[0]), + 'placeholder': ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(item[6]), + 'Name': item[1], + 'Type': item[2], + 'Label': item[3], + 'Default': item[4], + 'Desc': item[5] + }; + })); + } + } + }; + + _proto.tryToClosePopup = function tryToClosePopup() { + var _this2 = this; + + var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 221); + + if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["isPopupVisible"])(PopupsAskViewModel)) { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["showScreenPopup"])(PopupsAskViewModel, [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () { + if (_this2.modalVisibility()) { + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["delegateRun"])(_this2, 'cancelCommand'); + } + }]); + } + }; + + _proto.onBuild = function onBuild() { + var _this3 = this; + + key__WEBPACK_IMPORTED_MODULE_9___default()('esc', Common_Enums__WEBPACK_IMPORTED_MODULE_10__["KeyState"].All, function () { + if (_this3.modalVisibility()) { + _this3.tryToClosePopup(); + } + + return false; + }); + }; + + return PluginPopupView; +}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_15__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"])(_class2.prototype, "saveCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class2.prototype, "saveCommand"), _class2.prototype)), _class2)) || _class); + + +/***/ }), +/* 537 */ +/*!****************************************!*\ + !*** ./dev/Settings/Admin/Branding.js ***! + \****************************************/ +/*! exports provided: BrandingAdminSettings, default */ +/*! all exports used */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BrandingAdminSettings", function() { return BrandingAdminSettings; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BrandingAdminSettings; }); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! _ */ 3); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); +/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0); +/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2); +/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9); +/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); +/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/App */ 77); +/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Settings */ 5); + + + + + + + + + +var BrandingAdminSettings = +/*#__PURE__*/ +function () { + function BrandingAdminSettings() { + this.capa = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].prem; + this.title = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('Title')).idleTrigger(); + this.loadingDesc = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoadingDescription')).idleTrigger(); + this.faviconUrl = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('FaviconUrl')).idleTrigger(); + this.loginLogo = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginLogo') || '').idleTrigger(); + this.loginBackground = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginBackground') || '').idleTrigger(); + this.userLogo = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogo') || '').idleTrigger(); + this.userLogoMessage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogoMessage') || '').idleTrigger(); + this.userIframeMessage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserIframeMessage') || '').idleTrigger(); + this.userLogoTitle = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogoTitle') || '').idleTrigger(); + this.loginDescription = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginDescription')).idleTrigger(); + this.loginCss = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginCss')).idleTrigger(); + this.userCss = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserCss')).idleTrigger(); + this.welcomePageUrl = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('WelcomePageUrl')).idleTrigger(); + this.welcomePageDisplay = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('WelcomePageDisplay')).idleTrigger(); + this.welcomePageDisplay.options = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () { + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["trigger"])(); + return [{ + optValue: 'none', + optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_NONE') + }, { + optValue: 'once', + optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_ONCE') + }, { + optValue: 'always', + optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_ALWAYS') + }]; + }); + this.community = true || false; + } + + var _proto = BrandingAdminSettings.prototype; + + _proto.onBuild = function onBuild() { + var _this = this; + + ___WEBPACK_IMPORTED_MODULE_0___default.a.delay(function () { + var f1 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.title.trigger, _this), + f2 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.loadingDesc.trigger, _this), + f3 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.faviconUrl.trigger, _this); + + _this.title.subscribe(function (value) { + Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f1, { + 'Title': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) + }); + }); + + _this.loadingDesc.subscribe(function (value) { + Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f2, { + 'LoadingDescription': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) + }); + }); + + _this.faviconUrl.subscribe(function (value) { + Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f3, { + 'FaviconUrl': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) + }); + }); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Magics"].Time50ms); + }; + + return BrandingAdminSettings; +}(); + + + +/***/ }) +/******/ ]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9FbnVtcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwva28uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9VdGlscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuX1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvd1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yYWdlL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vR2xvYmFscy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vS25vaW4uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmpRdWVyeVwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vVHJhbnNsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9MaW5rcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcHBseURlY29yYXRlZERlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmtleVwiIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWRtaW4vQWpheC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NvbnN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0Vmlld05leHQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Tb2NpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL1BsdWdpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9Db3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9Nb21lbnRvci5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuaGFzaGVyXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL2Rldi9IZWxwZXIvQXBwcy9BZG1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi50aW1lcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9MYW5ndWFnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWRtaW4vQXBwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9FbWFpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3RJbnB1dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0NhcGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWRtaW4vUGFja2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93Lm1vbWVudFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5wcm9ncmVzc0pzXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0phc3NsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9UaGVtZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL1BsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0xpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0U2NyZWVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LnNzbVwiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zbG9wcHktYXJyYXktbWV0aG9kLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWRtaW4vRG9tYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmNyb3Nzcm9hZHNcIiIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0Q2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VtYWlsanMtYWRkcmVzc3BhcnNlci9kaXN0L2FkZHJlc3NwYXJzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLm1hdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQ2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9IdG1sRWRpdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL2Rldi9FeHRlcm5hbC9PcGVudGlwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9waWthZGF5L3Bpa2FkYXkuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LkF1dG9saW5rZXJcIiIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL01pbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0Fzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzLmpzIiwid2VicGFjazovLy8uL2Rldi9ib290c3RyYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWJzdHJhY3RBcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWJzdHJhY3RBamF4LmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWJzdHJhY3RTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQXBwL0Fic3RyYWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Lbm9pbi9BYnN0cmFjdEJvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdFJhZGlvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWh0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC90cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mb3JjZWQtc3RyaW5nLXRyaW0tbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2FtZS12YWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvSHRtbC9QcmV2aWV3TWVzc2FnZS5odG1sIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1NhdmVUcmlnZ2VyLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9SYWRpby5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1RleHRBcmVhLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvRGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1NjcmlwdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L01hdGVyaWFsRGVzaWduL0NoZWNrYm94LmpzIiwid2VicGFjazovLy8uL2Rldi9BcHAvQWRtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvRG9tYWluLmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWRtaW4vU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0RvbWFpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0xvZ2luLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9Db250YWN0cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vU2VjdXJpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL1NvY2lhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vUGx1Z2lucy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vUGFja2FnZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0Fib3V0LmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L0FkbWluL1NldHRpbmdzL01lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vU2V0dGluZ3MvUGFuZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2NyZWVuL0FkbWluL0xvZ2luLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L0FkbWluL0xvZ2luLmpzIiwid2VicGFjazovLy8uL2Rldi9hZG1pbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Eb21haW5BbGlhcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9QbHVnaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0JyYW5kaW5nLmpzIl0sIm5hbWVzIjpbIkZpbGVUeXBlIiwiU3RvcmFnZVJlc3VsdFR5cGUiLCJGb2N1c2VkIiwiU3RhdGUiLCJTdGF0ZVR5cGUiLCJDYXBhIiwiS2V5U3RhdGUiLCJGb2xkZXJUeXBlIiwiU2VydmVyRm9sZGVyVHlwZSIsIkxvZ2luU2lnbk1lVHlwZUFzU3RyaW5nIiwiTG9naW5TaWduTWVUeXBlIiwiQ29tcG9zZVR5cGUiLCJVcGxvYWRFcnJvckNvZGUiLCJTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uIiwiQ2xpZW50U2lkZUtleU5hbWUiLCJFdmVudEtleUNvZGUiLCJNZXNzYWdlU2V0QWN0aW9uIiwiTWVzc2FnZVNlbGVjdEFjdGlvbiIsIkRlc2t0b3BOb3RpZmljYXRpb24iLCJNZXNzYWdlUHJpb3JpdHkiLCJFZGl0b3JEZWZhdWx0VHlwZSIsIlNlcnZlclNlY3VyZSIsIlNlYXJjaERhdGVUeXBlIiwiU2F2ZVNldHRpbmdzU3RlcCIsIkxheW91dCIsIkZpbHRlckNvbmRpdGlvbkZpZWxkIiwiRmlsdGVyQ29uZGl0aW9uVHlwZSIsIkZpbHRlcnNBY3Rpb24iLCJGaWx0ZXJSdWxlc1R5cGUiLCJTaWduZWRWZXJpZnlTdGF0dXMiLCJDb250YWN0UHJvcGVydHlUeXBlIiwiTWFnaWNzIiwiUG9ydHMiLCJOb3RpZmljYXRpb24iLCJrbyIsIndpbmRvdyIsIiR3aW4iLCIkIiwiZkRpc3Bvc2FsVG9vbHRpcEhlbHBlciIsImVsZW1lbnQiLCJ1dGlscyIsImRvbU5vZGVEaXNwb3NhbCIsImFkZERpc3Bvc2VDYWxsYmFjayIsIl9fb3BlbnRpcCIsImRlYWN0aXZhdGUiLCJiaW5kaW5nSGFuZGxlcnMiLCJ1cGRhdGVXaWR0aCIsImluaXQiLCJmVmFsdWVBY2Nlc3NvciIsIiRlbCIsImZWYWx1ZSIsImZJbml0Iiwid2lkdGgiLCJzZXRUaW1lb3V0IiwiVGltZTUwMG1zIiwib24iLCJvZmYiLCJlZGl0b3IiLCJIdG1sRWRpdG9yIiwicmVxdWlyZSIsImRlZmF1bHQiLCJmVXBkYXRlRWRpdG9yVmFsdWUiLCJfX2VkaXRvciIsInNldEh0bWxPclBsYWluIiwiZlVwZGF0ZUtvVmFsdWUiLCJnZXREYXRhV2l0aEh0bWxNYXJrIiwiZk9uUmVhZHkiLCJpc09ic2VydmFibGUiLCJfX2ZldGNoRWRpdG9yVmFsdWUiLCJzdWJzY3JpYmUiLCJqc29uIiwidGV4dCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bndyYXAiLCJ1cGRhdGUiLCJzY3JvbGxlclNoYWRvd3MiLCJsaW1pdCIsImNvbnQiLCJmRnVuYyIsIl8iLCJ0aHJvdHRsZSIsInRvZ2dsZUNsYXNzIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwicGlrYWRheSIsImZBbGxCaW5kaW5nc0FjY2Vzc29yIiwidmlld01vZGVsIiwiYmluZGluZ0NvbnRleHQiLCJ0ZXh0SW5wdXQiLCJQaWthZGF5IiwiX19waWthZGF5IiwiZmllbGQiLCJ2aXNpYmxlQW5pbWF0ZWQiLCJhZGRDbGFzcyIsInNob3ciLCJoaWRlIiwiZGVsYXkiLCJyZW1vdmVDbGFzcyIsInRvb2x0aXAiLCJpc01vYmlsZSIsImRhdGEiLCJpc0kxOE4iLCJHbG9iYWxzIiwiYk1vYmlsZURldmljZSIsInNWYWx1ZSIsImlzRnVuY3Rpb24iLCJPcGVudGlwIiwiZHJvcGRvd25WaXNpYmlsaXR5IiwidiIsInNldENvbnRlbnQiLCJhY3RpdmF0ZSIsIlRyYW5zbGF0b3IiLCJpMThuIiwidHJpZ2dlciIsInRvb2x0aXBFcnJvclRpcCIsInN0eWxlIiwiaGlkZU9uIiwidGlwSm9pbnQiLCJkb2N1bWVudCIsInZhbHVlIiwib3BlblRpcHMiLCJpcyIsIlRpbWUxMDBtcyIsInJlZ2lzdHJhdGVCb290c3RyYXBEcm9wZG93biIsImFCb290c3RyYXBEcm9wZG93bnMiLCJwdXNoIiwiY2xpY2siLCJkZXRlY3REcm9wZG93blZpc2liaWxpdHkiLCJvcGVuRHJvcGRvd25UcmlnZ2VyIiwiaGFzQ2xhc3MiLCJkcm9wZG93biIsImZvY3VzIiwiZHJvcGRvd25DbG9zZXIiLCJjbG9zZXN0IiwicG9wb3ZlciIsImNzc3RleHQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsInJlc2l6ZWNyb3AiLCJvbktleURvd24iLCJldmVudCIsImNhbGwiLCJvbkVudGVyIiwicGFyc2VJbnQiLCJrZXlDb2RlIiwib25TcGFjZSIsIm9uVGFiIiwic2hpZnRLZXkiLCJvbkVzYyIsImNsaWNrT25UcnVlIiwibW9kYWwiLCJVdGlscyIsIndpbmRvd1Jlc2l6ZUNhbGxiYWNrIiwiJGh0bWwiLCJtb21lbnQiLCJtb21lbnRUb05vZGUiLCJpMThuSW5pdCIsImkxOG5Ub05vZGVzIiwidHJhbnNsYXRvckluaXQiLCJpMThuVXBkYXRlIiwibGluayIsImF0dHIiLCJ0aXRsZSIsInRleHRGIiwiaW5pdERvbSIsImluaXRGaXhlZFRyaWdnZXIiLCJ2YWx1ZXMiLCJ0b3AiLCIkY29udGFpbmVyIiwicmVzaXplIiwib2Zmc2V0IiwiY3NzIiwiaW5pdFJlc2l6ZVRyaWdnZXIiLCJvRWxlbWVudCIsInBJbnQiLCJzaXplIiwiaGVpZ2h0IiwiYXBwZW5kRG9tIiwiZW1wdHkiLCJhcHBlbmQiLCJkcmFnZ2FibGUiLCJ0cmlnZ2VyWm9uZSIsInNjcm9sbFNwZWVkIiwiZkFsbFZhbHVlRnVuYyIsImRyb3BwYWJsZVNlbGVjdG9yIiwiY29uZiIsImRpc3RhbmNlIiwiaGFuZGxlIiwiY3Vyc29yQXQiLCJsZWZ0IiwicmVmcmVzaFBvc2l0aW9ucyIsInNjcm9sbCIsImRyYWciLCJzdG9wIiwiaGVscGVyIiwiZWFjaCIsIiR0aGlzIiwiYm90dG9tUG9zIiwiY2xlYXJJbnRlcnZhbCIsInBhZ2VYIiwicGFnZVkiLCJtb3ZlVXAiLCJ3aW5kb3dSZXNpemUiLCJzZXRJbnRlcnZhbCIsIm1vdmVEb3duIiwidGFyZ2V0IiwiZGF0YUZvciIsInJlbW92ZUluRm9jdXMiLCJkcm9wcGFibGUiLCJmVmFsdWVGdW5jIiwiZk92ZXJDYWxsYmFjayIsImRyb3BwYWJsZU92ZXIiLCJmT3V0Q2FsbGJhY2siLCJkcm9wcGFibGVPdXQiLCJ0b2xlcmFuY2UiLCJob3ZlckNsYXNzIiwiZHJvcCIsIm92ZXIiLCJvdXQiLCJ1aSIsIm5hbm8iLCJTZXR0aW5ncyIsImJEaXNhYmxlTmFub1Njcm9sbCIsImFwcFNldHRpbmdzR2V0IiwibmFub1Njcm9sbGVyIiwiaU9TTmF0aXZlU2Nyb2xsaW5nIiwicHJldmVudFBhZ2VTY3JvbGxpbmciLCJzYXZlVHJpZ2dlciIsInRvU3RyaW5nIiwiZW5kIiwiZW1haWxzVGFncyIsIkVtYWlsTW9kZWwiLCJmQWxsQmluZGluZ3MiLCJmQXV0b0NvbXBsZXRlU291cmNlIiwiYXV0b0NvbXBsZXRlU291cmNlIiwiaW5wdXREZWxpbWl0ZXJzIiwiZkZvY3VzQ2FsbGJhY2siLCJmb2N1c2VkIiwiaW5wdXRvc2F1cnVzIiwicGFyc2VPbkJsdXIiLCJhbGxvd0RyYWdBbmREcm9wIiwiZm9jdXNDYWxsYmFjayIsInNwbGl0SG9vayIsInN1YnN0ciIsInNwbGl0RW1haWxMaW5lIiwicGFyc2VIb29rIiwiaW5wdXQiLCJmbGF0dGVuIiwiaW5wdXRWYWx1ZSIsInBhcnNlRW1haWxMaW5lIiwibGVuZ3RoIiwiaXRlbSIsImlzT2JqZWN0IiwidG9MaW5lIiwiY2hhbmdlIiwiJG9FbCIsInZhbCIsImNvbW1hbmQiLCJqcUVsZW1lbnQiLCJpc0NvbW1hbmQiLCJFcnJvciIsImVuYWJsZWQiLCJvYnNlcnZhYmxlIiwiY2FuRXhlY3V0ZSIsIl9fcmVhbENhbkV4ZWN1dGUiLCJjb21wdXRlZCIsInJlc3VsdCIsInByb3AiLCJleHRlbmRlcnMiLCJ0cmltbWVyIiwicmVhZCIsIndyaXRlIiwibmV3VmFsdWUiLCJwb3NJbnRlcmVyIiwiZGVmYXVsdFZhbCIsImxpbWl0ZWRMaXN0IiwiY3VycmVudFZhbHVlIiwibGlzdCIsImlzTm9uRW1wdHlBcnJheSIsImluQXJyYXkiLCJleHRlbmQiLCJub3RpZnkiLCJ2YWx1ZUhhc011dGF0ZWQiLCJyZXZlcnNpYmxlIiwiY29tbWl0IiwicmV2ZXJzZSIsImNvbW1pdGVkVmFsdWUiLCJ0b2dnbGVTdWJzY3JpYmUiLCJvcHRpb25zIiwidG9nZ2xlU3Vic2NyaWJlUHJvcGVydHkiLCJwcmV2IiwibmV4dCIsImZhbHNlVGltZW91dCIsIm9wdGlvbiIsImlGYWxzZVRpbWVvdXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic3BlY2lhbFRocm90dGxlIiwiaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXRWYWx1ZSIsImlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0IiwidmFsdWVGb3JSZWFkIiwiYlZhbHVlIiwiaWRsZVRyaWdnZXIiLCJJZGxlIiwiZm4iLCJ2YWxpZGF0ZU5vbmUiLCJoYXNFcnJvciIsInZhbGlkYXRlRW1haWwiLCJ0ZXN0IiwidmFsaWRhdGVTaW1wbGVFbWFpbCIsImRlbGV0ZUFjY2Vzc0hlbHBlciIsInZhbGlkYXRlRnVuYyIsImhhc0Z1bmNFcnJvciIsInRyaW0iLCJpc0FycmF5IiwiaXNGdW5jIiwiaXNVbmQiLCJpc1VuZGVmaW5lZCIsImlzTnVsbCIsImhhcyIsImJpbmQiLCJub29wIiwibm9vcFRydWUiLCJub29wRmFsc2UiLCJzaWxlbnRUcnlDYXRjaCIsImZ1bmMiLCJlIiwiaXNOb3JtYWwiLCJpc1Bvc051bWVyaWMiLCJpbmNsdWRlWmVybyIsImRlZmF1bHRWYWx1ciIsImlzTmFOIiwicFN0cmluZyIsInBCb29sIiwiYm9vbFRvQWpheCIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvbXBvbmVudCIsImRlY29kZVVSSUNvbXBvbmVudCIsImRlY29kZVVSSSIsInVybCIsImVuY29kZVVSSSIsInNpbXBsZVF1ZXJ5UGFyc2VyIiwicXVlcnlTdHJpbmciLCJpbmRleCIsImxlbiIsInRlbXAiLCJxdWVyaWVzIiwic3BsaXQiLCJwYXJhbXMiLCJmYWtlTWQ1IiwibGluZSIsImxpbmVMZW4iLCJNYXRoIiwicm91bmQiLCJyYW5kb20iLCJlbmNvZGVIdG1sIiwiZXNjYXBlIiwic3BsaXRQbGFpblRleHQiLCJwcmVmaXgiLCJzdWJUZXh0Iiwic3BhY2VQb3MiLCJuZXdMaW5lUG9zIiwic3Vic3RyaW5nIiwidGltZU91dEFjdGlvbiIsInRpbWVPdXRzIiwiYWN0aW9uIiwiZkZ1bmN0aW9uIiwidGltZU91dCIsInRpbWVPdXRBY3Rpb25TZWNvbmQiLCJkZU1vZHVsZSIsIm0iLCJpbkZvY3VzIiwiYWN0aXZlRWxlbWVudCIsIl9faW5Gb2N1c0NhY2hlIiwiZm9yY2UiLCJibHVyIiwiYWN0aXZlRWwiLCJyZW1vdmVTZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJzZWwiLCJyZW1vdmVBbGxSYW5nZXMiLCJzZWxlY3Rpb24iLCJyZXBseVN1YmplY3RBZGQiLCJzdWJqZWN0IiwidG9VcHBlckNhc2UiLCJyZXBsYWNlIiwicmUiLCJmd2QiLCJwYXJ0cyIsInByZWZpeElzUmUiLCJwYXJ0IiwidHJpbW1lZFBhcnQiLCJqb2luIiwicm91bmROdW1iZXIiLCJudW0iLCJkZWMiLCJwb3ciLCJmcmllbmRseVNpemUiLCJzaXplSW5CeXRlcyIsImxvZyIsImRlc2MiLCJjb25zb2xlIiwiZGVsZWdhdGVSdW4iLCJvYmplY3QiLCJtZXRob2ROYW1lIiwia2lsbEN0cmxBQ3RybFMiLCJjdHJsS2V5IiwiYWx0S2V5Iiwia2V5Iiwid2hpY2giLCJTIiwicHJldmVudERlZmF1bHQiLCJBIiwic2VuZGVyIiwic3JjRWxlbWVudCIsImNvbnRlbnRFZGl0YWJsZSIsInRhZ05hbWUiLCJtYXRjaCIsImNsZWFyIiwiY3JlYXRlQ29tbWFuZExlZ2FjeSIsImNvbnRleHQiLCJmRXhlY3V0ZSIsImZDYW5FeGVjdXRlIiwiZlJlc3VsdCIsImZOb25FbXB0eSIsImFyZ3MiLCJhcHBseSIsImNvbnZlcnRUaGVtZU5hbWUiLCJtZW1vaXplIiwidGhlbWUiLCJxdW90ZU5hbWUiLCJuYW1lIiwibWljcm90aW1lIiwiRGF0ZSIsImdldFRpbWUiLCJ0aW1lc3RhbXAiLCJjb252ZXJ0TGFuZ05hbWUiLCJsYW5ndWFnZSIsImlzRW5nIiwiZHJhZ2dhYmxlUGxhY2UiLCJhcHBlbmRUbyIsImRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciIsImRvbUl0ZW0iLCJkaXNhYmxlZCIsImNsZWFyQnFTd2l0Y2hlciIsImJvZHkiLCJyZW1vdmUiLCJyZW1vdmVBdHRyIiwicHJldmlld01lc3NhZ2UiLCJpc0h0bWwiLCJwcmludCIsImRhdGUiLCJmcm9tQ3JlZHMiLCJ0b0NyZWRzIiwidG9MYWJlbCIsImNjQ2xhc3MiLCJjY0NyZWRzIiwiY2NMYWJlbCIsIndpbiIsIm9wZW4iLCJkb2MiLCJib2R5Q2xvbmUiLCJjbG9uZSIsImJvZHlDbGFzcyIsImh0bWwiLCJjbG9zZSIsInNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uIiwiZkNhbGxiYWNrIiwia29UcmlnZ2VyIiwidGltZXIiLCJ0eXBlIiwiY2FjaGVkIiwicmVxdWVzdEFjdGlvbiIsInJlcXVlc3RQYXJhbWV0ZXJzIiwiUmVzdWx0IiwiVHJ1ZVJlc3VsdCIsIkZhbHNlUmVzdWx0Iiwic2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24iLCJzZXR0aW5nc1NhdmVIZWxwZXJTdWJzY3JpYmVGdW5jdGlvbiIsInJlbW90ZSIsInNldHRpbmdOYW1lIiwiZlRyaWdnZXJGdW5jdGlvbiIsInNhdmVBZG1pbkNvbmZpZyIsInNhdmVTZXR0aW5ncyIsImZpbmRFbWFpbEFuZExpbmtzIiwiQXV0b2xpbmtlciIsIm5ld1dpbmRvdyIsInN0cmlwUHJlZml4IiwidXJscyIsImVtYWlsIiwibWVudGlvbiIsInBob25lIiwiaGFzaHRhZyIsInJlcGxhY2VGbiIsImdldFR5cGUiLCJtYXRjaGVkVGV4dCIsImh0bWxUb1BsYWluIiwicG9zIiwiaVAxIiwiaVAyIiwiaVAzIiwiY29udmVydEJsb2NrcXVvdGUiLCJibG9ja3F1b3RlVGV4dCIsImNvbnZlcnREaXZzIiwiZGl2VGV4dCIsImNvbnZlcnRQcmUiLCJmaXhBdHRpYnV0ZVZhbHVlIiwiY29udmVydExpbmtzIiwiJGRpdiIsInBsYWluVG9IdG1sIiwicGxhaW4iLCJmaW5kRW1haWxBbmRMaW5rc0luVGV4dCIsImJJbiIsImJEbyIsImJTdGFydCIsImFOZXh0VGV4dCIsInNMaW5lIiwiaUluZGV4IiwiYVRleHQiLCJmb2xkZXJMaXN0T3B0aW9uc0J1aWxkZXIiLCJhU3lzdGVtIiwiYUxpc3QiLCJhRGlzYWJsZWQiLCJhSGVhZGVyTGluZXMiLCJpVW5EZWVwIiwiZkRpc2FibGVDYWxsYmFjayIsImZWaXNpYmxlQ2FsbGJhY2siLCJmUmVuYW1lQ2FsbGJhY2siLCJiU3lzdGVtIiwiYkJ1aWxkVW52aXNpYmxlIiwib0l0ZW0iLCJiU2VwIiwiaUxlbiIsImFSZXN1bHQiLCJzRGVlcFByZWZpeCIsImlkIiwic3lzdGVtIiwic2Vwb3JhdG9yIiwiZnVsbE5hbWVSYXciLCJzZWxlY3RhYmxlIiwic3ViU2NyaWJlZCIsImV4aXN0ZW4iLCJoYXNTdWJTY3JpYmVkU3ViZm9sZGVycyIsIlVzZXIiLCJBcnJheSIsImRlZXAiLCJzdWJGb2xkZXJzIiwic2VsZWN0RWxlbWVudCIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJhZGRSYW5nZSIsImNyZWF0ZVRleHRSYW5nZSIsIm1vdmVUb0VsZW1lbnRUZXh0Iiwic2VsZWN0IiwiZGVib3VuY2UiLCJHbG9iYWxzRGF0YSIsInRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZSIsImNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZSIsImdldENvbmZpZ3VyYXRpb25Gcm9tU2NyaXB0VGFnIiwiY29uZmlndXJhdGlvbiIsInBhcnNlIiwiZGlzcG9zZU9uZSIsInByb3BPclZhbHVlIiwiZGlzcG9zYWJsZSIsImRpc3Bvc2UiLCJkaXNwb3NlT2JqZWN0IiwiZGlzcG9zYWJsZXMiLCJvYmplY3RGb3JFYWNoIiwiZGVsZWdhdGVSdW5PbkRlc3Ryb3kiLCJvYmplY3RPck9iamVjdHMiLCJvbkRlc3Ryb3kiLCJhcHBlbmRTdHlsZXMiLCIkc3R5bGVUYWciLCJfX3RoZW1lVGltZXIiLCJfX3RoZW1lQWpheCIsImNoYW5nZVRoZW1lIiwidGhlbWVUcmlnZ2VyIiwidGhlbWVMaW5rIiwiY2xlYXJUaW1lciIsInRoZW1lU3R5bGUiLCJBbmltYXRlIiwiYWJvcnQiLCJhamF4IiwiZGF0YVR5cGUiLCJ0aGVuIiwiYWZ0ZXIiLCJjb21wdXRlZFBhZ2VuYXRvckhlbHBlciIsImtvQ3VycmVudFBhZ2UiLCJrb1BhZ2VDb3VudCIsImN1cnJlbnRQYWdlIiwicGFnZUNvdW50IiwiZkFkZCIsImN1c3RvbU5hbWUiLCJjdXJyZW50IiwiY3VzdG9tIiwidW5zaGlmdCIsImdldEZpbGVFeHRlbnNpb24iLCJmaWxlTmFtZSIsInRvTG93ZXJDYXNlIiwicG9wIiwibWltZUNvbnRlbnRUeXBlIiwiZXh0IiwiTWltZSIsImlzVHJhbnNwYXJlbnQiLCJjb2xvciIsImdldFJlYWxIZWlnaHQiLCIkaGNvbnQiLCJyZXNpemVBbmRDcm9wIiwiaW1nIiwiSW1hZ2UiLCJvbmxvYWQiLCJkaWZmIiwiY2FudmFzIiwiY3JlYXRlRWxlbWVudCIsImN0eCIsImdldENvbnRleHQiLCJmaWxsU3R5bGUiLCJmaWxsUmVjdCIsImRyYXdJbWFnZSIsInRvRGF0YVVSTCIsInNyYyIsIm1haWxUb0hlbHBlciIsIm1haWxUb1VybCIsIlBvcHVwQ29tcG9zZVZpZXdNb2RlbCIsInRvIiwiY2MiLCJiY2MiLCJxdWVyeSIsInNob3dTY3JlZW5Qb3B1cCIsIkVtcHR5IiwiZG9tUmVhZHkiLCJ0aW1lb3V0IiwiU3RyaW5nIiwic3RyIiwic3RhcnQiLCJTRVRUSU5HUyIsIl9fcmxhaF9kYXRhIiwiQVBQX1NFVFRJTkdTIiwiU3lzdGVtIiwic2V0dGluZ3NHZXQiLCJzZXR0aW5nc1NldCIsImNhcGEiLCJfX3NpemVzIiwiJGRvYyIsIiRib2R5IiwicG9zaXRpb24iLCJzdGFydE1pY3JvdGltZSIsImNvbW11bml0eSIsIlJMX0NPTU1VTklUWSIsInJhdGVMaW1pdCIsInVzZUtleWJvYXJkU2hvcnRjdXRzIiwic1VzZXJBZ2VudCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImJJRSIsImJDaHJvbWUiLCJiU2FmYXJpIiwiYkFuaW1hdGlvblN1cHBvcnRlZCIsImJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCIsIlhNTEh0dHBSZXF1ZXN0IiwiYklzSHR0cHMiLCJsb2NhdGlvbiIsInByb3RvY29sIiwiaHRtbEVkaXRvckRlZmF1bHRDb25maWciLCJncm91cHMiLCJodG1sRWRpdG9yTGFuZ3NNYXAiLCJiQWxsb3dQZGZQcmV2aWV3IiwibWltZVR5cGVzIiwiVklFV19NT0RFTFMiLCJzZXR0aW5ncyIsIm1vdmVBY3Rpb24iLCJsZWZ0UGFuZWxEaXNhYmxlZCIsImxlZnRQYW5lbFR5cGUiLCJsZWZ0UGFuZWxXaWR0aCIsInBvcHVwVmlzaWJpbGl0eU5hbWVzIiwib2JzZXJ2YWJsZUFycmF5IiwicG9wdXBWaXNpYmlsaXR5Iiwia2V5U2NvcGVSZWFsIiwiQWxsIiwia2V5U2NvcGVGYWtlIiwia2V5U2NvcGUiLCJNZW51IiwiQ29tcG9zZSIsImZpbHRlciIsImVsIiwiY2xhc3NOYW1lIiwic2V0U2NvcGUiLCJnZXRTY29wZSIsIl9fQVBQX18iLCJpQWpheEVycm9yQ291bnQiLCJpVG9rZW5FcnJvckNvdW50IiwiaU1lc3NhZ2VCb2R5Q2FjaGVDb3VudCIsImJVbmxvYWQiLCJjdXJyZW50U2NyZWVuIiwiZGVmYXVsdFNjcmVlbk5hbWUiLCJTQ1JFRU5TIiwiVmlld1R5cGUiLCJQb3B1cCIsIkxlZnQiLCJSaWdodCIsIkNlbnRlciIsImhpZGVMb2FkaW5nIiwiY3JlYXRlQ29tbWFuZCIsImFkZFNldHRpbmdzVmlld01vZGVsIiwiU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyIsInRlbXBsYXRlIiwibGFiZWxOYW1lIiwicm91dGUiLCJpc0RlZmF1bHQiLCJfX3JsU2V0dGluZ3NEYXRhIiwiTGFiZWwiLCJUZW1wbGF0ZSIsIlJvdXRlIiwiSXNEZWZhdWx0IiwicmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwiLCJkaXNhYmxlU2V0dGluZ3NWaWV3TW9kZWwiLCJyb3V0ZU9mZiIsImhhc2hlciIsImNoYW5nZWQiLCJhY3RpdmUiLCJyb3V0ZU9uIiwic2NyZWVuIiwic2NyZWVuTmFtZSIsImdldFNjcmVlblBvcHVwIiwiUG9wdVZpZXdNb2RlbENsYXNzIiwiaGlkZVNjcmVlblBvcHVwIiwiVmlld01vZGVsQ2xhc3NUb0hpZGUiLCJNb2RhbFZpZXciLCJfX3ZtIiwiX19kb20iLCJtb2RhbFZpc2liaWxpdHkiLCJ2bVJ1bkhvb2siLCJob29rTmFtZSIsIlZpZXdNb2RlbENsYXNzIiwiX19uYW1lcyIsInJ1bkhvb2siLCJidWlsZFZpZXdNb2RlbCIsInZtU2NyZWVuIiwiX19idWlsZGVkIiwidm1Eb20iLCJ2bSIsIl9fdHlwZSIsInZtUGxhY2UiLCJvblNob3dUcmlnZ2VyIiwib25IaWRlVHJpZ2dlciIsInZpZXdNb2RlbE5hbWUiLCJfX25hbWUiLCJ2aWV3TW9kZWxOYW1lcyIsInZpZXdNb2RlbFRlbXBsYXRlSUQiLCJfX3RlbXBsYXRlSUQiLCJ2aWV3TW9kZWxQb3NpdGlvbiIsInZpZXdNb2RlbERvbSIsImNhbmNlbENvbW1hbmQiLCJjbG9zZUNvbW1hbmQiLCJzdG9yZUFuZFNldEtleVNjb3BlIiwicmVzdG9yZUtleVNjb3BlIiwiYXBwbHlCaW5kaW5nQWNjZXNzb3JzVG9Ob2RlIiwicmVnaXN0ZXJQb3B1cEtleURvd24iLCJWaWV3TW9kZWxDbGFzc1RvU2hvdyIsIndhcm1VcFNjcmVlblBvcHVwIiwiaXNQb3B1cFZpc2libGUiLCJzY3JlZW5PblJvdXRlIiwic3ViUGFydCIsImlzU2FtZVNjcmVlbiIsImNyb3NzIiwiX19zdGFydGVkIiwidmlld01vZGVscyIsImRlZmVyIiwidmlld01vZGVsVmlzaWJpbGl0eSIsIl9fY3Jvc3MiLCJzdGFydFNjcmVlbnMiLCJzY3JlZW5zQ2xhc3NlcyIsIkNTY3JlZW4iLCJfX3N0YXJ0IiwiY3Jvc3Nyb2FkcyIsImNyZWF0ZSIsImFkZFJvdXRlIiwiaW5pdGlhbGl6ZWQiLCJhZGQiLCJzZXRIYXNoIiwiaGFzaCIsInNpbGVuY2UiLCJjbWQiLCJ2aWV3RGVjb3JhdG9yIiwidGVtcGxhdGVJRCIsInBvcHVwRGVjb3JhdG9yIiwiY29tbWFuZERlY29yYXRvciIsImRlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsIm5vcm1DYW5FeGVjdXRlIiwic2V0dGluZ3NNZW51S2V5c0hhbmRsZXIiLCIkaXRlbXMiLCJoYW5kbGVyIiwidXAiLCJzaG9ydGN1dCIsInJlc3VsdEhhc2giLCJlcSIsIlRpbWUyMDBtcyIsIkkxOE5fREFUQSIsInJhaW5sb29wSTE4TiIsIkkxOE5fTk9USUZJQ0FUSU9OX0RBVEEiLCJJMThOX05PVElGSUNBVElPTl9NQVAiLCJJbnZhbGlkVG9rZW4iLCJBdXRoRXJyb3IiLCJBY2Nlc3NFcnJvciIsIkNvbm5lY3Rpb25FcnJvciIsIkNhcHRjaGFFcnJvciIsIlNvY2lhbEZhY2Vib29rTG9naW5BY2Nlc3NEaXNhYmxlIiwiU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSIsIlNvY2lhbEdvb2dsZUxvZ2luQWNjZXNzRGlzYWJsZSIsIkRvbWFpbk5vdEFsbG93ZWQiLCJBY2NvdW50Tm90QWxsb3dlZCIsIkFjY291bnRUd29GYWN0b3JBdXRoUmVxdWlyZWQiLCJBY2NvdW50VHdvRmFjdG9yQXV0aEVycm9yIiwiQ291bGROb3RTYXZlTmV3UGFzc3dvcmQiLCJDdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QiLCJOZXdQYXNzd29yZFNob3J0IiwiTmV3UGFzc3dvcmRXZWFrIiwiTmV3UGFzc3dvcmRGb3JiaWRkZW4iLCJDb250YWN0c1N5bmNFcnJvciIsIkNhbnRHZXRNZXNzYWdlTGlzdCIsIkNhbnRHZXRNZXNzYWdlIiwiQ2FudERlbGV0ZU1lc3NhZ2UiLCJDYW50TW92ZU1lc3NhZ2UiLCJDYW50Q29weU1lc3NhZ2UiLCJDYW50U2F2ZU1lc3NhZ2UiLCJDYW50U2VuZE1lc3NhZ2UiLCJJbnZhbGlkUmVjaXBpZW50cyIsIkNhbnRTYXZlRmlsdGVycyIsIkNhbnRHZXRGaWx0ZXJzIiwiRmlsdGVyc0FyZU5vdENvcnJlY3QiLCJDYW50Q3JlYXRlRm9sZGVyIiwiQ2FudFJlbmFtZUZvbGRlciIsIkNhbnREZWxldGVGb2xkZXIiLCJDYW50RGVsZXRlTm9uRW1wdHlGb2xkZXIiLCJDYW50U3Vic2NyaWJlRm9sZGVyIiwiQ2FudFVuc3Vic2NyaWJlRm9sZGVyIiwiQ2FudFNhdmVTZXR0aW5ncyIsIkNhbnRTYXZlUGx1Z2luU2V0dGluZ3MiLCJEb21haW5BbHJlYWR5RXhpc3RzIiwiQ2FudEluc3RhbGxQYWNrYWdlIiwiQ2FudERlbGV0ZVBhY2thZ2UiLCJJbnZhbGlkUGx1Z2luUGFja2FnZSIsIlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSIsIkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUiLCJMaWNlbnNpbmdFeHBpcmVkIiwiTGljZW5zaW5nQmFubmVkIiwiRGVtb1NlbmRNZXNzYWdlRXJyb3IiLCJEZW1vQWNjb3VudEVycm9yIiwiQWNjb3VudEFscmVhZHlFeGlzdHMiLCJBY2NvdW50RG9lc05vdEV4aXN0IiwiTWFpbFNlcnZlckVycm9yIiwiSW52YWxpZElucHV0QXJndW1lbnQiLCJVbmtub3duTm90aWZpY2F0aW9uIiwiVW5rbm93bkVycm9yIiwidmFsdWVMaXN0IiwiZGVmYXVsVmFsdWUiLCJ2YWx1ZU5hbWUiLCJpMThuVG9Ob2RlIiwiZWxlbWVudHMiLCJhbmltYXRlIiwibGV0dGVyZngiLCJyZWxvYWREYXRhIiwibW9tZW50b3JSZWxvYWQiLCJpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UiLCJpbml0T25TdGFydE9yTGFuZ0NoYW5nZSIsInN0YXJ0Q2FsbGJhY2siLCJsYW5nQ2FsbGJhY2siLCJnZXROb3RpZmljYXRpb24iLCJjb2RlIiwibWVzc2FnZSIsImRlZkNvZGUiLCJDbGllbnRWaWV3RXJyb3IiLCJnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2UiLCJyZXNwb25zZSIsIkVycm9yQ29kZSIsIkVycm9yTWVzc2FnZSIsImdldFVwbG9hZEVycm9yRGVzY0J5Q29kZSIsIkZpbGVJc1Rvb0JpZyIsIkZpbGVQYXJ0aWFsbHlVcGxvYWRlZCIsIkZpbGVOb1VwbG9hZGVkIiwiTWlzc2luZ1RlbXBGb2xkZXIiLCJGaWxlT25TYXZlaW5nRXJyb3IiLCJyZWxvYWQiLCJhZG1pbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwibGFuZ0xpbmsiLCJjYWNoZSIsImlzUnRsIiwiUk9PVCIsIkhBU0hfUFJFRklYIiwiU0VSVkVSX1BSRUZJWCIsIlNVQl9RVUVSWV9QUkVGSVgiLCJWRVJTSU9OIiwiV0VCX1BSRUZJWCIsIlZFUlNJT05fUFJFRklYIiwiU1RBVElDX1BSRUZJWCIsIkFETUlOX0hPU1RfVVNFIiwiQURNSU5fUEFUSCIsIkFVVEhfUFJFRklYIiwicG9wdWxhdGVBdXRoU3VmZml4Iiwic3ViUXVlcnlQcmVmaXgiLCJyb290Iiwic3RhcnR1cFVybCIsInJvb3RBZG1pbiIsInJvb3RVc2VyIiwiYXR0YWNobWVudFJhdyIsImRvd25sb2FkIiwiY3VzdG9tU3BlY1N1ZmZpeCIsImF0dGFjaG1lbnREb3dubG9hZCIsImF0dGFjaG1lbnRQcmV2aWV3IiwiYXR0YWNobWVudFRodW1ibmFpbFByZXZpZXciLCJhdHRhY2htZW50UHJldmlld0FzUGxhaW4iLCJhdHRhY2htZW50RnJhbWVkIiwic2VydmVyUmVxdWVzdCIsInVwbG9hZCIsInVwbG9hZENvbnRhY3RzIiwidXBsb2FkQmFja2dyb3VuZCIsIm1lc3NhZ2VWaWV3TGluayIsInJlcXVlc3RIYXNoIiwibWVzc2FnZURvd25sb2FkTGluayIsImF2YXRhckxpbmsiLCJwdWJsaWNMaW5rIiwidXNlckJhY2tncm91bmQiLCJwaHBJbmZvIiwibGFuZyIsImlzQWRtaW4iLCJleHBvcnRDb250YWN0c1ZjZiIsImV4cG9ydENvbnRhY3RzQ3N2Iiwic29jaWFsR29vZ2xlIiwieGF1dGgiLCJzb2NpYWxUd2l0dGVyIiwic29jaWFsRmFjZWJvb2siLCJzdGF0aWNQcmVmaXgiLCJwYXRoIiwiZW1wdHlDb250YWN0UGljIiwic291bmQiLCJub3RpZmljYXRpb25NYWlsSWNvbiIsIm9wZW5QZ3BKcyIsIm9wZW5QZ3BXb3JrZXJKcyIsIm9wZW5QZ3BXb3JrZXJQYXRoIiwidGhlbWVQcmV2aWV3TGluayIsImluYm94IiwiaW5ib3hGb2xkZXJOYW1lIiwiYWJvdXQiLCJtYWlsQm94IiwiZm9sZGVyIiwicGFnZSIsInNlYXJjaCIsInRocmVhZFVpZCIsInJlc3VsdFRocmVhZFVpZCIsIlJlbW90ZUFkbWluQWpheCIsIm9SZXF1ZXN0cyIsImFkbWluTG9naW4iLCJzTG9naW4iLCJzUGFzc3dvcmQiLCJkZWZhdWx0UmVxdWVzdCIsImFkbWluTG9nb3V0Iiwib0RhdGEiLCJzYXZlQWRtaW5Db25maWdIZWxwZXIiLCJ2YWx1ZUZuIiwiZG9tYWluTGlzdCIsImJJbmNsdWRlQWxpYXNlcyIsInBsdWdpbkxpc3QiLCJwYWNrYWdlc0xpc3QiLCJjb3JlRGF0YSIsInVwZGF0ZUNvcmVEYXRhIiwicGFja2FnZUluc3RhbGwiLCJvUGFja2FnZSIsImZpbGUiLCJwYWNrYWdlRGVsZXRlIiwiZG9tYWluIiwic05hbWUiLCJwbHVnaW4iLCJkb21haW5EZWxldGUiLCJkb21haW5EaXNhYmxlIiwiYkRpc2FibGVkIiwiTmFtZSIsIkRpc2FibGVkIiwicGx1Z2luU2V0dGluZ3NVcGRhdGUiLCJvQ29uZmlnIiwibGljZW5zaW5nIiwiYkZvcmNlIiwiRm9yY2UiLCJsaWNlbnNpbmdBY3RpdmF0ZSIsInNEb21haW4iLCJzS2V5IiwiRG9tYWluIiwiS2V5IiwicGx1Z2luRGlzYWJsZSIsImNyZWF0ZURvbWFpbkFsaWFzIiwic0FsaWFzIiwiQWxpYXMiLCJjcmVhdGVPclVwZGF0ZURvbWFpbiIsImJDcmVhdGUiLCJzSW5jSG9zdCIsImlJbmNQb3J0Iiwic0luY1NlY3VyZSIsImJJbmNTaG9ydExvZ2luIiwiYlVzZVNpZXZlIiwic1NpZXZlQWxsb3dSYXciLCJzU2lldmVIb3N0IiwiaVNpZXZlUG9ydCIsInNTaWV2ZVNlY3VyZSIsInNPdXRIb3N0IiwiaU91dFBvcnQiLCJzT3V0U2VjdXJlIiwiYk91dFNob3J0TG9naW4iLCJiT3V0QXV0aCIsImJPdXRQaHBNYWlsIiwic1doaXRlTGlzdCIsInRlc3RDb25uZWN0aW9uRm9yRG9tYWluIiwidGVzdENvbnRhY3RzIiwic2F2ZU5ld0FkbWluUGFzc3dvcmQiLCJhZG1pblBpbmciLCJBYnN0cmFjdEFqYXhSZW1vdGUiLCJTVUJTIiwic3ViIiwic3ViRnVuYyIsInN1Yk5hbWUiLCJwdWIiLCJQbHVnaW5zIiwiaXRlbXMiLCJNRVNTQUdFU19QRVJfUEFHRSIsIk1FU1NBR0VTX1BFUl9QQUdFX1ZBTFVFUyIsIkNPTlRBQ1RTX1BFUl9QQUdFIiwiREVGQVVMVF9BSkFYX1RJTUVPVVQiLCJTRUFSQ0hfQUpBWF9USU1FT1VUIiwiU0VORF9NRVNTQUdFX0FKQVhfVElNRU9VVCIsIlNBVkVfTUVTU0FHRV9BSkFYX1RJTUVPVVQiLCJDT05UQUNUU19TWU5DX0FKQVhfVElNRU9VVCIsIlVOVVNFRF9PUFRJT05fVkFMVUUiLCJDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUiLCJJTUFQX0RFRkFVTFRfUE9SVCIsIklNQVBfREVGQVVMVF9TRUNVUkVfUE9SVCIsIlNNVFBfREVGQVVMVF9QT1JUIiwiU01UUF9ERUZBVUxUX1NFQ1VSRV9QT1JUIiwiU0lFVkVfREVGQVVMVF9QT1JUIiwiTUVTU0FHRV9CT0RZX0NBQ0hFX0xJTUlUIiwiQUpBWF9FUlJPUl9MSU1JVCIsIlRPS0VOX0VSUk9SX0xJTUlUIiwiUkFJTkxPT1BfVFJJQUxfS0VZIiwiREFUQV9JTUFHRV9VU0VSX0RPVF9QSUMiLCJEQVRBX0lNQUdFX1RSQU5TUF9QSUMiLCJEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDIiwiQWJzdHJhY3RWaWV3TmV4dCIsIk5vbmUiLCJzQ3VycmVudEtleVNjb3BlIiwic0RlZmF1bHRLZXlTY29wZSIsImJEaXNhYmVDbG9zZU9uRXNjIiwiRXNjIiwiQmFja3NwYWNlIiwiU29jaWFsU3RvcmUiLCJnb29nbGUiLCJ0d2l0dGVyIiwiZmFjZWJvb2siLCJkcm9wYm94IiwiY2xpZW50SUQiLCJjbGllbnRTZWNyZXQiLCJhcGlLZXkiLCJsb2FkaW5nIiwidXNlck5hbWUiLCJsb2dnaW5lZCIsImF1dGgiLCJhdXRoR21haWwiLCJkcml2ZSIsInByZXZpZXciLCJjbGllbnRTZXR0aW5ncyIsImFwaUtleVNldHRpbmdzIiwiYXBwSUQiLCJhcHBTZWNyZXQiLCJzdXBwb3J0ZWQiLCJjb25zdW1lcktleSIsImNvbnN1bWVyU2VjcmV0IiwicG9wdWxhdGUiLCJhcHBlbmREcm9wYm94IiwiRHJvcGJveCIsImdldEVsZW1lbnRCeUlkIiwic2NyaXB0IiwiYXBwZW5kQ2hpbGQiLCJBYnN0cmFjdENvbXBvbmVudCIsImZ1bmNUb0Rpc3Bvc2UiLCJjb21wb25lbnRFeHBvcnRIZWxwZXIiLCJDbGFzc09iamVjdCIsImNyZWF0ZVZpZXdNb2RlbCIsImNvbXBvbmVudEluZm8iLCJpbmxpbmUiLCJTSU1QTEVfSE9PS1MiLCJVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTIiwiQURNSU5fVklFV19NT0RFTFNfSE9PS1MiLCJhZGRIb29rIiwiY2FsbGJhY2siLCJtYWluU2V0dGluZ3NHZXQiLCJyZW1vdGVSZXF1ZXN0IiwicGFyYW1ldGVycyIsImFkZFNldHRpbmdzVmlld01vZGVsRm9yQWRtaW4iLCJydW5TZXR0aW5nc1ZpZXdNb2RlbEhvb2tzIiwiS25vaW4iLCJ2aWV3IiwicGx1Z2luU2VjdGlvbiIsInBsdWdpbnMiLCJDb3JlQWRtaW5TdG9yZSIsImNvcmVSZWFsIiwiY29yZUNoYW5uZWwiLCJjb3JlVHlwZSIsImNvcmVVcGRhdGFibGUiLCJjb3JlQWNjZXNzIiwiY29yZVdhcm5pbmciLCJjb3JlQ2hlY2tpbmciLCJjb3JlVXBkYXRpbmciLCJjb3JlVmVyc2lvbiIsImNvcmVSZW1vdGVWZXJzaW9uIiwiY29yZVJlbW90ZVJlbGVhc2UiLCJjb3JlVmVyc2lvbkNvbXBhcmUiLCJfbW9tZW50IiwiX21vbWVudE5vdyIsInVwZGF0ZU1vbWVudE5vdyIsInVwZGF0ZU1vbWVudE5vd1VuaXgiLCJ1bml4IiwibW9tZW50Tm93IiwibW9tZW50Tm93VW5peCIsInNlYXJjaFN1YnRyYWN0Rm9ybWF0RGF0ZUhlbHBlciIsInN1YnRyYWN0IiwiZm9ybWF0IiwiZm9ybWF0Q3VzdG9tU2hvcnREYXRlIiwibm93IiwiZnJvbU5vdyIsIlRJTUUiLCJ5ZWFyIiwidGltZVN0YW1wSW5VVEMiLCJmb3JtYXRTdHIiLCJ0aW1lIiwiZ2V0QXBwIiwiTGFuZ3VhZ2VTdG9yZSIsImxhbmd1YWdlcyIsImxhbmd1YWdlc0FkbWluIiwibGFuZ3VhZ2VBZG1pbiIsInVzZXJMYW5ndWFnZSIsInVzZXJMYW5ndWFnZUFkbWluIiwiYUxhbmd1YWdlcyIsImFMYW5ndWFnZXNBZG1pbiIsIkFwcEFkbWluU3RvcmUiLCJkZXRlcm1pbmVVc2VyTGFuZ3VhZ2UiLCJkZXRlcm1pbmVVc2VyRG9tYWluIiwid2Vha1Bhc3N3b3JkIiwidXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzIiwiZGF0YUZvbGRlckFjY2VzcyIsImdldCIsIkFic3RyYWN0QXBwU3RvcmUiLCJka2ltU3RhdHVzIiwiZGtpbVZhbHVlIiwiY2xlYXJEdXBsaWNhdGVOYW1lIiwibmV3SW5zdGFuY2VGcm9tSnNvbiIsImluaXRCeUpzb24iLCJ2YWxpZGF0ZSIsIndpdGhvdXROYW1lIiwiRW1haWwiLCJEa2ltU3RhdHVzIiwiRGtpbVZhbHVlIiwiZnJpZW5kbHlWaWV3Iiwid3JhcFdpdGhMaW5rIiwidXNlRW5jb2RlSHRtbCIsInBhcnNlZFJlc3VsdCIsImFkZHJlc3NwYXJzZXIiLCJleGlzdHMiLCJhZGRyZXNzIiwiY29tcGFjdCIsImVtYWlsQWRkcmVzcyIsIkFic3RyYWN0SW5wdXQiLCJsYWJlbCIsInByZUxhYmVsIiwiZW5hYmxlIiwicGxhY2Vob2xkZXIiLCJsYWJlbGVkIiwicHJlTGFiZWxlZCIsInRyaWdnZXJlZCIsImNsYXNzRm9yVHJpZ2dlciIsInN1ZmZpeFZhbHVlIiwic2V0VHJpZ2dlclN0YXRlIiwiQ2FwYUFkbWluU3RvcmUiLCJhZGRpdGlvbmFsQWNjb3VudHMiLCJpZGVudGl0aWVzIiwiZ3JhdmF0YXIiLCJhdHRhY2htZW50VGh1bWJuYWlscyIsInNpZXZlIiwiZmlsdGVycyIsInRoZW1lcyIsIm9wZW5QR1AiLCJ0d29GYWN0b3JBdXRoIiwidHdvRmFjdG9yQXV0aEZvcmNlIiwidGVtcGxhdGVzIiwiQWRkaXRpb25hbEFjY291bnRzIiwiSWRlbnRpdGllcyIsIkdyYXZhdGFyIiwiQXR0YWNobWVudFRodW1ibmFpbHMiLCJTaWV2ZSIsIkZpbHRlcnMiLCJUaGVtZXMiLCJVc2VyQmFja2dyb3VuZCIsIk9wZW5QR1AiLCJUd29GYWN0b3IiLCJUd29GYWN0b3JGb3JjZSIsIlRlbXBsYXRlcyIsIlBhY2thZ2VBZG1pblN0b3JlIiwicGFja2FnZXMiLCJwYWNrYWdlc1JlYWwiLCJwYWNrYWdlc01haW5VcGRhdGFibGUiLCJqYXNzbCIsImFzeW5jIiwiYWxsIiwib25lcnJvciIsIlRoZW1lU3RvcmUiLCJ0aGVtZUJhY2tncm91bmROYW1lIiwidGhlbWVCYWNrZ3JvdW5kSGFzaCIsIlBsdWdpbkFkbWluU3RvcmUiLCJlcnJvciIsIkxpY2Vuc2VBZG1pblN0b3JlIiwibGljZW5zaW5nUHJvY2VzcyIsImxpY2Vuc2VWYWxpZCIsImxpY2Vuc2VFeHBpcmVkIiwibGljZW5zZUVycm9yIiwibGljZW5zZVRyaWdnZXIiLCJBYnN0cmFjdFNjcmVlbiIsInNTY3JlZW5OYW1lIiwiYVZpZXdNb2RlbHMiLCJyb3V0ZXMiLCJvQ3Jvc3MiLCJmTWF0Y2hlciIsIm9uUm91dGUiLCJydWxlcyIsIkRvbWFpbkFkbWluU3RvcmUiLCJkb21haW5zIiwiZG9tYWluc1dpdGhvdXRBbGlhc2VzIiwiYWxpYXMiLCJBYnN0cmFjdENoZWNrYm94IiwiZGlzYWJsZSIsInJlYWRPbmx5IiwiaW52ZXJ0ZWQiLCJsYWJlbEFuaW1hdGVkIiwiQ2hlY2tib3hDb21wb25lbnQiLCJvbkJsdXIiLCJvblJlYWR5Iiwib25Nb2RlQ2hhbmdlIiwiJGVsZW1lbnQiLCJyZXNpemVFZGl0b3IiLCJydW5PbkJsdXIiLCJibHVyVHJpZ2dlciIsImJsdXJUaW1lciIsImZvY3VzVHJpZ2dlciIsIm1vZGUiLCJjbGVhckNhY2hlZFNpZ25hdHVyZSIsImV4ZWNDb21tYW5kIiwiY2xlYXJDYWNoZSIsInNldFNpZ25hdHVyZSIsInNpZ25hdHVyZSIsImluc2VydEJlZm9yZSIsImNoZWNrRGlydHkiLCJyZXNldERpcnR5IiwiZ2V0RGF0YSIsIndyYXBJc0h0bWwiLCJfX3BsYWluIiwiZ2V0UmF3RGF0YSIsIm1vZGVUb2dnbGUiLCJzZXRNb2RlIiwic2V0SHRtbCIsInNldFBsYWluIiwiX19pbml0ZWQiLCJzZXREYXRhIiwicmVwbGFjZUh0bWwiLCJmaW5kIiwic2V0UmF3RGF0YSIsImluaXRGdW5jIiwiY29uZmlnIiwiYWxsb3dTb3VyY2UiLCJiaXRpIiwidG9vbGJhckdyb3VwcyIsIl9fY2ZnSW5pdGVkIiwicmVtb3ZlQnV0dG9ucyIsInJlbW92ZVBsdWdpbnMiLCJlbnRlck1vZGUiLCJDS0VESVRPUiIsIkVOVEVSX0JSIiwic2hpZnRFbnRlck1vZGUiLCJFTlRFUl9QIiwiZW52IiwiaXNDb21wYXRpYmxlIiwiVGFiIiwiRmlsZVJlYWRlciIsImRhdGFUcmFuc2ZlciIsImdldEZpbGVzQ291bnQiLCJnZXRGaWxlIiwiaW1hZ2VJZCIsInJlYWRlciIsIm9ubG9hZGVuZCIsInJlYWRBc0RhdGFVUkwiLCJyZW1vdmVNZW51SXRlbSIsIl9fcmVzaXphYmxlIiwiX19pbml0RWRpdG9yIiwiaGFzRm9jdXMiLCJmb2N1c01hbmFnZXIiLCJpbm5lckhlaWdodCIsInNldFJlYWRPbmx5Iiwic3R5bGVzIiwicmFpbmxvb3AiLCJyYWlubG9vcFRpcCIsInJhaW5sb29wRXJyb3JUaXAiLCJBc2tQb3B1cFZpZXciLCJwb3B1cCIsImFza0Rlc2MiLCJ5ZXNCdXR0b24iLCJub0J1dHRvbiIsInllc0ZvY3VzIiwibm9Gb2N1cyIsImZZZXNBY3Rpb24iLCJmTm9BY3Rpb24iLCJiRm9jdXNZZXNPblNob3ciLCJQb3B1cEFzayIsImNsZWFyUG9wdXAiLCJ5ZXNDbGljayIsIm5vQ2xpY2siLCJvblNob3ciLCJmWWVzRnVuYyIsImZOb0Z1bmMiLCJpc0ZvY3VzWWVzT25TaG93Iiwib25TaG93V2l0aERlbGF5Iiwib25CdWlsZCIsIkxhbmd1YWdlc1BvcHVwVmlldyIsImZMYW5nIiwibGFuZ3MiLCJ1c2VyIiwic2VsZWN0ZWQiLCJmdWxsTmFtZSIsInNldExhbmd1YWdlU2VsZWN0aW9uIiwibGFuZ3VhZ2VUb29sdGlwTmFtZSIsImN1cnJlbnRMYW5nIiwib25CZWZvcmVTaG93IiwiZkxhbmd1YWdlIiwiY2hhbmdlTGFuZ3VhZ2UiLCJBcHAiLCJybCIsInBsdWdpblNldHRpbmdzR2V0IiwicGx1Z2luUmVtb3RlUmVxdWVzdCIsIkVudW1zIiwiX19BUFBfQk9PVCIsImZFcnJvckNhbGxiYWNrIiwicmFpbmxvb3BURU1QTEFURVMiLCJpbm5lckhUTUwiLCJib290c3RhcnQiLCJUaW1lMTBtcyIsImFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyIsImFsbG93TGFuZ3VhZ2VzT25Mb2dpbiIsIm5ld01vdmVUb0ZvbGRlciIsImludGVyZmFjZUFuaW1hdGlvbiIsImFuaW0iLCJwcmVtIiwiZGVmYXVsdFJlc3BvbnNlIiwic1JlcXVlc3RBY3Rpb24iLCJzVHlwZSIsImJDYWNoZWQiLCJvUmVxdWVzdFBhcmFtZXRlcnMiLCJmQ2FsbCIsIlN1Y2Nlc3MiLCJVbmxvYWQiLCJsb2dpbkFuZExvZ291dFJlbG9hZCIsIkNsZWFyQXV0aCIsIkxvZ291dCIsImNsZWFyQ2xpZW50U2lkZVRva2VuIiwiQWJvcnQiLCJhamF4UmVxdWVzdCIsImZSZXN1bHRDYWxsYmFjayIsImlUaW1lT3V0Iiwic0dldEFkZCIsImFib3J0QWN0aW9ucyIsImlzUG9zdCIsImhlYWRlcnMiLCJBY3Rpb24iLCJhY3Rpb25Ub0Fib3J0IiwiX19hYm9ydGVkIiwiWFRva2VuIiwib0RlZkFqYXgiLCJnbG9iYWwiLCJhbHdheXMiLCJUaW1lIiwiVXBkYXRlVG9rZW4iLCJzZXRDbGllbnRTaWRlVG9rZW4iLCJjYXRjaCIsInNBY3Rpb24iLCJvUGFyYW1ldGVycyIsImlUaW1lb3V0IiwiYUFib3J0QWN0aW9ucyIsImdldFB1YmxpY0tleSIsImpzVmVyc2lvbiIsInNWZXJzaW9uIiwiQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiIsIm1lbnUiLCJvQ3VycmVudFN1YlNjcmVlbiIsIm9WaWV3TW9kZWxQbGFjZSIsInNldHVwU2V0dGluZ3MiLCJzZXR0aW5nc1NjcmVlbiIsIlJvdXRlZFNldHRpbmdzVmlld01vZGVsIiwidmlld01vZGVsUGxhY2UiLCJTZXR0aW5nc1ZpZXdNb2RlbCIsIkRpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwiLCJ0bXBsIiwib25IaWRlIiwiUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwiLCJEZWZhdWx0Vmlld01vZGVsIiwiZGVmYXVsdFJvdXRlIiwic3VibmFtZSIsIm5vcm1hbGl6ZV8iLCJycXVlc3QiLCJ2YWxzIiwiQWJzdHJhY3RBcHAiLCJnb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUiLCJpc0xvY2FsQXV0b2NvbXBsZXRlIiwiaWZyYW1lIiwibGFzdEVycm9yVGltZSIsIkV2ZW50cyIsImlIIiwiaVciLCJUaW1lNTBtcyIsIlRpbWU1cyIsImdldEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiIsImRlZmF1bHRfIiwiYXBwbGljYXRpb25Db25maWd1cmF0aW9uIiwib0xpbmsiLCJocmVmIiwiY3JlYXRlRXZlbnQiLCJvRSIsIk1vdXNlRXZlbnRzIiwiaW5pdEV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImdvb2dsZVByZXZpZXdTdXBwb3J0ZWQiLCJzZXRXaW5kb3dUaXRsZSIsInJlZGlyZWN0VG9BZG1pblBhbmVsIiwiX19ybGFoX2NsZWFyIiwidG9rZW4iLCJfX3JsYWhfc2V0IiwibG9nb3V0IiwiaW5JZnJhbWUiLCJjdXN0b21Mb2dvdXRMaW5rIiwicGFyZW50IiwiaGlzdG9yeUJhY2siLCJoaXN0b3J5IiwiYmFjayIsIm1vYmlsZSIsImNvbXBvbmVudHMiLCJyZWdpc3RlciIsIlRpbWUxcyIsInNzbSIsImFkZFN0YXRlIiwib25MZWF2ZSIsIkFic3RyYWN0Qm9vdCIsIkFic3RyYWN0UmFkaW8iLCJTYXZlVHJpZ2dlckNvbXBvbmVudCIsInZlcnRpY2FsQWxpZ24iLCJzZXRTdGF0ZSIsIklucHV0Q29tcG9uZW50IiwiU2VsZWN0Q29tcG9uZW50Iiwib3B0aW9uc1RleHQiLCJvcHRpb25zVmFsdWUiLCJvcHRpb25zQ2FwdGlvbiIsIlJhZGlvQ29tcG9uZW50IiwiREVGQVVMVF9ST1dTIiwiVGV4dEFyZWFDb21wb25lbnQiLCJyb3dzIiwic3BlbGxjaGVjayIsIkRhdGVDb21wb25lbnQiLCJTY3JpcHRDb21wb25lbnQiLCJ0ZW1wbGF0ZU5vZGVzIiwib3V0ZXJIVE1MIiwicmVwbGFjZVdpdGgiLCJub2RlVmFsdWUiLCJDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50IiwiYW5pbWF0aW9uQm94IiwiYW5pbWF0aW9uQ2hlY2ttYXJrIiwiYW5pbWF0aW9uQm94U2V0VHJ1ZSIsImFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUiLCJ0cmlnZ2VyQW5pbWF0aW9uIiwiYm94IiwiQWRtaW5BcHAiLCJSZW1vdGUiLCJyZWxvYWREb21haW5MaXN0IiwiRG9tYWluU3RvcmUiLCJkZWxldGVBY2Nlc3MiLCJyZWxvYWRQbHVnaW5MaXN0IiwiUGx1Z2luU3RvcmUiLCJFbmFibGVkIiwiY29uZmlndXJlZCIsIkNvbmZpZ3VyZWQiLCJyZWxvYWRQYWNrYWdlc0xpc3QiLCJQYWNrYWdlU3RvcmUiLCJSZWFsIiwiTWFpblVwZGF0YWJsZSIsIkxpc3QiLCJjYW5CZUluc3RhbGxlZCIsIkNvcmVTdG9yZSIsInJlbG9hZENvcmVEYXRhIiwiQ2hhbm5lbCIsIlR5cGUiLCJVcGRhdGFibGUiLCJBY2Nlc3MiLCJXYXJuaW5nIiwiVmVyc2lvbiIsIlJlbW90ZVZlcnNpb24iLCJSZW1vdGVSZWxlYXNlIiwiVmVyc2lvbkNvbXBhcmUiLCJyZWxvYWRMaWNlbnNpbmciLCJMaWNlbnNlU3RvcmUiLCJFeHBpcmVkIiwiQXBwU3RvcmUiLCJib290ZW5kIiwiYm9vdGVuZENhbGxiYWNrIiwicHJvZ3Jlc3NKcyIsIkNhcGFTdG9yZSIsIlNldHRpbmdzQWRtaW5TY3JlZW4iLCJMb2dpbkFkbWluU2NyZWVuIiwiRG9tYWluUG9wdXBWaWV3Iiwic2VsZiIsImNhbkJlU2F2ZWQiLCJjYW5CZVRlc3RlZCIsImVkaXQiLCJzYXZpbmciLCJzYXZpbmdFcnJvciIsInNpZXZlU2V0dGluZ3MiLCJ0ZXN0aW5nIiwidGVzdGluZ0RvbmUiLCJ0ZXN0aW5nSW1hcEVycm9yIiwidGVzdGluZ1NpZXZlRXJyb3IiLCJ0ZXN0aW5nU210cEVycm9yIiwidGVzdGluZ0ltYXBFcnJvckRlc2MiLCJ0ZXN0aW5nU2lldmVFcnJvckRlc2MiLCJ0ZXN0aW5nU210cEVycm9yRGVzYyIsImltYXBTZXJ2ZXJGb2N1cyIsInNpZXZlU2VydmVyRm9jdXMiLCJzbXRwU2VydmVyRm9jdXMiLCJpbWFwU2VydmVyIiwiaW1hcFBvcnQiLCJpbWFwU2VjdXJlIiwiaW1hcFNob3J0TG9naW4iLCJ1c2VTaWV2ZSIsInNpZXZlQWxsb3dSYXciLCJzaWV2ZVNlcnZlciIsInNpZXZlUG9ydCIsInNpZXZlU2VjdXJlIiwic210cFNlcnZlciIsInNtdHBQb3J0Iiwic210cFNlY3VyZSIsInNtdHBTaG9ydExvZ2luIiwic210cEF1dGgiLCJzbXRwUGhwTWFpbCIsIndoaXRlTGlzdCIsImFsaWFzTmFtZSIsImVuYWJsZVNtYXJ0UG9ydHMiLCJhbGxvd1NpZXZlIiwiaGVhZGVyVGV4dCIsImRvbWFpbkRlc2MiLCJkb21haW5Jc0NvbXB1dGVkIiwidXNlUGhwTWFpbCIsInBvcnQiLCJJbWFwU3NsIiwiSW1hcCIsIlNtdHBTc2wiLCJTbXRwU3RhcnRUbHMiLCJTbXRwIiwiY3JlYXRlT3JBZGRDb21tYW5kIiwib25Eb21haW5DcmVhdGVPclNhdmVSZXNwb25zZSIsInRlc3RDb25uZWN0aW9uQ29tbWFuZCIsIm9uVGVzdENvbm5lY3Rpb25SZXNwb25zZSIsIndoaXRlTGlzdENvbW1hbmQiLCJiYWNrQ29tbWFuZCIsInNpZXZlQ29tbWFuZCIsImNsZWFyVGVzdGluZyIsInNSZXN1bHQiLCJiSW1hcCIsImJTaWV2ZSIsIm9Eb21haW4iLCJjbGVhckZvcm0iLCJJbmNIb3N0IiwiSW5jUG9ydCIsIkluY1NlY3VyZSIsIkluY1Nob3J0TG9naW4iLCJVc2VTaWV2ZSIsIlNpZXZlQWxsb3dSYXciLCJTaWV2ZUhvc3QiLCJTaWV2ZVBvcnQiLCJTaWV2ZVNlY3VyZSIsIk91dEhvc3QiLCJPdXRQb3J0IiwiT3V0U2VjdXJlIiwiT3V0U2hvcnRMb2dpbiIsIk91dEF1dGgiLCJPdXRVc2VQaHBNYWlsIiwiV2hpdGVMaXN0IiwiQWxpYXNOYW1lIiwiTWVudVNldHRpbmdzQWRtaW5WaWV3IiwiUGFuZVNldHRpbmdzQWRtaW5WaWV3IiwiYnJhbmRpbmciLCJHZW5lcmFsQWRtaW5TZXR0aW5ncyIsIkRvbWFpbnNBZG1pblNldHRpbmdzIiwiTG9naW5BZG1pblNldHRpbmdzIiwiQ29udGFjdHNBZG1pblNldHRpbmdzIiwiU2VjdXJpdHlBZG1pblNldHRpbmdzIiwiU29jaWFsQWRtaW5TZXR0aW5ncyIsIlBsdWdpbnNBZG1pblNldHRpbmdzIiwiUGFja2FnZXNBZG1pblNldHRpbmdzIiwiQWJvdXRBZG1pblNldHRpbmdzIiwiY2FwYVRoZW1lcyIsImNhcGFVc2VyQmFja2dyb3VuZCIsImNhcGFHcmF2YXRhciIsImNhcGFBZGRpdGlvbmFsQWNjb3VudHMiLCJjYXBhSWRlbnRpdGllcyIsImNhcGFBdHRhY2htZW50VGh1bWJuYWlscyIsImNhcGFUZW1wbGF0ZXMiLCJtYWluQXR0YWNobWVudExpbWl0IiwiQml0TGVuZ3RoMTAyNCIsInVwbG9hZERhdGEiLCJ1cGxvYWREYXRhRGVzYyIsInVwbG9hZF9tYXhfZmlsZXNpemUiLCJwb3N0X21heF9zaXplIiwidGhlbWVzT3B0aW9ucyIsIm9wdFZhbHVlIiwib3B0VGV4dCIsImxhbmd1YWdlRnVsbE5hbWUiLCJsYW5ndWFnZUFkbWluRnVsbE5hbWUiLCJhdHRhY2htZW50TGltaXRUcmlnZ2VyIiwibGFuZ3VhZ2VUcmlnZ2VyIiwibGFuZ3VhZ2VBZG1pblRyaWdnZXIiLCJmMSIsImYyIiwiZjMiLCJmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIiLCJzYXZlU2V0dGluZ3NTdGVwIiwidHJhbnNsYXRvclJlbG9hZCIsInNlbGVjdExhbmd1YWdlIiwic2VsZWN0TGFuZ3VhZ2VBZG1pbiIsInBocEluZm9MaW5rIiwidmlzaWJpbGl0eSIsImRvbWFpbkZvckRlbGV0aW9uIiwib25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCIsIm9uRG9tYWluTG9hZFJlcXVlc3QiLCJjcmVhdGVEb21haW4iLCJkZWxldGVEb21haW4iLCJkaXNhYmxlRG9tYWluIiwib0RvbSIsImRvbWFpbkl0ZW0iLCJkZWZhdWx0RG9tYWluIiwiZHVtbXkiLCJwZG9Ec24iLCJwZG9Vc2VyIiwiZW5hYmxlQ29udGFjdHMiLCJjb250YWN0c1N5bmMiLCJzdXBwb3J0ZWRUeXBlcyIsInR5cGVzIiwiZ2V0VHlwZU5hbWUiLCJjb250YWN0c1N1cHBvcnRlZCIsImNvbnRhY3RzVHlwZXMiLCJjb250YWN0c1R5cGVzT3B0aW9ucyIsImNvbnRhY3RzVHlwZSIsIm1haW5Db250YWN0c1R5cGUiLCJ0ZXN0Q29udGFjdHNTdWNjZXNzIiwidGVzdENvbnRhY3RzRXJyb3IiLCJ0ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UiLCJwZG9QYXNzd29yZCIsInBkb0RzblRyaWdnZXIiLCJwZG9Vc2VyVHJpZ2dlciIsInBkb1Bhc3N3b3JkVHJpZ2dlciIsImNvbnRhY3RzVHlwZVRyaWdnZXIiLCJvblRlc3RDb250YWN0c1Jlc3BvbnNlIiwidGVzdENvbnRhY3RzQ29tbWFuZCIsIk1lc3NhZ2UiLCJmNCIsImY1IiwiYWRtaW5QYXNzd29yZCIsImNhcGFPcGVuUEdQIiwiY2FwYVR3b0ZhY3RvckF1dGgiLCJjYXBhVHdvRmFjdG9yQXV0aEZvcmNlIiwidmVyaWZ5U3NsQ2VydGlmaWNhdGUiLCJhbGxvd1NlbGZTaWduZWQiLCJpc1R3b0ZhY3RvckRyb3BwZXJTaG93biIsInR3b0ZhY3RvckRyb3BwZXJVc2VyIiwiYWRtaW5Mb2dpbkVycm9yIiwiYWRtaW5QYXNzd29yZE5ldyIsImFkbWluUGFzc3dvcmROZXcyIiwiYWRtaW5QYXNzd29yZE5ld0Vycm9yIiwiYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yIiwiYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MiLCJvbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSIsInNhdmVOZXdBZG1pblBhc3N3b3JkQ29tbWFuZCIsInNob3dUd29GYWN0b3JEcm9wcGVyIiwiV2VhayIsImdvb2dsZUVuYWJsZSIsImdvb2dsZUVuYWJsZUF1dGgiLCJnb29nbGVFbmFibGVBdXRoR21haWwiLCJnb29nbGVFbmFibGVEcml2ZSIsImdvb2dsZUVuYWJsZVByZXZpZXciLCJnb29nbGVFbmFibGVSZXF1aXJlQ2xpZW50U2V0dGluZ3MiLCJnb29nbGVFbmFibGVSZXF1aXJlQXBpS2V5IiwiZ29vZ2xlQ2xpZW50SUQiLCJnb29nbGVDbGllbnRTZWNyZXQiLCJnb29nbGVBcGlLZXkiLCJnb29nbGVUcmlnZ2VyMSIsImdvb2dsZVRyaWdnZXIyIiwiZ29vZ2xlVHJpZ2dlcjMiLCJmYWNlYm9va1N1cHBvcnRlZCIsImZhY2Vib29rRW5hYmxlIiwiZmFjZWJvb2tBcHBJRCIsImZhY2Vib29rQXBwU2VjcmV0IiwiZmFjZWJvb2tUcmlnZ2VyMSIsImZhY2Vib29rVHJpZ2dlcjIiLCJ0d2l0dGVyRW5hYmxlIiwidHdpdHRlckNvbnN1bWVyS2V5IiwidHdpdHRlckNvbnN1bWVyU2VjcmV0IiwidHdpdHRlclRyaWdnZXIxIiwidHdpdHRlclRyaWdnZXIyIiwiZHJvcGJveEVuYWJsZSIsImRyb3Bib3hBcGlLZXkiLCJkcm9wYm94VHJpZ2dlcjEiLCJmNiIsImY3IiwiZjgiLCJlbmFibGVkUGx1Z2lucyIsInBsdWdpbnNFcnJvciIsIm9uUGx1Z2luTG9hZFJlcXVlc3QiLCJvblBsdWdpbkRpc2FibGVSZXF1ZXN0IiwiZGlzYWJsZVBsdWdpbiIsImNvbmZpZ3VyZVBsdWdpbiIsInBhY2thZ2VzRXJyb3IiLCJwYWNrYWdlc0N1cnJlbnQiLCJpbnN0YWxsZWQiLCJjb21wYXJlIiwicGFja2FnZXNBdmFpbGFibGVGb3JVcGRhdGUiLCJwYWNrYWdlc0F2YWlsYWJsZUZvckluc3RhbGxhdGlvbiIsInJlcXVlc3RIZWxwZXIiLCJwYWNrYWdlVG9SZXF1ZXN0IiwiaW5zdGFsbCIsIlJlbG9hZCIsImRlbGV0ZVBhY2thZ2UiLCJwYWNrYWdlVG9EZWxldGUiLCJpbnN0YWxsUGFja2FnZSIsInBhY2thZ2VUb0luc3RhbGwiLCJ2ZXJzaW9uIiwiYWNjZXNzIiwiZXJyb3JEZXNjIiwiY29yZVJlbW90ZVZlcnNpb25IdG1sRGVzYyIsInRyYW5zbGF0b3JUcmlnZ2VyIiwic3RhdHVzVHlwZSIsInZlcnNpb25Ub0NvbXBhcmUiLCJpc0NoZWNraW5nIiwiaXNVcGRhdGluZyIsImlzUmVhbCIsImRvbSIsImFkbWluRG9tYWluIiwiYWRtaW5NYW5Mb2FkaW5nIiwiYWRtaW5NYW5Mb2FkaW5nVmlzaWJpbGl0eSIsImxvZ291dENsaWNrIiwiTG9naW5BZG1pblZpZXciLCJzdWJtaXRSZXF1ZXN0IiwibW9iaWxlRGV2aWNlIiwiaGlkZVN1Ym1pdEJ1dHRvbiIsImxvZ2luIiwicGFzc3dvcmQiLCJsb2dpbkVycm9yIiwicGFzc3dvcmRFcnJvciIsImxvZ2luRXJyb3JBbmltYXRpb24iLCJwYXNzd29yZEVycm9yQW5pbWF0aW9uIiwibG9naW5Gb2N1cyIsImZvcm1IaWRkZW4iLCJmb3JtRXJyb3IiLCJzdWJtaXRFcnJvciIsInN1Ym1pdENvbW1hbmQiLCJzdWJtaXRGb3JtIiwiYm9vdHN0cmFwIiwiRG9tYWluQWxpYXNQb3B1cFZpZXciLCJkb21haW5zT3B0aW9ucyIsIm9uRG9tYWluQWxpYXNDcmVhdGVPclNhdmVSZXNwb25zZSIsIlBsdWdpblBvcHVwVmlldyIsImhhc0NvbmZpZ3VyYXRpb24iLCJvblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UiLCJzYXZlRXJyb3IiLCJyZWFkbWUiLCJjb25maWd1cmVzIiwiaGFzUmVhZG1lIiwicmVhZG1lUG9wb3ZlckNvbmYiLCJ0cnlUb0Nsb3NlUG9wdXAiLCJzYXZlQ29tbWFuZCIsIm9QbHVnaW4iLCJSZWFkbWUiLCJDb25maWciLCJQb3B1cHNBc2tWaWV3TW9kZWwiLCJCcmFuZGluZ0FkbWluU2V0dGluZ3MiLCJsb2FkaW5nRGVzYyIsImZhdmljb25VcmwiLCJsb2dpbkxvZ28iLCJsb2dpbkJhY2tncm91bmQiLCJ1c2VyTG9nbyIsInVzZXJMb2dvTWVzc2FnZSIsInVzZXJJZnJhbWVNZXNzYWdlIiwidXNlckxvZ29UaXRsZSIsImxvZ2luRGVzY3JpcHRpb24iLCJsb2dpbkNzcyIsInVzZXJDc3MiLCJ3ZWxjb21lUGFnZVVybCIsIndlbGNvbWVQYWdlRGlzcGxheSJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENB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QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdDQUF3QztBQUN4QztBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLFFBQVE7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBLHNCQUFzQiw0QkFBNEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0QsZ0JBQWdCO0FBQ3hFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0QsZ0JBQWdCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQSwyQkFBMkIsNEJBQTRCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLDJCQUEyQix5QkFBeUI7QUFDcEQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFF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LFNBQWhCLENBQTBCLFVBQUNvRCxLQUFELEVBQVc7QUFDcENvMUMseUVBQU0sQ0FBQzErQixlQUFQLENBQXVCK25DLEVBQXZCLEVBQTJCO0FBQzFCLHdCQUFjeHlDLHlEQUFJLENBQUNqTSxLQUFEO0FBRFEsU0FBM0I7QUFHQSxPQUpEO0FBS0EsS0F0QkQsRUFzQkcxRixtREFBTSxDQUFDaTNDLFFBdEJWO0FBdUJBLEciLCJmaWxlIjoianMvYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcInJhaW5sb29wL3YvMC4wLjAvc3RhdGljL2pzL1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNTM0KTtcbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogMCAqL1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWxlVHlwZSA9IHtcblx0J1Vua25vd24nOiAndW5rbm93bicsXG5cdCdUZXh0JzogJ3RleHQnLFxuXHQnSHRtbCc6ICdodG1sJyxcblx0J0NvZGUnOiAnY29kZScsXG5cdCdFbWwnOiAnZW1sJyxcblx0J1dvcmRUZXh0JzogJ3dvcmQtdGV4dCcsXG5cdCdQZGYnOiAncGRmJyxcblx0J0ltYWdlJzogJ2ltYWdlJyxcblx0J0F1ZGlvJzogJ2F1ZGlvJyxcblx0J1ZpZGVvJzogJ3ZpZGVvJyxcblx0J1NoZWV0JzogJ3NoZWV0Jyxcblx0J1ByZXNlbnRhdGlvbic6ICdwcmVzZW50YXRpb24nLFxuXHQnQ2VydGlmaWNhdGUnOiAnY2VydGlmaWNhdGUnLFxuXHQnQ2VydGlmaWNhdGVCaW4nOiAnY2VydGlmaWNhdGUtYmluJyxcblx0J0FyY2hpdmUnOiAnYXJjaGl2ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFN0b3JhZ2VSZXN1bHRUeXBlID0ge1xuXHQnU3VjY2Vzcyc6ICdzdWNjZXNzJyxcblx0J0Fib3J0JzogJ2Fib3J0Jyxcblx0J0Vycm9yJzogJ2Vycm9yJyxcblx0J1VubG9hZCc6ICd1bmxvYWQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGb2N1c2VkID0ge1xuXHQnTm9uZSc6ICdub25lJyxcblx0J01lc3NhZ2VMaXN0JzogJ21lc3NhZ2UtbGlzdCcsXG5cdCdNZXNzYWdlVmlldyc6ICdtZXNzYWdlLXZpZXcnLFxuXHQnRm9sZGVyTGlzdCc6ICdmb2xkZXItbGlzdCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlID0ge1xuXHQnRW1wdHknOiAxMCxcblx0J0xvZ2luJzogMjAsXG5cdCdBdXRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlVHlwZSA9IHtcblx0J1dlYm1haWwnOiAwLFxuXHQnQWRtaW4nOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBDYXBhID0ge1xuXHQnVHdvRmFjdG9yJzogJ1RXT19GQUNUT1InLFxuXHQnVHdvRmFjdG9yRm9yY2UnOiAnVFdPX0ZBQ1RPUl9GT1JDRScsXG5cdCdPcGVuUEdQJzogJ09QRU5fUEdQJyxcblx0J1ByZWZldGNoJzogJ1BSRUZFVENIJyxcblx0J0dyYXZhdGFyJzogJ0dSQVZBVEFSJyxcblx0J0ZvbGRlcnMnOiAnRk9MREVSUycsXG5cdCdDb21wb3Nlcic6ICdDT01QT1NFUicsXG5cdCdDb250YWN0cyc6ICdDT05UQUNUUycsXG5cdCdSZWxvYWQnOiAnUkVMT0FEJyxcblx0J1NlYXJjaCc6ICdTRUFSQ0gnLFxuXHQnU2VhcmNoQWR2JzogJ1NFQVJDSF9BRFYnLFxuXHQnTWVzc2FnZUFjdGlvbnMnOiAnTUVTU0FHRV9BQ1RJT05TJyxcblx0J01lc3NhZ2VMaXN0QWN0aW9ucyc6ICdNRVNTQUdFTElTVF9BQ1RJT05TJyxcblx0J0F0dGFjaG1lbnRzQWN0aW9ucyc6ICdBVFRBQ0hNRU5UU19BQ1RJT05TJyxcblx0J0Rhbmdlcm91c0FjdGlvbnMnOiAnREFOR0VST1VTX0FDVElPTlMnLFxuXHQnU2V0dGluZ3MnOiAnU0VUVElOR1MnLFxuXHQnSGVscCc6ICdIRUxQJyxcblx0J1RoZW1lcyc6ICdUSEVNRVMnLFxuXHQnVXNlckJhY2tncm91bmQnOiAnVVNFUl9CQUNLR1JPVU5EJyxcblx0J1NpZXZlJzogJ1NJRVZFJyxcblx0J0ZpbHRlcnMnOiAnRklMVEVSUycsXG5cdCdBdHRhY2htZW50VGh1bWJuYWlscyc6ICdBVFRBQ0hNRU5UX1RIVU1CTkFJTFMnLFxuXHQnVGVtcGxhdGVzJzogJ1RFTVBMQVRFUycsXG5cdCdBdXRvTG9nb3V0JzogJ0FVVE9MT0dPVVQnLFxuXHQnQWRkaXRpb25hbEFjY291bnRzJzogJ0FERElUSU9OQUxfQUNDT1VOVFMnLFxuXHQnSWRlbnRpdGllcyc6ICdJREVOVElUSUVTJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgS2V5U3RhdGUgPSB7XG5cdCdBbGwnOiAnYWxsJyxcblx0J05vbmUnOiAnbm9uZScsXG5cdCdDb250YWN0TGlzdCc6ICdjb250YWN0LWxpc3QnLFxuXHQnTWVzc2FnZUxpc3QnOiAnbWVzc2FnZS1saXN0Jyxcblx0J0ZvbGRlckxpc3QnOiAnZm9sZGVyLWxpc3QnLFxuXHQnTWVzc2FnZVZpZXcnOiAnbWVzc2FnZS12aWV3Jyxcblx0J0NvbXBvc2UnOiAnY29tcG9zZScsXG5cdCdTZXR0aW5ncyc6ICdzZXR0aW5ncycsXG5cdCdNZW51JzogJ21lbnUnLFxuXHQnUG9wdXBDb21wb3NlT3BlblBHUCc6ICdjb21wb3NlLW9wZW4tcGdwJyxcblx0J1BvcHVwTWVzc2FnZU9wZW5QR1AnOiAnbWVzc2FnZS1vcGVuLXBncCcsXG5cdCdQb3B1cFZpZXdPcGVuUEdQJzogJ3ZpZXctb3Blbi1wZ3AnLFxuXHQnUG9wdXBLZXlib2FyZFNob3J0Y3V0c0hlbHAnOiAncG9wdXAta2V5Ym9hcmQtc2hvcnRjdXRzLWhlbHAnLFxuXHQnUG9wdXBBc2snOiAncG9wdXAtYXNrJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRm9sZGVyVHlwZSA9IHtcblx0J0luYm94JzogMTAsXG5cdCdTZW50SXRlbXMnOiAxMSxcblx0J0RyYWZ0JzogMTIsXG5cdCdUcmFzaCc6IDEzLFxuXHQnU3BhbSc6IDE0LFxuXHQnQXJjaGl2ZSc6IDE1LFxuXHQnTm90U3BhbSc6IDgwLFxuXHQnVXNlcic6IDk5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJGb2xkZXJUeXBlID0ge1xuXHQnVVNFUic6IDAsXG5cdCdJTkJPWCc6IDEsXG5cdCdTRU5UJzogMixcblx0J0RSQUZUUyc6IDMsXG5cdCdKVU5LJzogNCxcblx0J1RSQVNIJzogNSxcblx0J0lNUE9SVEFOVCc6IDEwLFxuXHQnRkxBR0dFRCc6IDExLFxuXHQnQUxMJzogMTJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nID0ge1xuXHQnRGVmYXVsdE9mZic6ICdkZWZhdWx0b2ZmJyxcblx0J0RlZmF1bHRPbic6ICdkZWZhdWx0b24nLFxuXHQnVW51c2VkJzogJ3VudXNlZCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZSA9IHtcblx0J0RlZmF1bHRPZmYnOiAwLFxuXHQnRGVmYXVsdE9uJzogMSxcblx0J1VudXNlZCc6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBvc2VUeXBlID0ge1xuXHQnRW1wdHknOiAnZW1wdHknLFxuXHQnUmVwbHknOiAncmVwbHknLFxuXHQnUmVwbHlBbGwnOiAncmVwbHlhbGwnLFxuXHQnRm9yd2FyZCc6ICdmb3J3YXJkJyxcblx0J0ZvcndhcmRBc0F0dGFjaG1lbnQnOiAnZm9yd2FyZC1hcy1hdHRhY2htZW50Jyxcblx0J0RyYWZ0JzogJ2RyYWZ0Jyxcblx0J0VkaXRBc05ldyc6ICdlZGl0YXNuZXcnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBVcGxvYWRFcnJvckNvZGUgPSB7XG5cdCdOb3JtYWwnOiAwLFxuXHQnRmlsZUlzVG9vQmlnJzogMSxcblx0J0ZpbGVQYXJ0aWFsbHlVcGxvYWRlZCc6IDIsXG5cdCdGaWxlTm9VcGxvYWRlZCc6IDMsXG5cdCdNaXNzaW5nVGVtcEZvbGRlcic6IDQsXG5cdCdGaWxlT25TYXZlaW5nRXJyb3InOiA1LFxuXHQnRmlsZVR5cGUnOiA5OCxcblx0J1Vua25vd24nOiA5OVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiA9IHtcblx0J05vbmUnOiAwLFxuXHQnU2VudCc6IDEsXG5cdCdEcmFmdCc6IDIsXG5cdCdTcGFtJzogMyxcblx0J1RyYXNoJzogNCxcblx0J0FyY2hpdmUnOiA1XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDbGllbnRTaWRlS2V5TmFtZSA9IHtcblx0J0ZvbGRlcnNMYXNoSGFzaCc6IDAsXG5cdCdNZXNzYWdlc0luYm94TGFzdEhhc2gnOiAxLFxuXHQnTWFpbEJveExpc3RTaXplJzogMixcblx0J0V4cGFuZGVkRm9sZGVycyc6IDMsXG5cdCdGb2xkZXJMaXN0U2l6ZSc6IDQsXG5cdCdNZXNzYWdlTGlzdFNpemUnOiA1LFxuXHQnTGFzdFJlcGx5QWN0aW9uJzogNixcblx0J0xhc3RTaWduTWUnOiA3LFxuXHQnQ29tcG9zZUxhc3RJZGVudGl0eUlEJzogOCxcblx0J01lc3NhZ2VIZWFkZXJGdWxsSW5mbyc6IDksXG5cdCdNZXNzYWdlQXR0YWNobW5ldENvbnRyb2xzJzogMTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IEV2ZW50S2V5Q29kZSA9IHtcblx0J0JhY2tzcGFjZSc6IDgsXG5cdCdUYWInOiA5LFxuXHQnRW50ZXInOiAxMyxcblx0J0VzYyc6IDI3LFxuXHQnUGFnZVVwJzogMzMsXG5cdCdQYWdlRG93bic6IDM0LFxuXHQnTGVmdCc6IDM3LFxuXHQnUmlnaHQnOiAzOSxcblx0J1VwJzogMzgsXG5cdCdEb3duJzogNDAsXG5cdCdFbmQnOiAzNSxcblx0J0hvbWUnOiAzNixcblx0J1NwYWNlJzogMzIsXG5cdCdJbnNlcnQnOiA0NSxcblx0J0RlbGV0ZSc6IDQ2LFxuXHQnQSc6IDY1LFxuXHQnUyc6IDgzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2V0QWN0aW9uID0ge1xuXHQnU2V0U2Vlbic6IDAsXG5cdCdVbnNldFNlZW4nOiAxLFxuXHQnU2V0RmxhZyc6IDIsXG5cdCdVbnNldEZsYWcnOiAzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2VsZWN0QWN0aW9uID0ge1xuXHQnQWxsJzogMCxcblx0J05vbmUnOiAxLFxuXHQnSW52ZXJ0JzogMixcblx0J1Vuc2Vlbic6IDMsXG5cdCdTZWVuJzogNCxcblx0J0ZsYWdnZWQnOiA1LFxuXHQnVW5mbGFnZ2VkJzogNlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRGVza3RvcE5vdGlmaWNhdGlvbiA9IHtcblx0J0FsbG93ZWQnOiAwLFxuXHQnTm90QWxsb3dlZCc6IDEsXG5cdCdEZW5pZWQnOiAyLFxuXHQnTm90U3VwcG9ydGVkJzogOVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVByaW9yaXR5ID0ge1xuXHQnTG93JzogNSxcblx0J05vcm1hbCc6IDMsXG5cdCdIaWdoJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yRGVmYXVsdFR5cGUgPSB7XG5cdCdIdG1sJzogJ0h0bWwnLFxuXHQnUGxhaW4nOiAnUGxhaW4nLFxuXHQnSHRtbEZvcmNlZCc6ICdIdG1sRm9yY2VkJyxcblx0J1BsYWluRm9yY2VkJzogJ1BsYWluRm9yY2VkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VydmVyU2VjdXJlID0ge1xuXHQnTm9uZSc6IDAsXG5cdCdTU0wnOiAxLFxuXHQnVExTJzogMlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VhcmNoRGF0ZVR5cGUgPSB7XG5cdCdBbGwnOiAtMSxcblx0J0RheXMzJzogMyxcblx0J0RheXM3JzogNyxcblx0J01vbnRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNhdmVTZXR0aW5nc1N0ZXAgPSB7XG5cdCdBbmltYXRlJzogLTIsXG5cdCdJZGxlJzogLTEsXG5cdCdUcnVlUmVzdWx0JzogMSxcblx0J0ZhbHNlUmVzdWx0JzogMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTGF5b3V0ID0ge1xuXHQnTm9QcmV2aWV3JzogMCxcblx0J1NpZGVQcmV2aWV3JzogMSxcblx0J0JvdHRvbVByZXZpZXcnOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJDb25kaXRpb25GaWVsZCA9IHtcblx0J0Zyb20nOiAnRnJvbScsXG5cdCdSZWNpcGllbnQnOiAnUmVjaXBpZW50Jyxcblx0J1N1YmplY3QnOiAnU3ViamVjdCcsXG5cdCdIZWFkZXInOiAnSGVhZGVyJyxcblx0J1NpemUnOiAnU2l6ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlckNvbmRpdGlvblR5cGUgPSB7XG5cdCdDb250YWlucyc6ICdDb250YWlucycsXG5cdCdOb3RDb250YWlucyc6ICdOb3RDb250YWlucycsXG5cdCdFcXVhbFRvJzogJ0VxdWFsVG8nLFxuXHQnTm90RXF1YWxUbyc6ICdOb3RFcXVhbFRvJyxcblx0J1JlZ2V4JzogJ1JlZ2V4Jyxcblx0J092ZXInOiAnT3ZlcicsXG5cdCdVbmRlcic6ICdVbmRlcidcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlcnNBY3Rpb24gPSB7XG5cdCdOb25lJzogJ05vbmUnLFxuXHQnTW92ZVRvJzogJ01vdmVUbycsXG5cdCdEaXNjYXJkJzogJ0Rpc2NhcmQnLFxuXHQnVmFjYXRpb24nOiAnVmFjYXRpb24nLFxuXHQnUmVqZWN0JzogJ1JlamVjdCcsXG5cdCdGb3J3YXJkJzogJ0ZvcndhcmQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJSdWxlc1R5cGUgPSB7XG5cdCdBbGwnOiAnQWxsJyxcblx0J0FueSc6ICdBbnknXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTaWduZWRWZXJpZnlTdGF0dXMgPSB7XG5cdCdVbmtub3duUHVibGljS2V5cyc6IC00LFxuXHQnVW5rbm93blByaXZhdGVLZXknOiAtMyxcblx0J1VudmVyaWZpZWQnOiAtMixcblx0J0Vycm9yJzogLTEsXG5cdCdOb25lJzogMCxcblx0J1N1Y2Nlc3MnOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDb250YWN0UHJvcGVydHlUeXBlID0ge1xuXHQnVW5rbm93bic6IDAsXG5cblx0J0Z1bGxOYW1lJzogMTAsXG5cblx0J0ZpcnN0TmFtZSc6IDE1LFxuXHQnTGFzdE5hbWUnOiAxNixcblx0J01pZGRsZU5hbWUnOiAxNixcblx0J05pY2snOiAxOCxcblxuXHQnTmFtZVByZWZpeCc6IDIwLFxuXHQnTmFtZVN1ZmZpeCc6IDIxLFxuXG5cdCdFbWFpbCc6IDMwLFxuXHQnUGhvbmUnOiAzMSxcblx0J1dlYic6IDMyLFxuXG5cdCdCaXJ0aGRheSc6IDQwLFxuXG5cdCdGYWNlYm9vayc6IDkwLFxuXHQnU2t5cGUnOiA5MSxcblx0J0dpdEh1Yic6IDkyLFxuXG5cdCdOb3RlJzogMTEwLFxuXG5cdCdDdXN0b20nOiAyNTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1hZ2ljcyA9IHtcblx0J0V2ZW50V2hpY2hNb3VzZU1pZGRsZSc6IDMsXG5cdCdpZnZpc2libGVJZGxlMTBzJzogMTAsXG5cblx0J0JpdExlbmd0aDIwNDgnOiAyMDQ4LFxuXHQnQml0TGVuZ3RoMTAyNCc6IDEwMjQsXG5cblx0J1NpemUzNTBweCc6IDM1MCxcblx0J1NpemU1MHB4JzogNTAsXG5cdCdTaXplMjBweCc6IDIwLFxuXHQnU2l6ZTFweCc6IDEsXG5cblx0J1RpbWUzMG1Jbk1pbic6IDMwLFxuXG5cdCdUaW1lNjBtJzogNjAwMDAgKiA2MCxcblx0J1RpbWUzMG0nOiA2MDAwMCAqIDMwLFxuXHQnVGltZTIwbSc6IDYwMDAwICogMjAsXG5cdCdUaW1lMTVtJzogNjAwMDAgKiAxNSxcblx0J1RpbWUxMG0nOiA2MDAwMCAqIDEwLFxuXHQnVGltZTVtJzogNjAwMDAgKiA1LFxuXHQnVGltZTNtJzogNjAwMDAgKiAzLFxuXHQnVGltZTJtJzogNjAwMDAgKiAyLFxuXHQnVGltZTFtJzogNjAwMDAsXG5cdCdUaW1lMzBzJzogMzAwMDAsXG5cdCdUaW1lMTBzJzogMTAwMDAsXG5cdCdUaW1lN3MnOiA3MDAwLFxuXHQnVGltZTVzJzogNTAwMCxcblx0J1RpbWUzcyc6IDMwMDAsXG5cdCdUaW1lMXMnOiAxMDAwLFxuXHQnVGltZTUwMG1zJzogNTAwLFxuXHQnVGltZTM1MG1zJzogMzUwLFxuXHQnVGltZTI1MG1zJzogMjUwLFxuXHQnVGltZTIwMG1zJzogMjAwLFxuXHQnVGltZTEwMG1zJzogMTAwLFxuXHQnVGltZTUwbXMnOiA1MCxcblx0J1RpbWUyMG1zJzogMjAsXG5cdCdUaW1lMTBtcyc6IDEwLFxuXHQnVGltZTFtcyc6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFBvcnRzID0ge1xuXHQnSW1hcCc6IDE0Myxcblx0J0ltYXBTc2wnOiA5OTMsXG5cdCdTbXRwJzogMjUsXG5cdCdTbXRwU3NsJzogNDY1LFxuXHQnU210cFN0YXJ0VGxzJzogNTg3XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBOb3RpZmljYXRpb24gPSB7XG5cdCdJbnZhbGlkVG9rZW4nOiAxMDEsXG5cdCdBdXRoRXJyb3InOiAxMDIsXG5cdCdBY2Nlc3NFcnJvcic6IDEwMyxcblx0J0Nvbm5lY3Rpb25FcnJvcic6IDEwNCxcblx0J0NhcHRjaGFFcnJvcic6IDEwNSxcblx0J1NvY2lhbEZhY2Vib29rTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA2LFxuXHQnU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwNyxcblx0J1NvY2lhbEdvb2dsZUxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwOCxcblx0J0RvbWFpbk5vdEFsbG93ZWQnOiAxMDksXG5cdCdBY2NvdW50Tm90QWxsb3dlZCc6IDExMCxcblxuXHQnQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCc6IDEyMCxcblx0J0FjY291bnRUd29GYWN0b3JBdXRoRXJyb3InOiAxMjEsXG5cblx0J0NvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkJzogMTMwLFxuXHQnQ3VycmVudFBhc3N3b3JkSW5jb3JyZWN0JzogMTMxLFxuXHQnTmV3UGFzc3dvcmRTaG9ydCc6IDEzMixcblx0J05ld1Bhc3N3b3JkV2Vhayc6IDEzMyxcblx0J05ld1Bhc3N3b3JkRm9yYmlkZGVuJzogMTM0LFxuXG5cdCdDb250YWN0c1N5bmNFcnJvcic6IDE0MCxcblxuXHQnQ2FudEdldE1lc3NhZ2VMaXN0JzogMjAxLFxuXHQnQ2FudEdldE1lc3NhZ2UnOiAyMDIsXG5cdCdDYW50RGVsZXRlTWVzc2FnZSc6IDIwMyxcblx0J0NhbnRNb3ZlTWVzc2FnZSc6IDIwNCxcblx0J0NhbnRDb3B5TWVzc2FnZSc6IDIwNSxcblxuXHQnQ2FudFNhdmVNZXNzYWdlJzogMzAxLFxuXHQnQ2FudFNlbmRNZXNzYWdlJzogMzAyLFxuXHQnSW52YWxpZFJlY2lwaWVudHMnOiAzMDMsXG5cblx0J0NhbnRTYXZlRmlsdGVycyc6IDM1MSxcblx0J0NhbnRHZXRGaWx0ZXJzJzogMzUyLFxuXHQnRmlsdGVyc0FyZU5vdENvcnJlY3QnOiAzNTUsXG5cblx0J0NhbnRDcmVhdGVGb2xkZXInOiA0MDAsXG5cdCdDYW50UmVuYW1lRm9sZGVyJzogNDAxLFxuXHQnQ2FudERlbGV0ZUZvbGRlcic6IDQwMixcblx0J0NhbnRTdWJzY3JpYmVGb2xkZXInOiA0MDMsXG5cdCdDYW50VW5zdWJzY3JpYmVGb2xkZXInOiA0MDQsXG5cdCdDYW50RGVsZXRlTm9uRW1wdHlGb2xkZXInOiA0MDUsXG5cblx0J0NhbnRTYXZlU2V0dGluZ3MnOiA1MDEsXG5cdCdDYW50U2F2ZVBsdWdpblNldHRpbmdzJzogNTAyLFxuXG5cdCdEb21haW5BbHJlYWR5RXhpc3RzJzogNjAxLFxuXG5cdCdDYW50SW5zdGFsbFBhY2thZ2UnOiA3MDEsXG5cdCdDYW50RGVsZXRlUGFja2FnZSc6IDcwMixcblx0J0ludmFsaWRQbHVnaW5QYWNrYWdlJzogNzAzLFxuXHQnVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlJzogNzA0LFxuXG5cdCdMaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlJzogNzEwLFxuXHQnTGljZW5zaW5nRXhwaXJlZCc6IDcxMSxcblx0J0xpY2Vuc2luZ0Jhbm5lZCc6IDcxMixcblxuXHQnRGVtb1NlbmRNZXNzYWdlRXJyb3InOiA3NTAsXG5cdCdEZW1vQWNjb3VudEVycm9yJzogNzUxLFxuXG5cdCdBY2NvdW50QWxyZWFkeUV4aXN0cyc6IDgwMSxcblx0J0FjY291bnREb2VzTm90RXhpc3QnOiA4MDIsXG5cblx0J01haWxTZXJ2ZXJFcnJvcic6IDkwMSxcblx0J0NsaWVudFZpZXdFcnJvcic6IDkwMixcblx0J0ludmFsaWRJbnB1dEFyZ3VtZW50JzogOTAzLFxuXG5cdCdBamF4RmFsc2UnOiA5NTAsXG5cdCdBamF4QWJvcnQnOiA5NTEsXG5cdCdBamF4UGFyc2UnOiA5NTIsXG5cdCdBamF4VGltZW91dCc6IDk1MyxcblxuXHQnVW5rbm93bk5vdGlmaWNhdGlvbic6IDk5OSxcblx0J1Vua25vd25FcnJvcic6IDk5OVxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgT3BlbnRpcCBmcm9tICdPcGVudGlwJztcbmltcG9ydCBQaWthZGF5IGZyb20gJ3Bpa2FkYXknO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jb25zdCBrbyA9IHdpbmRvdy5rbyxcblx0JHdpbiA9ICQod2luZG93KSxcblx0ZkRpc3Bvc2FsVG9vbHRpcEhlbHBlciA9IChlbGVtZW50KSA9PiB7XG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy51cGRhdGVXaWR0aCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRmSW5pdCA9ICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlKCRlbC53aWR0aCgpKTtcblx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdGZWYWx1ZSgkZWwud2lkdGgoKSk7XG5cdFx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdFx0fTtcblxuXHRcdCR3aW4ub24oJ3Jlc2l6ZScsIGZJbml0KTtcblx0XHRmSW5pdCgpO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkd2luLm9mZigncmVzaXplJywgZkluaXQpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZWRpdG9yID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRsZXQgZWRpdG9yID0gbnVsbDtcblxuXHRcdGNvbnN0IGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRIdG1sRWRpdG9yID0gcmVxdWlyZSgnQ29tbW9uL0h0bWxFZGl0b3InKS5kZWZhdWx0LFxuXHRcdFx0ZlVwZGF0ZUVkaXRvclZhbHVlID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5fX2VkaXRvcikge1xuXHRcdFx0XHRcdGZWYWx1ZS5fX2VkaXRvci5zZXRIdG1sT3JQbGFpbihmVmFsdWUoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmVXBkYXRlS29WYWx1ZSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKGZWYWx1ZSAmJiBmVmFsdWUuX19lZGl0b3IpIHtcblx0XHRcdFx0XHRmVmFsdWUoZlZhbHVlLl9fZWRpdG9yLmdldERhdGFXaXRoSHRtbE1hcmsoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmT25SZWFkeSA9ICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlLl9fZWRpdG9yID0gZWRpdG9yO1xuXHRcdFx0XHRmVXBkYXRlRWRpdG9yVmFsdWUoKTtcblx0XHRcdH07XG5cblx0XHRpZiAoa28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgSHRtbEVkaXRvcikge1xuXHRcdFx0ZWRpdG9yID0gbmV3IEh0bWxFZGl0b3IoZWxlbWVudCwgZlVwZGF0ZUtvVmFsdWUsIGZPblJlYWR5LCBmVXBkYXRlS29WYWx1ZSk7XG5cblx0XHRcdGZWYWx1ZS5fX2ZldGNoRWRpdG9yVmFsdWUgPSBmVXBkYXRlS29WYWx1ZTtcblxuXHRcdFx0ZlZhbHVlLnN1YnNjcmliZShmVXBkYXRlRWRpdG9yVmFsdWUpO1xuXG5cdFx0XHQvLyBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdC8vIH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmpzb24gPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudCkudGV4dCh3aW5kb3cuSlNPTi5zdHJpbmdpZnkoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KS50ZXh0KHdpbmRvdy5KU09OLnN0cmluZ2lmeShrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnNjcm9sbGVyU2hhZG93cyA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBsaW1pdCA9IDgsXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0Y29udCA9ICRlbC5maW5kKCdbZGF0YS1zY3JvbGxlci1zaGFkb3dzLWNvbnRlbnRdJylbMF0gfHwgbnVsbCxcblx0XHRcdGZGdW5jID0gXy50aHJvdHRsZSgoKSA9PiB7XG5cdFx0XHRcdCRlbFxuXHRcdFx0XHRcdC50b2dnbGVDbGFzcygnc2Nyb2xsZXItc2hhZG93LXRvcCcsIGxpbWl0IDwgY29udC5zY3JvbGxUb3ApXG5cdFx0XHRcdFx0LnRvZ2dsZUNsYXNzKCdzY3JvbGxlci1zaGFkb3ctYm90dG9tJywgY29udC5zY3JvbGxUb3AgKyBsaW1pdCA8IGNvbnQuc2Nyb2xsSGVpZ2h0IC0gY29udC5jbGllbnRIZWlnaHQpO1xuXHRcdFx0fSwgMTAwKTtcblxuXHRcdGlmIChjb250KSB7XG5cdFx0XHQkKGNvbnQpLm9uKCdzY3JvbGwgcmVzaXplJywgZkZ1bmMpO1xuXHRcdFx0JHdpbi5vbigncmVzaXplJywgZkZ1bmMpO1xuXG5cdFx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGNvbnQsICgpID0+IHtcblx0XHRcdFx0JChjb250KS5vZmYoKTtcblx0XHRcdFx0JHdpbi5vZmYoJ3Jlc2l6ZScsIGZGdW5jKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnBpa2FkYXkgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpID0+IHtcblx0XHRrby5iaW5kaW5nSGFuZGxlcnMudGV4dElucHV0LmluaXQoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdGlmIChQaWthZGF5KSB7XG5cdFx0XHRlbGVtZW50Ll9fcGlrYWRheSA9IG5ldyBQaWthZGF5KHtcblx0XHRcdFx0ZmllbGQ6IGVsZW1lbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnZpc2libGVBbmltYXRlZCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHQkZWwuYWRkQ2xhc3MoJ3JsLWFuaW1hdGVkLWluaXRlZCcpO1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCRlbC5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC5oaWRlKCk7XG5cdFx0fVxuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JGVsLmFkZENsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKS5zaG93KCk7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0JGVsLnJlbW92ZUNsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKTtcblx0XHRcdH0sIDEwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLmhpZGUoKS5yZW1vdmVDbGFzcygncmwtYW5pbWF0ZWQtaGlkZGVuJyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudG9vbHRpcCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRpc01vYmlsZSA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1tb2JpbGUnKSB8fCAnb2ZmJyksXG5cdFx0XHRpc0kxOE4gPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtaTE4bicpIHx8ICdvbicpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSB8fCBpc01vYmlsZSkge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gIWtvLmlzT2JzZXJ2YWJsZShmVmFsdWUpICYmIF8uaXNGdW5jdGlvbihmVmFsdWUpID8gZlZhbHVlKCkgOiBrby51bndyYXAoZlZhbHVlKTtcblxuXHRcdFx0ZWxlbWVudC5fX29wZW50aXAgPSBuZXcgT3BlbnRpcChlbGVtZW50LCB7XG5cdFx0XHRcdCdzdHlsZSc6ICdyYWlubG9vcFRpcCcsXG5cdFx0XHRcdCdlbGVtZW50JzogZWxlbWVudCxcblx0XHRcdFx0J3RpcEpvaW50JzogJGVsLmRhdGEoJ3Rvb2x0aXAtam9pbicpIHx8ICdib3R0b20nXG5cdFx0XHR9KTtcblxuXHRcdFx0R2xvYmFscy5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCcnID09PSBzVmFsdWUpIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzSTE4Tikge1xuXHRcdFx0XHRjb25zdCBUcmFuc2xhdG9yID0gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKTtcblxuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblxuXHRcdFx0XHRUcmFuc2xhdG9yLnRyaWdnZXIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0R2xvYmFscy5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChUcmFuc2xhdG9yLmkxOG4oc1ZhbHVlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoc1ZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0JHdpbi5vbigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScsICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0JHdpbi5vbigncmwudG9vbHRpcHMuYWN0aXZhdGUnLCAoKSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmFjdGl2YXRlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRpc01vYmlsZSA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1tb2JpbGUnKSB8fCAnb2ZmJyksXG5cdFx0XHRpc0kxOE4gPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtaTE4bicpIHx8ICdvbicpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHRpZiAoKCFHbG9iYWxzLmJNb2JpbGVEZXZpY2UgfHwgaXNNb2JpbGUpICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpO1xuXHRcdFx0aWYgKHNWYWx1ZSkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KGlzSTE4TiA/IHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4bihzVmFsdWUpIDogc1ZhbHVlKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KCcnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50b29sdGlwRXJyb3JUaXAgPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0ZWxlbWVudC5fX29wZW50aXAgPSBuZXcgT3BlbnRpcChlbGVtZW50LCB7XG5cdFx0XHRzdHlsZTogJ3JhaW5sb29wRXJyb3JUaXAnLFxuXHRcdFx0aGlkZU9uOiAnbW91c2VvdXQgY2xpY2snLFxuXHRcdFx0ZWxlbWVudDogZWxlbWVudCxcblx0XHRcdHRpcEpvaW50OiAkZWwuZGF0YSgndG9vbHRpcC1qb2luJykgfHwgJ3RvcCdcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblxuXHRcdCQod2luZG93LmRvY3VtZW50KS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRmRGlzcG9zYWxUb29sdGlwSGVscGVyKGVsZW1lbnQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0dmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpLFxuXHRcdFx0b3BlblRpcHMgPSBlbGVtZW50Ll9fb3BlbnRpcDtcblxuXHRcdGlmIChvcGVuVGlwcykge1xuXHRcdFx0aWYgKCcnID09PSB2YWx1ZSkge1xuXHRcdFx0XHRvcGVuVGlwcy5oaWRlKCk7XG5cdFx0XHRcdG9wZW5UaXBzLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0b3BlblRpcHMuc2V0Q29udGVudCgnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRpZiAoJGVsLmlzKCc6dmlzaWJsZScpKSB7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zZXRDb250ZW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmFjdGl2YXRlKCk7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmhpZGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNldENvbnRlbnQoJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucmVnaXN0cmF0ZUJvb3RzdHJhcERyb3Bkb3duID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXHRcdGlmIChHbG9iYWxzICYmIEdsb2JhbHMuZGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zKSB7XG5cdFx0XHRHbG9iYWxzLmRhdGEuYUJvb3RzdHJhcERyb3Bkb3ducy5wdXNoKCQoZWxlbWVudCkpO1xuXG5cdFx0XHQkKGVsZW1lbnQpLmNsaWNrKCgpID0+IHtcblx0XHRcdFx0cmVxdWlyZSgnQ29tbW9uL1V0aWxzJykuZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8ga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQvLyB9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vcGVuRHJvcGRvd25UcmlnZ2VyID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0XHRpZiAoISRlbC5oYXNDbGFzcygnb3BlbicpKSB7XG5cdFx0XHRcdCRlbC5maW5kKCcuZHJvcGRvd24tdG9nZ2xlJykuZHJvcGRvd24oJ3RvZ2dsZScpO1xuXHRcdFx0fVxuXG5cdFx0XHQkZWwuZmluZCgnLmRyb3Bkb3duLXRvZ2dsZScpLmZvY3VzKCk7XG5cblx0XHRcdHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLmRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdFx0ZlZhbHVlQWNjZXNzb3IoKShmYWxzZSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZHJvcGRvd25DbG9zZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmNsb3Nlc3QoJy5kcm9wZG93bicpXG5cdFx0XHQub24oJ2NsaWNrJywgJy5lLWl0ZW0nLCAoKSA9PiB7XG5cdFx0XHRcdCQoZWxlbWVudCkuZHJvcGRvd24oJ3RvZ2dsZScpO1xuXHRcdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5wb3BvdmVyID0ge1xuXHRpbml0OiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdCQoZWxlbWVudCkucG9wb3Zlcihrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLnBvcG92ZXIoJ2Rlc3Ryb3knKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNzc3RleHQgPSB7fTtcbmtvLmJpbmRpbmdIYW5kbGVycy5jc3N0ZXh0LmluaXQgPSBrby5iaW5kaW5nSGFuZGxlcnMuY3NzdGV4dC51cGRhdGUgPSAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0aWYgKGVsZW1lbnQgJiYgZWxlbWVudC5zdHlsZVNoZWV0ICYmICd1bmRlZmluZWQnICE9PSB0eXBlb2YgZWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQpIHtcblx0XHRlbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKTtcblx0fSBlbHNlIHtcblx0XHQkKGVsZW1lbnQpLnRleHQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnJlc2l6ZWNyb3AgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmFkZENsYXNzKCdyZXNpemVjcm9wJylcblx0XHRcdC5yZXNpemVjcm9wKHtcblx0XHRcdFx0J3dpZHRoJzogJzEwMCcsXG5cdFx0XHRcdCdoZWlnaHQnOiAnMTAwJyxcblx0XHRcdFx0J3dyYXBwZXJDU1MnOiB7XG5cdFx0XHRcdFx0J2JvcmRlci1yYWRpdXMnOiAnMTBweCdcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0ZlZhbHVlQWNjZXNzb3IoKSgpO1xuXHRcdCQoZWxlbWVudCkucmVzaXplY3JvcCh7XG5cdFx0XHQnd2lkdGgnOiAnMTAwJyxcblx0XHRcdCdoZWlnaHQnOiAnMTAwJ1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25LZXlEb3duID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlkb3duLmtvT25LZXlEb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0cmV0dXJuIGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwsIGV2ZW50KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXlkb3duLmtvT25LZXlEb3duJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbkVudGVyID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlwcmVzcy5rb09uRW50ZXInLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAxMyA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHQkKGVsZW1lbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXByZXNzLmtvT25FbnRlcicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25TcGFjZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5dXAua29PblNwYWNlJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgMzIgPT09IHdpbmRvdy5wYXJzZUludChldmVudC5rZXlDb2RlLCAxMCkpIHtcblx0XHRcdFx0ZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5dXAua29PblNwYWNlJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vblRhYiA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5ZG93bi5rb09uVGFiJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgOSA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHRyZXR1cm4gZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgISFldmVudC5zaGlmdEtleSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleWRvd24ua29PblRhYicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25Fc2MgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleXVwLmtvT25Fc2MnLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAyNyA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHQkKGVsZW1lbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXVwLmtvT25Fc2MnKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNsaWNrT25UcnVlID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCQoZWxlbWVudCkuY2xpY2soKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5tb2RhbCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHRVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpO1xuXG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LnRvZ2dsZUNsYXNzKCdmYWRlJywgIUdsb2JhbHMuYk1vYmlsZURldmljZSlcblx0XHRcdC5tb2RhbCh7XG5cdFx0XHRcdCdrZXlib2FyZCc6IGZhbHNlLFxuXHRcdFx0XHQnc2hvdyc6IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKVxuXHRcdFx0fSlcblx0XHRcdC5vbignc2hvd24ua29Nb2RhbCcsIFV0aWxzLndpbmRvd1Jlc2l6ZUNhbGxiYWNrKVxuXHRcdFx0LmZpbmQoJy5jbG9zZScpXG5cdFx0XHQub24oJ2NsaWNrLmtvTW9kYWwnLCAoKSA9PiB7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkoZmFsc2UpO1xuXHRcdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0Lm9mZignc2hvd24ua29Nb2RhbCcpXG5cdFx0XHRcdC5maW5kKCcuY2xvc2UnKVxuXHRcdFx0XHQub2ZmKCdjbGljay5rb01vZGFsJyk7XG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHQkKGVsZW1lbnQpLm1vZGFsKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSA/ICdzaG93JyA6ICdoaWRlJyk7XG5cblx0XHRpZiAoR2xvYmFscy4kaHRtbC5oYXNDbGFzcygncmwtYW5pbScpKSB7XG5cdFx0XHRHbG9iYWxzLiRodG1sLmFkZENsYXNzKCdybC1tb2RhbC1hbmltYXRpb24nKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRHbG9iYWxzLiRodG1sLnJlbW92ZUNsYXNzKCdybC1tb2RhbC1hbmltYXRpb24nKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm1vbWVudCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL01vbWVudG9yJykubW9tZW50VG9Ob2RlKFxuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ21vbWVudCcpXG5cdFx0XHRcdC5kYXRhKCdtb21lbnQtdGltZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSlcblx0XHQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9Nb21lbnRvcicpLm1vbWVudFRvTm9kZSgkKGVsZW1lbnQpLmRhdGEoJ21vbWVudC10aW1lJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pMThuSW5pdCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG5Ub05vZGVzKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudHJhbnNsYXRvckluaXQgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuVG9Ob2RlcyhlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmkxOG5VcGRhdGUgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0a28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4blRvTm9kZXMoZWxlbWVudCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5saW5rID0ge1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5hdHRyKCdocmVmJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRpdGxlID0ge1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5hdHRyKCd0aXRsZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50ZXh0RiA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLnRleHQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXREb20gPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0ZlZhbHVlQWNjZXNzb3IoKShlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXRGaXhlZFRyaWdnZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IHZhbHVlcyA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHR0b3AgPSB2YWx1ZXNbMV0gfHwgMDtcblxuXHRcdGxldCAkY29udGFpbmVyID0gJCh2YWx1ZXNbMF0gfHwgbnVsbCk7XG5cdFx0JGNvbnRhaW5lciA9ICRjb250YWluZXJbMF0gPyAkY29udGFpbmVyIDogbnVsbDtcblx0XHRpZiAoJGNvbnRhaW5lcikge1xuXHRcdFx0JHdpbi5yZXNpemUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvZmZzZXQgPSAkY29udGFpbmVyID8gJGNvbnRhaW5lci5vZmZzZXQoKSA6IG51bGw7XG5cdFx0XHRcdGlmIChvZmZzZXQgJiYgb2Zmc2V0LnRvcCkge1xuXHRcdFx0XHRcdCRlbC5jc3MoJ3RvcCcsIG9mZnNldC50b3AgKyB0b3ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pbml0UmVzaXplVHJpZ2dlciA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVzID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHRcdCQoZWxlbWVudCkuY3NzKHtcblx0XHRcdCdoZWlnaHQnOiB2YWx1ZXNbMV0sXG5cdFx0XHQnbWluLWhlaWdodCc6IHZhbHVlc1sxXVxuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGU6IChvRWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHR2YWx1ZXMgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cblx0XHRsZXQgdmFsdWUgPSBVdGlscy5wSW50KHZhbHVlc1sxXSksXG5cdFx0XHRzaXplID0gMCxcblx0XHRcdG9mZnNldCA9ICQob0VsZW1lbnQpLm9mZnNldCgpLnRvcDtcblxuXHRcdGlmICgwIDwgb2Zmc2V0KSB7XG5cdFx0XHRvZmZzZXQgKz0gVXRpbHMucEludCh2YWx1ZXNbMl0pO1xuXHRcdFx0c2l6ZSA9IEdsb2JhbHMuJHdpbi5oZWlnaHQoKSAtIG9mZnNldDtcblxuXHRcdFx0aWYgKHZhbHVlIDwgc2l6ZSkge1xuXHRcdFx0XHR2YWx1ZSA9IHNpemU7XG5cdFx0XHR9XG5cblx0XHRcdCQob0VsZW1lbnQpLmNzcyh7XG5cdFx0XHRcdCdoZWlnaHQnOiB2YWx1ZSxcblx0XHRcdFx0J21pbi1oZWlnaHQnOiB2YWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuYXBwZW5kRG9tID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5lbXB0eSgpXG5cdFx0XHQuYXBwZW5kKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSlcblx0XHRcdC5zaG93KCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcmFnZ2FibGUgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSkge1xuXHRcdFx0Y29uc3QgdHJpZ2dlclpvbmUgPSAxMDAsXG5cdFx0XHRcdHNjcm9sbFNwZWVkID0gMyxcblx0XHRcdFx0ZkFsbFZhbHVlRnVuYyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRcdGRyb3BwYWJsZVNlbGVjdG9yID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZVNlbGVjdG9yID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVTZWxlY3RvciA6ICcnLFxuXHRcdFx0XHRjb25mID0ge1xuXHRcdFx0XHRcdGRpc3RhbmNlOiAyMCxcblx0XHRcdFx0XHRoYW5kbGU6ICcuZHJhZ0hhbmRsZScsXG5cdFx0XHRcdFx0Y3Vyc29yQXQ6IHsgdG9wOiAyMiwgbGVmdDogMyB9LFxuXHRcdFx0XHRcdHJlZnJlc2hQb3NpdGlvbnM6IHRydWUsXG5cdFx0XHRcdFx0c2Nyb2xsOiB0cnVlLFxuXHRcdFx0XHRcdGRyYWc6IG51bGwsXG5cdFx0XHRcdFx0c3RvcDogbnVsbCxcblx0XHRcdFx0XHRoZWxwZXI6IG51bGxcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKGRyb3BwYWJsZVNlbGVjdG9yKSB7XG5cdFx0XHRcdGNvbmYuZHJhZyA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdCQoZHJvcHBhYmxlU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0XHRcdG9mZnNldCA9ICR0aGlzLm9mZnNldCgpLFxuXHRcdFx0XHRcdFx0XHRib3R0b21Qb3MgPSBvZmZzZXQudG9wICsgJHRoaXMuaGVpZ2h0KCk7XG5cblx0XHRcdFx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJykpO1xuXHRcdFx0XHRcdFx0JHRoaXMuZGF0YSgndGltZXJTY3JvbGwnLCBmYWxzZSk7XG5cblx0XHRcdFx0XHRcdGlmIChldmVudC5wYWdlWCA+PSBvZmZzZXQubGVmdCAmJiBldmVudC5wYWdlWCA8PSBvZmZzZXQubGVmdCArICR0aGlzLndpZHRoKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnBhZ2VZID49IGJvdHRvbVBvcyAtIHRyaWdnZXJab25lICYmIGV2ZW50LnBhZ2VZIDw9IGJvdHRvbVBvcykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1vdmVVcCA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjcm9sbFRvcCgkdGhpcy5zY3JvbGxUb3AoKSArIHNjcm9sbFNwZWVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFV0aWxzLndpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIHdpbmRvdy5zZXRJbnRlcnZhbChtb3ZlVXAsIDEwKSk7XG5cdFx0XHRcdFx0XHRcdFx0bW92ZVVwKCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnQucGFnZVkgPj0gb2Zmc2V0LnRvcCAmJiBldmVudC5wYWdlWSA8PSBvZmZzZXQudG9wICsgdHJpZ2dlclpvbmUpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtb3ZlRG93biA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjcm9sbFRvcCgkdGhpcy5zY3JvbGxUb3AoKSAtIHNjcm9sbFNwZWVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFV0aWxzLndpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIHdpbmRvdy5zZXRJbnRlcnZhbChtb3ZlRG93biwgMTApKTtcblx0XHRcdFx0XHRcdFx0XHRtb3ZlRG93bigpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uZi5zdG9wID0gKCkgPT4ge1xuXHRcdFx0XHRcdCQoZHJvcHBhYmxlU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0XHR3aW5kb3cuY2xlYXJJbnRlcnZhbCgkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcpKTtcblx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgZmFsc2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25mLmhlbHBlciA9IChldmVudCkgPT4gZlZhbHVlQWNjZXNzb3IoKShldmVudCAmJiBldmVudC50YXJnZXQgPyBrby5kYXRhRm9yKGV2ZW50LnRhcmdldCkgOiBudWxsKTtcblxuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuZHJhZ2dhYmxlKGNvbmYpXG5cdFx0XHRcdC5vbignbW91c2Vkb3duLmtvRHJhZ2dhYmxlJywgKCkgPT4ge1xuXHRcdFx0XHRcdFV0aWxzLnJlbW92ZUluRm9jdXMoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdFx0Lm9mZignbW91c2Vkb3duLmtvRHJhZ2dhYmxlJylcblx0XHRcdFx0XHQuZHJhZ2dhYmxlKCdkZXN0cm95Jyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcm9wcGFibGUgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSkge1xuXHRcdFx0Y29uc3QgZlZhbHVlRnVuYyA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRcdGZBbGxWYWx1ZUZ1bmMgPSBmQWxsQmluZGluZ3NBY2Nlc3NvcigpLFxuXHRcdFx0XHRmT3ZlckNhbGxiYWNrID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU92ZXIgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU92ZXIgOiBudWxsLFxuXHRcdFx0XHRmT3V0Q2FsbGJhY2sgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3V0ID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVPdXQgOiBudWxsLFxuXHRcdFx0XHRjb25mID0ge1xuXHRcdFx0XHRcdHRvbGVyYW5jZTogJ3BvaW50ZXInLFxuXHRcdFx0XHRcdGhvdmVyQ2xhc3M6ICdkcm9wcGFibGVIb3ZlcicsXG5cdFx0XHRcdFx0ZHJvcDogbnVsbCxcblx0XHRcdFx0XHRvdmVyOiBudWxsLFxuXHRcdFx0XHRcdG91dDogbnVsbFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoZlZhbHVlRnVuYykge1xuXHRcdFx0XHRjb25mLmRyb3AgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0ZlZhbHVlRnVuYyhldmVudCwgdWkpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChmT3ZlckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y29uZi5vdmVyID0gKGV2ZW50LCB1aSkgPT4ge1xuXHRcdFx0XHRcdFx0Zk92ZXJDYWxsYmFjayhldmVudCwgdWkpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZk91dENhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y29uZi5vdXQgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0XHRmT3V0Q2FsbGJhY2soZXZlbnQsIHVpKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JChlbGVtZW50KS5kcm9wcGFibGUoY29uZik7XG5cblx0XHRcdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRcdFx0JChlbGVtZW50KS5kcm9wcGFibGUoJ2Rlc3Ryb3knKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMubmFubyA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFNldHRpbmdzID0gcmVxdWlyZSgnU3RvcmFnZS9TZXR0aW5ncycpO1xuXG5cdFx0aWYgKCFHbG9iYWxzLmJEaXNhYmxlTmFub1Njcm9sbCAmJiAhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3VzZU5hdGl2ZVNjcm9sbGJhcnMnKSkge1xuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ25hbm8nKVxuXHRcdFx0XHQubmFub1Njcm9sbGVyKHtcblx0XHRcdFx0XHRpT1NOYXRpdmVTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdHByZXZlbnRQYWdlU2Nyb2xsaW5nOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnNhdmVUcmlnZ2VyID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHQkZWwuZGF0YShcblx0XHRcdCdzYXZlLXRyaWdnZXItdHlwZScsXG5cdFx0XHQkZWwuaXMoJ2lucHV0W3R5cGU9dGV4dF0saW5wdXRbdHlwZT1lbWFpbF0saW5wdXRbdHlwZT1wYXNzd29yZF0sc2VsZWN0LHRleHRhcmVhJykgPyAnaW5wdXQnIDogJ2N1c3RvbSdcblx0XHQpO1xuXG5cdFx0aWYgKCdjdXN0b20nID09PSAkZWwuZGF0YSgnc2F2ZS10cmlnZ2VyLXR5cGUnKSkge1xuXHRcdFx0JGVsXG5cdFx0XHRcdC5hcHBlbmQoXG5cdFx0XHRcdFx0JyZuYnNwOyZuYnNwOycgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1zcGlubmVyIGFuaW1hdGVkXCI+PC9pPicgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1yZW1vdmUgZXJyb3JcIj48L2k+JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLW9rIHN1Y2Nlc3NcIj48L2k+J1xuXHRcdFx0XHQpXG5cdFx0XHRcdC5hZGRDbGFzcygnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlcicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZWwuYWRkQ2xhc3MoJ3NldHRpbmdzLXNhdmVkLXRyaWdnZXItaW5wdXQnKTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSksXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0aWYgKCdjdXN0b20nID09PSAkZWwuZGF0YSgnc2F2ZS10cmlnZ2VyLXR5cGUnKSkge1xuXHRcdFx0c3dpdGNoICh2YWx1ZS50b1N0cmluZygpKSB7XG5cdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuZXJyb3InKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHQkZWxcblx0XHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvcicpXG5cdFx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnLTInOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCcpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN3aXRjaCAodmFsdWUudG9TdHJpbmcoKSkge1xuXHRcdFx0XHRjYXNlICcxJzpcblx0XHRcdFx0XHQkZWwuYWRkQ2xhc3MoJ3N1Y2Nlc3MnKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0JGVsLmFkZENsYXNzKCdlcnJvcicpLnJlbW92ZUNsYXNzKCdzdWNjZXNzJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJy0yJzpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQkZWwucmVtb3ZlQ2xhc3MoJ2Vycm9yIHN1Y2Nlc3MnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5lbWFpbHNUYWdzID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRcdEVtYWlsTW9kZWwgPSByZXF1aXJlKCdNb2RlbC9FbWFpbCcpLmRlZmF1bHQsXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGZBbGxCaW5kaW5ncyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRmQXV0b0NvbXBsZXRlU291cmNlID0gZkFsbEJpbmRpbmdzLmF1dG9Db21wbGV0ZVNvdXJjZSB8fCBudWxsLFxuXHRcdFx0aW5wdXREZWxpbWl0ZXJzID0gWycsJywgJzsnLCAnXFxuJ10sXG5cdFx0XHRmRm9jdXNDYWxsYmFjayA9ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5mb2N1c2VkKSB7XG5cdFx0XHRcdFx0ZlZhbHVlLmZvY3VzZWQoISF2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQkZWwuaW5wdXRvc2F1cnVzKHtcblx0XHRcdHBhcnNlT25CbHVyOiB0cnVlLFxuXHRcdFx0YWxsb3dEcmFnQW5kRHJvcDogdHJ1ZSxcblx0XHRcdGZvY3VzQ2FsbGJhY2s6IGZGb2N1c0NhbGxiYWNrLFxuXHRcdFx0aW5wdXREZWxpbWl0ZXJzOiBpbnB1dERlbGltaXRlcnMsXG5cdFx0XHRhdXRvQ29tcGxldGVTb3VyY2U6IGZBdXRvQ29tcGxldGVTb3VyY2UsXG5cdFx0XHRzcGxpdEhvb2s6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCB2ID0gVXRpbHMudHJpbSh2YWx1ZSk7XG5cdFx0XHRcdGlmICh2ICYmIC0xIDwgaW5wdXREZWxpbWl0ZXJzLmluZGV4T2Yodi5zdWJzdHIoLTEpKSkge1xuXHRcdFx0XHRcdHJldHVybiBFbWFpbE1vZGVsLnNwbGl0RW1haWxMaW5lKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0sXG5cdFx0XHRwYXJzZUhvb2s6IChpbnB1dCkgPT5cblx0XHRcdFx0Xy5tYXAoXG5cdFx0XHRcdFx0Xy5mbGF0dGVuKFxuXHRcdFx0XHRcdFx0Xy5tYXAoaW5wdXQsIChpbnB1dFZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoaW5wdXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzIDogaW5wdXRWYWx1ZTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHQoaXRlbSkgPT4gKF8uaXNPYmplY3QoaXRlbSkgPyBbaXRlbS50b0xpbmUoZmFsc2UpLCBpdGVtXSA6IFtpdGVtLCBudWxsXSlcblx0XHRcdFx0KSxcblx0XHRcdGNoYW5nZTogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdCRlbC5kYXRhKCdFbWFpbHNUYWdzVmFsdWUnLCBldmVudC50YXJnZXQudmFsdWUpO1xuXHRcdFx0XHRmVmFsdWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLmZvY3VzZWQgJiYgZlZhbHVlLmZvY3VzZWQuc3Vic2NyaWJlKSB7XG5cdFx0XHRmVmFsdWUuZm9jdXNlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdCRlbC5pbnB1dG9zYXVydXModmFsdWUgPyAnZm9jdXMnIDogJ2JsdXInKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkb0VsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHR2YWx1ZSA9IGtvLnVud3JhcChmVmFsdWUpO1xuXG5cdFx0aWYgKCRvRWwuZGF0YSgnRW1haWxzVGFnc1ZhbHVlJykgIT09IHZhbHVlKSB7XG5cdFx0XHQkb0VsLnZhbCh2YWx1ZSk7XG5cdFx0XHQkb0VsLmRhdGEoJ0VtYWlsc1RhZ3NWYWx1ZScsIHZhbHVlKTtcblx0XHRcdCRvRWwuaW5wdXRvc2F1cnVzKCdyZWZyZXNoJyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY29tbWFuZCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkgPT4ge1xuXHRcdGNvbnN0IGpxRWxlbWVudCA9ICQoZWxlbWVudCksXG5cdFx0XHRjb21tYW5kID0gZlZhbHVlQWNjZXNzb3IoKTtcblxuXHRcdGlmICghY29tbWFuZCB8fCAhY29tbWFuZC5pc0NvbW1hbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVmFsdWUgc2hvdWxkIGJlIGEgY29tbWFuZCcpO1xuXHRcdH1cblxuXHRcdGlmICghY29tbWFuZC5lbmFibGVkKSB7XG5cdFx0XHRjb21tYW5kLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICghY29tbWFuZC5jYW5FeGVjdXRlKSB7XG5cdFx0XHRjb25zdCBfX3JlYWxDYW5FeGVjdXRlID0gY29tbWFuZC5fX3JlYWxDYW5FeGVjdXRlO1xuXHRcdFx0aWYgKF8uaXNGdW5jdGlvbihfX3JlYWxDYW5FeGVjdXRlKSkge1xuXHRcdFx0XHRjb21tYW5kLmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBjb21tYW5kLmVuYWJsZWQoKSAmJiBfX3JlYWxDYW5FeGVjdXRlLmNhbGwodmlld01vZGVsLCB2aWV3TW9kZWwpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbW1hbmQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbW1hbmQuZW5hYmxlZCgpICYmICEhX19yZWFsQ2FuRXhlY3V0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0anFFbGVtZW50LmFkZENsYXNzKCdjb21tYW5kJyk7XG5cdFx0a28uYmluZGluZ0hhbmRsZXJzW2pxRWxlbWVudC5pcygnZm9ybScpID8gJ3N1Ym1pdCcgOiAnY2xpY2snXS5pbml0KFxuXHRcdFx0ZWxlbWVudCxcblx0XHRcdGZWYWx1ZUFjY2Vzc29yLFxuXHRcdFx0ZkFsbEJpbmRpbmdzQWNjZXNzb3IsXG5cdFx0XHR2aWV3TW9kZWwsXG5cdFx0XHRiaW5kaW5nQ29udGV4dFxuXHRcdCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QganFFbGVtZW50ID0gJChlbGVtZW50KSxcblx0XHRcdGNvbW1hbmQgPSBmVmFsdWVBY2Nlc3NvcigpO1xuXG5cdFx0bGV0IHJlc3VsdCA9IGNvbW1hbmQuZW5hYmxlZCgpO1xuXG5cdFx0anFFbGVtZW50LnRvZ2dsZUNsYXNzKCdjb21tYW5kLW5vdC1lbmFibGVkJywgIXJlc3VsdCk7XG5cblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRyZXN1bHQgPSBjb21tYW5kLmNhbkV4ZWN1dGUoKTtcblx0XHRcdGpxRWxlbWVudC50b2dnbGVDbGFzcygnY29tbWFuZC1jYW4tbm90LWJlLWV4ZWN1dGUnLCAhcmVzdWx0KTtcblx0XHR9XG5cblx0XHRqcUVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2NvbW1hbmQtZGlzYWJsZWQgZGlzYWJsZSBkaXNhYmxlZCcsICFyZXN1bHQpLnRvZ2dsZUNsYXNzKCduby1kaXNhYmxlZCcsICEhcmVzdWx0KTtcblxuXHRcdGlmIChqcUVsZW1lbnQuaXMoJ2lucHV0JykgfHwganFFbGVtZW50LmlzKCdidXR0b24nKSkge1xuXHRcdFx0anFFbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgIXJlc3VsdCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBleHRlbmRlcnNcblxua28uZXh0ZW5kZXJzLnRyaW1tZXIgPSAodGFyZ2V0KSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LFxuXHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHR0YXJnZXQoVXRpbHMudHJpbShuZXdWYWx1ZS50b1N0cmluZygpKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmtvLmV4dGVuZGVycy5wb3NJbnRlcmVyID0gKHRhcmdldCwgZGVmYXVsdFZhbCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvLmNvbXB1dGVkKHtcblx0XHRcdHJlYWQ6IHRhcmdldCxcblx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0bGV0IHZhbCA9IFV0aWxzLnBJbnQobmV3VmFsdWUudG9TdHJpbmcoKSwgZGVmYXVsdFZhbCk7XG5cdFx0XHRcdGlmICgwID49IHZhbCkge1xuXHRcdFx0XHRcdHZhbCA9IGRlZmF1bHRWYWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsID09PSB0YXJnZXQoKSAmJiAnJyArIHZhbCAhPT0gJycgKyBuZXdWYWx1ZSkge1xuXHRcdFx0XHRcdHRhcmdldCh2YWwgKyAxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldCh2YWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdHJlc3VsdCh0YXJnZXQoKSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5rby5leHRlbmRlcnMubGltaXRlZExpc3QgPSAodGFyZ2V0LCBsaW1pdGVkTGlzdCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoe1xuXHRcdFx0XHRyZWFkOiB0YXJnZXQsXG5cdFx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBrby51bndyYXAodGFyZ2V0KSxcblx0XHRcdFx0XHRcdGxpc3QgPSBrby51bndyYXAobGltaXRlZExpc3QpO1xuXG5cdFx0XHRcdFx0aWYgKFV0aWxzLmlzTm9uRW1wdHlBcnJheShsaXN0KSkge1xuXHRcdFx0XHRcdFx0aWYgKC0xIDwgVXRpbHMuaW5BcnJheShuZXdWYWx1ZSwgbGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KG5ld1ZhbHVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoLTEgPCBVdGlscy5pbkFycmF5KGN1cnJlbnRWYWx1ZSwgbGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGN1cnJlbnRWYWx1ZSArICcgJyk7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGxpc3RbMF0gKyAnICcpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobGlzdFswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhcmdldCgnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblxuXHRpZiAoIXJlc3VsdC52YWx1ZUhhc011dGF0ZWQpIHtcblx0XHRyZXN1bHQudmFsdWVIYXNNdXRhdGVkID0gKCkgPT4ge1xuXHRcdFx0dGFyZ2V0LnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxua28uZXh0ZW5kZXJzLnJldmVyc2libGUgPSAodGFyZ2V0KSA9PiB7XG5cdGxldCB2YWx1ZSA9IHRhcmdldCgpO1xuXG5cdHRhcmdldC5jb21taXQgPSAoKSA9PiB7XG5cdFx0dmFsdWUgPSB0YXJnZXQoKTtcblx0fTtcblxuXHR0YXJnZXQucmV2ZXJzZSA9ICgpID0+IHtcblx0XHR0YXJnZXQodmFsdWUpO1xuXHR9O1xuXG5cdHRhcmdldC5jb21taXRlZFZhbHVlID0gKCkgPT4gdmFsdWU7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMudG9nZ2xlU3Vic2NyaWJlID0gKHRhcmdldCwgb3B0aW9ucykgPT4ge1xuXHR0YXJnZXQuc3Vic2NyaWJlKG9wdGlvbnNbMV0sIG9wdGlvbnNbMF0sICdiZWZvcmVDaGFuZ2UnKTtcblx0dGFyZ2V0LnN1YnNjcmliZShvcHRpb25zWzJdLCBvcHRpb25zWzBdKTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy50b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eSA9ICh0YXJnZXQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcHJvcCA9IG9wdGlvbnNbMV07XG5cdGlmIChwcm9wKSB7XG5cdFx0dGFyZ2V0LnN1YnNjcmliZShcblx0XHRcdChwcmV2KSA9PiB7XG5cdFx0XHRcdGlmIChwcmV2ICYmIHByZXZbcHJvcF0pIHtcblx0XHRcdFx0XHRwcmV2W3Byb3BdKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnNbMF0sXG5cdFx0XHQnYmVmb3JlQ2hhbmdlJ1xuXHRcdCk7XG5cblx0XHR0YXJnZXQuc3Vic2NyaWJlKChuZXh0KSA9PiB7XG5cdFx0XHRpZiAobmV4dCAmJiBuZXh0W3Byb3BdKSB7XG5cdFx0XHRcdG5leHRbcHJvcF0odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSwgb3B0aW9uc1swXSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLmZhbHNlVGltZW91dCA9ICh0YXJnZXQsIG9wdGlvbikgPT4ge1xuXHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSAwO1xuXHR0YXJnZXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQpO1xuXHRcdFx0dGFyZ2V0LmlGYWxzZVRpbWVvdXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0YXJnZXQoZmFsc2UpO1xuXHRcdFx0XHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSAwO1xuXHRcdFx0fSwgcmVxdWlyZSgnQ29tbW9uL1V0aWxzJykucEludChvcHRpb24pKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMuc3BlY2lhbFRocm90dGxlID0gKHRhcmdldCwgb3B0aW9uKSA9PiB7XG5cdHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJykucEludChvcHRpb24pO1xuXHRpZiAoMCA8IHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlKSB7XG5cdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gMDtcblx0XHR0YXJnZXQudmFsdWVGb3JSZWFkID0ga28ub2JzZXJ2YWJsZSghIXRhcmdldCgpKS5leHRlbmQoeyB0aHJvdHRsZTogMTAgfSk7XG5cblx0XHRyZXR1cm4ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LnZhbHVlRm9yUmVhZCxcblx0XHRcdHdyaXRlOiAoYlZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmIChiVmFsdWUpIHtcblx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGJWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHRhcmdldC52YWx1ZUZvclJlYWQoKSkge1xuXHRcdFx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gMDtcblx0XHRcdFx0XHRcdH0sIHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnZhbHVlRm9yUmVhZChiVmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy5pZGxlVHJpZ2dlciA9ICh0YXJnZXQpID0+IHtcblx0dGFyZ2V0LnRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG4vLyBmdW5jdGlvbnNcblxua28ub2JzZXJ2YWJsZS5mbi5pZGxlVHJpZ2dlciA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5leHRlbmQoeyAnaWRsZVRyaWdnZXInOiB0cnVlIH0pO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZU5vbmUgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5oYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4udmFsaWRhdGVFbWFpbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmhhc0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0dGhpcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0dGhpcy5oYXNFcnJvcignJyAhPT0gdmFsdWUgJiYgIS9eW15AXFxzXStAW15AXFxzXSskLy50ZXN0KHZhbHVlKSk7XG5cdH0pO1xuXG5cdHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XG5cdHJldHVybiB0aGlzO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZVNpbXBsZUVtYWlsID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHR0aGlzLmhhc0Vycm9yKCcnICE9PSB2YWx1ZSAmJiAhL14uK0AuKyQvLnRlc3QodmFsdWUpKTtcblx0fSk7XG5cblx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLmRlbGV0ZUFjY2Vzc0hlbHBlciA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMzAwMCB9KS5leHRlbmQoeyB0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eTogW3RoaXMsICdkZWxldGVBY2Nlc3MnXSB9KTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlRnVuYyA9IGZ1bmN0aW9uKGZGdW5jKSB7XG5cdHRoaXMuaGFzRnVuY0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0aWYgKF8uaXNGdW5jdGlvbihmRnVuYykpIHtcblx0XHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHRoaXMuaGFzRnVuY0Vycm9yKCFmRnVuYyh2YWx1ZSkpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQga287XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBBdXRvbGlua2VyIGZyb20gJ0F1dG9saW5rZXInO1xuXG5pbXBvcnQgeyAkd2luLCAkZGl2LCAkaGNvbnQsIGRyb3Bkb3duVmlzaWJpbGl0eSwgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IENvbXBvc2VUeXBlLCBFdmVudEtleUNvZGUsIFNhdmVTZXR0aW5nc1N0ZXAsIEZvbGRlclR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgTWltZSB9IGZyb20gJ0NvbW1vbi9NaW1lJztcbmltcG9ydCB7IGphc3NsIH0gZnJvbSAnQ29tbW9uL0phc3NsJztcblxuY29uc3QgdHJpbSA9ICQudHJpbTtcbmNvbnN0IGluQXJyYXkgPSAkLmluQXJyYXk7XG5jb25zdCBpc0FycmF5ID0gXy5pc0FycmF5O1xuY29uc3QgaXNPYmplY3QgPSBfLmlzT2JqZWN0O1xuY29uc3QgaXNGdW5jID0gXy5pc0Z1bmN0aW9uO1xuY29uc3QgaXNVbmQgPSBfLmlzVW5kZWZpbmVkO1xuY29uc3QgaXNOdWxsID0gXy5pc051bGw7XG5jb25zdCBoYXMgPSBfLmhhcztcbmNvbnN0IGJpbmQgPSBfLmJpbmQ7XG5jb25zdCBub29wID0gKCkgPT4ge307IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbmNvbnN0IG5vb3BUcnVlID0gKCkgPT4gdHJ1ZTtcbmNvbnN0IG5vb3BGYWxzZSA9ICgpID0+IGZhbHNlO1xuXG5leHBvcnQgeyB0cmltLCBpbkFycmF5LCBpc0FycmF5LCBpc09iamVjdCwgaXNGdW5jLCBpc1VuZCwgaXNOdWxsLCBoYXMsIGJpbmQsIG5vb3AsIG5vb3BUcnVlLCBub29wRmFsc2UsIGphc3NsIH07XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lsZW50VHJ5Q2F0Y2goZnVuYykge1xuXHR0cnkge1xuXHRcdGZ1bmMoKTtcblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3JtYWwodmFsdWUpIHtcblx0cmV0dXJuICFpc1VuZCh2YWx1ZSkgJiYgIWlzTnVsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcil9IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpbmNsdWRlWmVybyA9IHRydWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb3NOdW1lcmljKHZhbHVlLCBpbmNsdWRlWmVybyA9IHRydWUpIHtcblx0cmV0dXJuICFpc05vcm1hbCh2YWx1ZSlcblx0XHQ/IGZhbHNlXG5cdFx0OiBpbmNsdWRlWmVyb1xuXHRcdD8gL15bMC05XSokLy50ZXN0KHZhbHVlLnRvU3RyaW5nKCkpXG5cdFx0OiAvXlsxLTldK1swLTldKiQvLnRlc3QodmFsdWUudG9TdHJpbmcoKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBkZWZhdWx0VmFsdXIgPSAwXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcEludCh2YWx1ZSwgZGVmYXVsdFZhbHVyID0gMCkge1xuXHRjb25zdCByZXN1bHQgPSBpc05vcm1hbCh2YWx1ZSkgJiYgJycgIT09IHZhbHVlID8gd2luZG93LnBhcnNlSW50KHZhbHVlLCAxMCkgOiBkZWZhdWx0VmFsdXI7XG5cdHJldHVybiB3aW5kb3cuaXNOYU4ocmVzdWx0KSA/IGRlZmF1bHRWYWx1ciA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcFN0cmluZyh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb3JtYWwodmFsdWUpID8gJycgKyB2YWx1ZSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcEJvb2wodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb2xUb0FqYXgodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID8gJzEnIDogJzAnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm9uRW1wdHlBcnJheSh2YWx1ZXMpIHtcblx0cmV0dXJuIGlzQXJyYXkodmFsdWVzKSAmJiAwIDwgdmFsdWVzLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRyZXR1cm4gd2luZG93LmVuY29kZVVSSUNvbXBvbmVudChjb21wb25lbnQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KSB7XG5cdHJldHVybiB3aW5kb3cuZGVjb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVVSSSh1cmwpIHtcblx0cmV0dXJuIHdpbmRvdy5kZWNvZGVVUkkodXJsKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJKHVybCkge1xuXHRyZXR1cm4gd2luZG93LmVuY29kZVVSSSh1cmwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZ1xuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVF1ZXJ5UGFyc2VyKHF1ZXJ5U3RyaW5nKSB7XG5cdGxldCBpbmRleCA9IDAsXG5cdFx0bGVuID0gMCxcblx0XHR0ZW1wID0gbnVsbDtcblxuXHRjb25zdCBxdWVyaWVzID0gcXVlcnlTdHJpbmcuc3BsaXQoJyYnKSxcblx0XHRwYXJhbXMgPSB7fTtcblxuXHRmb3IgKGxlbiA9IHF1ZXJpZXMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdHRlbXAgPSBxdWVyaWVzW2luZGV4XS5zcGxpdCgnPScpO1xuXHRcdHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQodGVtcFswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMV0pO1xuXHR9XG5cblx0cmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcj19IGxlbiA9IDMyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFrZU1kNShsZW4gPSAzMikge1xuXHRjb25zdCBsaW5lID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicsXG5cdFx0bGluZUxlbiA9IGxpbmUubGVuZ3RoO1xuXG5cdGxlbiA9IHBJbnQobGVuKTtcblxuXHRsZXQgcmVzdWx0ID0gJyc7XG5cdHdoaWxlIChyZXN1bHQubGVuZ3RoIDwgbGVuKSB7XG5cdFx0cmVzdWx0ICs9IGxpbmUuc3Vic3RyKHdpbmRvdy5NYXRoLnJvdW5kKHdpbmRvdy5NYXRoLnJhbmRvbSgpICogbGluZUxlbiksIDEpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUh0bWwodGV4dCkge1xuXHRyZXR1cm4gaXNOb3JtYWwodGV4dCkgPyBfLmVzY2FwZSh0ZXh0LnRvU3RyaW5nKCkpIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7bnVtYmVyPX0gbGVuID0gMTAwXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQbGFpblRleHQodGV4dCwgbGVuID0gMTAwKSB7XG5cdGxldCBwcmVmaXggPSAnJyxcblx0XHRzdWJUZXh0ID0gJycsXG5cdFx0cmVzdWx0ID0gdGV4dCxcblx0XHRzcGFjZVBvcyA9IDAsXG5cdFx0bmV3TGluZVBvcyA9IDA7XG5cblx0d2hpbGUgKHJlc3VsdC5sZW5ndGggPiBsZW4pIHtcblx0XHRzdWJUZXh0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBsZW4pO1xuXHRcdHNwYWNlUG9zID0gc3ViVGV4dC5sYXN0SW5kZXhPZignICcpO1xuXHRcdG5ld0xpbmVQb3MgPSBzdWJUZXh0Lmxhc3RJbmRleE9mKCdcXG4nKTtcblxuXHRcdGlmICgtMSAhPT0gbmV3TGluZVBvcykge1xuXHRcdFx0c3BhY2VQb3MgPSBuZXdMaW5lUG9zO1xuXHRcdH1cblxuXHRcdGlmICgtMSA9PT0gc3BhY2VQb3MpIHtcblx0XHRcdHNwYWNlUG9zID0gbGVuO1xuXHRcdH1cblxuXHRcdHByZWZpeCArPSBzdWJUZXh0LnN1YnN0cmluZygwLCBzcGFjZVBvcykgKyAnXFxuJztcblx0XHRyZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKHNwYWNlUG9zICsgMSk7XG5cdH1cblxuXHRyZXR1cm4gcHJlZml4ICsgcmVzdWx0O1xufVxuXG5jb25zdCB0aW1lT3V0QWN0aW9uID0gKGZ1bmN0aW9uKCkge1xuXHRjb25zdCB0aW1lT3V0cyA9IHt9O1xuXHRyZXR1cm4gKGFjdGlvbiwgZkZ1bmN0aW9uLCB0aW1lT3V0KSA9PiB7XG5cdFx0dGltZU91dHNbYWN0aW9uXSA9IGlzVW5kKHRpbWVPdXRzW2FjdGlvbl0pID8gMCA6IHRpbWVPdXRzW2FjdGlvbl07XG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aW1lT3V0c1thY3Rpb25dKTtcblx0XHR0aW1lT3V0c1thY3Rpb25dID0gd2luZG93LnNldFRpbWVvdXQoZkZ1bmN0aW9uLCB0aW1lT3V0KTtcblx0fTtcbn0pKCk7XG5cbmNvbnN0IHRpbWVPdXRBY3Rpb25TZWNvbmQgPSAoZnVuY3Rpb24oKSB7XG5cdGNvbnN0IHRpbWVPdXRzID0ge307XG5cdHJldHVybiAoYWN0aW9uLCBmRnVuY3Rpb24sIHRpbWVPdXQpID0+IHtcblx0XHRpZiAoIXRpbWVPdXRzW2FjdGlvbl0pIHtcblx0XHRcdHRpbWVPdXRzW2FjdGlvbl0gPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGZGdW5jdGlvbigpO1xuXHRcdFx0XHR0aW1lT3V0c1thY3Rpb25dID0gMDtcblx0XHRcdH0sIHRpbWVPdXQpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbmV4cG9ydCB7IHRpbWVPdXRBY3Rpb24sIHRpbWVPdXRBY3Rpb25TZWNvbmQgfTtcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gbVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlTW9kdWxlKG0pIHtcblx0cmV0dXJuIChtICYmIG0uZGVmYXVsdCA/IG0uZGVmYXVsdCA6IG0pIHx8ICcnO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5Gb2N1cygpIHtcblx0dHJ5IHtcblx0XHRpZiAod2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcblx0XHRcdGlmIChpc1VuZCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5fX2luRm9jdXNDYWNoZSkpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuX19pbkZvY3VzQ2FjaGUgPSAkKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KS5pcyhcblx0XHRcdFx0XHQnaW5wdXQsdGV4dGFyZWEsaWZyYW1lLC5ja2VfZWRpdGFibGUnXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAhIXdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50Ll9faW5Gb2N1c0NhY2hlO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUluRm9jdXMoZm9yY2UpIHtcblx0aWYgKHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFjdGl2ZUVsID0gJCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG5cdFx0XHRpZiAoYWN0aXZlRWwgJiYgYWN0aXZlRWwuaXMoJ2lucHV0LHRleHRhcmVhJykpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuXHRcdFx0fSBlbHNlIGlmIChmb3JjZSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZWxlY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHdpbmRvdyAmJiB3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRpZiAoc2VsICYmIHNlbC5yZW1vdmVBbGxSYW5nZXMpIHtcblx0XHRcdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24gJiYgd2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkge1xuXHRcdFx0d2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbHlTdWJqZWN0QWRkKHByZWZpeCwgc3ViamVjdCkge1xuXHRwcmVmaXggPSB0cmltKHByZWZpeC50b1VwcGVyQ2FzZSgpKTtcblx0c3ViamVjdCA9IHRyaW0oc3ViamVjdC5yZXBsYWNlKC9bXFxzXSsvZywgJyAnKSk7XG5cblx0bGV0IGRyb3AgPSBmYWxzZSxcblx0XHRyZSA9ICdSRScgPT09IHByZWZpeCxcblx0XHRmd2QgPSAnRldEJyA9PT0gcHJlZml4O1xuXG5cdGNvbnN0IHBhcnRzID0gW10sXG5cdFx0cHJlZml4SXNSZSA9ICFmd2Q7XG5cblx0aWYgKCcnICE9PSBzdWJqZWN0KSB7XG5cdFx0Xy5lYWNoKHN1YmplY3Quc3BsaXQoJzonKSwgKHBhcnQpID0+IHtcblx0XHRcdGNvbnN0IHRyaW1tZWRQYXJ0ID0gdHJpbShwYXJ0KTtcblx0XHRcdGlmICghZHJvcCAmJiAoL14oUkV8RldEKSQvaS50ZXN0KHRyaW1tZWRQYXJ0KSB8fCAvXihSRXxGV0QpW1soXVtcXGRdK1tcXF0pXSQvaS50ZXN0KHRyaW1tZWRQYXJ0KSkpIHtcblx0XHRcdFx0aWYgKCFyZSkge1xuXHRcdFx0XHRcdHJlID0gISEvXlJFL2kudGVzdCh0cmltbWVkUGFydCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWZ3ZCkge1xuXHRcdFx0XHRcdGZ3ZCA9ICEhL15GV0QvaS50ZXN0KHRyaW1tZWRQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFydHMucHVzaChwYXJ0KTtcblx0XHRcdFx0ZHJvcCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAocHJlZml4SXNSZSkge1xuXHRcdHJlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0ZndkID0gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJpbSgocHJlZml4SXNSZSA/ICdSZTogJyA6ICdGd2Q6ICcpICsgKHJlID8gJ1JlOiAnIDogJycpICsgKGZ3ZCA/ICdGd2Q6ICcgOiAnJykgKyB0cmltKHBhcnRzLmpvaW4oJzonKSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWNcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZE51bWJlcihudW0sIGRlYykge1xuXHRyZXR1cm4gd2luZG93Lk1hdGgucm91bmQobnVtICogd2luZG93Lk1hdGgucG93KDEwLCBkZWMpKSAvIHdpbmRvdy5NYXRoLnBvdygxMCwgZGVjKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhudW1iZXJ8c3RyaW5nKX0gc2l6ZUluQnl0ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmllbmRseVNpemUoc2l6ZUluQnl0ZXMpIHtcblx0c2l6ZUluQnl0ZXMgPSBwSW50KHNpemVJbkJ5dGVzKTtcblxuXHRzd2l0Y2ggKHRydWUpIHtcblx0XHRjYXNlIDEwNzM3NDE4MjQgPD0gc2l6ZUluQnl0ZXM6XG5cdFx0XHRyZXR1cm4gcm91bmROdW1iZXIoc2l6ZUluQnl0ZXMgLyAxMDczNzQxODI0LCAxKSArICdHQic7XG5cdFx0Y2FzZSAxMDQ4NTc2IDw9IHNpemVJbkJ5dGVzOlxuXHRcdFx0cmV0dXJuIHJvdW5kTnVtYmVyKHNpemVJbkJ5dGVzIC8gMTA0ODU3NiwgMSkgKyAnTUInO1xuXHRcdGNhc2UgMTAyNCA8PSBzaXplSW5CeXRlczpcblx0XHRcdHJldHVybiByb3VuZE51bWJlcihzaXplSW5CeXRlcyAvIDEwMjQsIDApICsgJ0tCJztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gc2l6ZUluQnl0ZXMgKyAnQic7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZyhkZXNjKSB7XG5cdGlmICh3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cpIHtcblx0XHR3aW5kb3cuY29uc29sZS5sb2coZGVzYyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gez99IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXNcbiAqIEBwYXJhbSB7bnVtYmVyPX0gZGVsYXkgPSAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxlZ2F0ZVJ1bihvYmplY3QsIG1ldGhvZE5hbWUsIHBhcmFtcywgZGVsYXkgPSAwKSB7XG5cdGlmIChvYmplY3QgJiYgb2JqZWN0W21ldGhvZE5hbWVdKSB7XG5cdFx0ZGVsYXkgPSBwSW50KGRlbGF5KTtcblx0XHRwYXJhbXMgPSBpc0FycmF5KHBhcmFtcykgPyBwYXJhbXMgOiBbXTtcblxuXHRcdGlmICgwID49IGRlbGF5KSB7XG5cdFx0XHRvYmplY3RbbWV0aG9kTmFtZV0oLi4ucGFyYW1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdG9iamVjdFttZXRob2ROYW1lXSguLi5wYXJhbXMpO1xuXHRcdFx0fSwgZGVsYXkpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7P30gZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbGxDdHJsQUN0cmxTKGV2ZW50KSB7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50O1xuXHRpZiAoZXZlbnQgJiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFsdEtleSkge1xuXHRcdGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG5cdFx0aWYgKGtleSA9PT0gRXZlbnRLZXlDb2RlLlMpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBlbHNlIGlmIChrZXkgPT09IEV2ZW50S2V5Q29kZS5BKSB7XG5cdFx0XHRjb25zdCBzZW5kZXIgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcblx0XHRcdGlmIChcblx0XHRcdFx0c2VuZGVyICYmXG5cdFx0XHRcdCgndHJ1ZScgPT09ICcnICsgc2VuZGVyLmNvbnRlbnRFZGl0YWJsZSB8fCAoc2VuZGVyLnRhZ05hbWUgJiYgc2VuZGVyLnRhZ05hbWUubWF0Y2goL0lOUFVUfFRFWFRBUkVBL2kpKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0XHRcdHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcblx0XHRcdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LnNlbGVjdGlvbiAmJiB3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmNsZWFyKSB7XG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24uY2xlYXIoKTtcblx0XHRcdH1cblxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyhPYmplY3R8bnVsbHx1bmRlZmluZWQpfSBjb250ZXh0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExlZ2FjeShjb250ZXh0LCBmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdGxldCBmUmVzdWx0ID0gbnVsbDtcblx0Y29uc3QgZk5vbkVtcHR5ID0gKC4uLmFyZ3MpID0+IHtcblx0XHRpZiAoZlJlc3VsdCAmJiBmUmVzdWx0LmNhbkV4ZWN1dGUgJiYgZlJlc3VsdC5jYW5FeGVjdXRlKCkpIHtcblx0XHRcdGZFeGVjdXRlLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0ZlJlc3VsdCA9IGZFeGVjdXRlID8gZk5vbkVtcHR5IDogbm9vcDtcblx0ZlJlc3VsdC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0ZlJlc3VsdC5pc0NvbW1hbmQgPSB0cnVlO1xuXG5cdGlmIChpc0Z1bmMoZkNhbkV4ZWN1dGUpKSB7XG5cdFx0ZlJlc3VsdC5jYW5FeGVjdXRlID0ga28uY29tcHV0ZWQoKCkgPT4gZlJlc3VsdCAmJiBmUmVzdWx0LmVuYWJsZWQoKSAmJiBmQ2FuRXhlY3V0ZS5jYWxsKGNvbnRleHQpKTtcblx0fSBlbHNlIHtcblx0XHRmUmVzdWx0LmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBmUmVzdWx0ICYmIGZSZXN1bHQuZW5hYmxlZCgpICYmICEhZkNhbkV4ZWN1dGUpO1xuXHR9XG5cblx0cmV0dXJuIGZSZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoZW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgY29udmVydFRoZW1lTmFtZSA9IF8ubWVtb2l6ZSgodGhlbWUpID0+IHtcblx0aWYgKCdAY3VzdG9tJyA9PT0gdGhlbWUuc3Vic3RyKC03KSkge1xuXHRcdHRoZW1lID0gdHJpbSh0aGVtZS5zdWJzdHJpbmcoMCwgdGhlbWUubGVuZ3RoIC0gNykpO1xuXHR9XG5cblx0cmV0dXJuIHRyaW0oXG5cdFx0dGhlbWVcblx0XHRcdC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICcgJylcblx0XHRcdC5yZXBsYWNlKC8oW0EtWl0pL2csICcgJDEnKVxuXHRcdFx0LnJlcGxhY2UoL1tcXHNdKy9nLCAnICcpXG5cdCk7XG59KTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RlTmFtZShuYW1lKSB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoL1tcIl0vZywgJ1xcXFxcIicpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWNyb3RpbWUoKSB7XG5cdHJldHVybiBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcblx0cmV0dXJuIHdpbmRvdy5NYXRoLnJvdW5kKG1pY3JvdGltZSgpIC8gMTAwMCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuICogQHBhcmFtIHtib29sZWFuPX0gaXNFbmcgPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSwgaXNFbmcgPSBmYWxzZSkge1xuXHRyZXR1cm4gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuKFxuXHRcdCdMQU5HU19OQU1FUycgKyAodHJ1ZSA9PT0gaXNFbmcgPyAnX0VOJyA6ICcnKSArICcvTEFOR18nICsgbGFuZ3VhZ2UudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICdfJyksXG5cdFx0bnVsbCxcblx0XHRsYW5ndWFnZVxuXHQpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmFnZ2FibGVQbGFjZSgpIHtcblx0cmV0dXJuICQoXG5cdFx0JzxkaXYgY2xhc3M9XCJkcmFnZ2FibGVQbGFjZVwiPicgK1xuXHRcdFx0JzxzcGFuIGNsYXNzPVwidGV4dFwiPjwvc3Bhbj4mbmJzcDsnICtcblx0XHRcdCc8aSBjbGFzcz1cImljb24tY29weSBpY29uLXdoaXRlIHZpc2libGUtb24tY3RybFwiPjwvaT4nICtcblx0XHRcdCc8aSBjbGFzcz1cImljb24tbWFpbCBpY29uLXdoaXRlIGhpZGRlbi1vbi1jdHJsXCI+PC9pPicgK1xuXHRcdFx0JzwvZGl2Pidcblx0KS5hcHBlbmRUbygnI3JsLWhpZGRlbicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkb21PcHRpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcihkb21JdGVtLCBpdGVtKSB7XG5cdGlmIChpdGVtICYmICFpc1VuZChpdGVtLmRpc2FibGVkKSAmJiBkb21JdGVtKSB7XG5cdFx0JChkb21JdGVtKVxuXHRcdFx0LnRvZ2dsZUNsYXNzKCdkaXNhYmxlZCcsIGl0ZW0uZGlzYWJsZWQpXG5cdFx0XHQucHJvcCgnZGlzYWJsZWQnLCBpdGVtLmRpc2FibGVkKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuICogQHBhcmFtIHtPYmplY3R9IGJvZHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIdG1sXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckJxU3dpdGNoZXIoYm9keSkge1xuXHRib2R5LmZpbmQoJ2Jsb2NrcXVvdGUucmwtYnEtc3dpdGNoZXInKS5yZW1vdmVDbGFzcygncmwtYnEtc3dpdGNoZXIgaGlkZGVuLWJxJyk7XG5cdGJvZHlcblx0XHQuZmluZCgnLnJsQmxvY2txdW90ZVN3aXRjaGVyJylcblx0XHQub2ZmKCcucmxCbG9ja3F1b3RlU3dpdGNoZXInKVxuXHRcdC5yZW1vdmUoKTtcblx0Ym9keS5maW5kKCdbZGF0YS1odG1sLWVkaXRvci1mb250LXdyYXBwZXJdJykucmVtb3ZlQXR0cignZGF0YS1odG1sLWVkaXRvci1mb250LXdyYXBwZXInKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbWVzc2FnZURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHRtbFxuICogQHBhcmFtIHtib29sZWFufSBwcmludFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2aWV3TWVzc2FnZShcblx0eyB0aXRsZSwgc3ViamVjdCwgZGF0ZSwgZnJvbUNyZWRzLCB0b0NyZWRzLCB0b0xhYmVsLCBjY0NsYXNzLCBjY0NyZWRzLCBjY0xhYmVsIH0sXG5cdGJvZHksXG5cdGlzSHRtbCxcblx0cHJpbnRcbikge1xuXHRjb25zdCB3aW4gPSB3aW5kb3cub3BlbignJyksXG5cdFx0ZG9jID0gd2luLmRvY3VtZW50LFxuXHRcdGJvZHlDbG9uZSA9IGJvZHkuY2xvbmUoKSxcblx0XHRib2R5Q2xhc3MgPSBpc0h0bWwgPyAnaHRtbCcgOiAncGxhaW4nO1xuXG5cdGNsZWFyQnFTd2l0Y2hlcihib2R5Q2xvbmUpO1xuXG5cdGNvbnN0IGh0bWwgPSBib2R5Q2xvbmUgPyBib2R5Q2xvbmUuaHRtbCgpIDogJyc7XG5cblx0ZG9jLndyaXRlKFxuXHRcdGRlTW9kdWxlKHJlcXVpcmUoJ0h0bWwvUHJldmlld01lc3NhZ2UuaHRtbCcpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7dGl0bGV9fScsIGVuY29kZUh0bWwodGl0bGUpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7c3ViamVjdH19JywgZW5jb2RlSHRtbChzdWJqZWN0KSlcblx0XHRcdC5yZXBsYWNlKCd7e2RhdGV9fScsIGVuY29kZUh0bWwoZGF0ZSkpXG5cdFx0XHQucmVwbGFjZSgne3tmcm9tQ3JlZHN9fScsIGVuY29kZUh0bWwoZnJvbUNyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e3RvQ3JlZHN9fScsIGVuY29kZUh0bWwodG9DcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3t0b0xhYmVsfX0nLCBlbmNvZGVIdG1sKHRvTGFiZWwpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Y2NDbGFzc319JywgZW5jb2RlSHRtbChjY0NsYXNzKSlcblx0XHRcdC5yZXBsYWNlKCd7e2NjQ3JlZHN9fScsIGVuY29kZUh0bWwoY2NDcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3tjY0xhYmVsfX0nLCBlbmNvZGVIdG1sKGNjTGFiZWwpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Ym9keUNsYXNzfX0nLCBib2R5Q2xhc3MpXG5cdFx0XHQucmVwbGFjZSgne3todG1sfX0nLCBodG1sKVxuXHQpO1xuXG5cdGRvYy5jbG9zZSgpO1xuXG5cdGlmIChwcmludCkge1xuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHdpbi5wcmludCgpLCAxMDApO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG4gKiBAcGFyYW0gez99IGtvVHJpZ2dlclxuICogQHBhcmFtIHs/fSBjb250ZXh0ID0gbnVsbFxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lciA9IDEwMDBcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uKGZDYWxsYmFjaywga29UcmlnZ2VyLCBjb250ZXh0ID0gbnVsbCwgdGltZXIgPSAxMDAwKSB7XG5cdHRpbWVyID0gcEludCh0aW1lcik7XG5cdHJldHVybiAodHlwZSwgZGF0YSwgY2FjaGVkLCByZXF1ZXN0QWN0aW9uLCByZXF1ZXN0UGFyYW1ldGVycykgPT4ge1xuXHRcdGtvVHJpZ2dlci5jYWxsKGNvbnRleHQsIGRhdGEgJiYgZGF0YS5SZXN1bHQgPyBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQgOiBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0KTtcblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2suY2FsbChjb250ZXh0LCB0eXBlLCBkYXRhLCBjYWNoZWQsIHJlcXVlc3RBY3Rpb24sIHJlcXVlc3RQYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRrb1RyaWdnZXIuY2FsbChjb250ZXh0LCBTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdH0sIHRpbWVyKTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0ga29UcmlnZ2VyXG4gKiBAcGFyYW0ge21peGVkfSBjb250ZXh0XG4gKiBAcmV0dXJucyB7bWl4ZWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbihrb1RyaWdnZXIsIGNvbnRleHQpIHtcblx0cmV0dXJuIHNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uKG51bGwsIGtvVHJpZ2dlciwgY29udGV4dCwgMTAwMCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlbW90ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNldHRpbmdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gZlRyaWdnZXJGdW5jdGlvblxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTYXZlSGVscGVyU3Vic2NyaWJlRnVuY3Rpb24ocmVtb3RlLCBzZXR0aW5nTmFtZSwgdHlwZSwgZlRyaWdnZXJGdW5jdGlvbikge1xuXHRyZXR1cm4gKHZhbHVlKSA9PiB7XG5cdFx0aWYgKHJlbW90ZSkge1xuXHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0XHRjYXNlICdib29sZWFuJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlID8gJzEnIDogJzAnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdpbnQnOlxuXHRcdFx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHBJbnQodmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0cmltJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHRyaW0odmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHZhbHVlID0gcFN0cmluZyh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGFbc2V0dGluZ05hbWVdID0gdmFsdWU7XG5cblx0XHRcdGlmIChyZW1vdGUuc2F2ZUFkbWluQ29uZmlnKSB7XG5cdFx0XHRcdHJlbW90ZS5zYXZlQWRtaW5Db25maWcoZlRyaWdnZXJGdW5jdGlvbiB8fCBudWxsLCBkYXRhKTtcblx0XHRcdH0gZWxzZSBpZiAocmVtb3RlLnNhdmVTZXR0aW5ncykge1xuXHRcdFx0XHRyZW1vdGUuc2F2ZVNldHRpbmdzKGZUcmlnZ2VyRnVuY3Rpb24gfHwgbnVsbCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVtYWlsQW5kTGlua3MoaHRtbCkge1xuXHRyZXR1cm4gQXV0b2xpbmtlclxuXHRcdD8gQXV0b2xpbmtlci5saW5rKGh0bWwsIHtcblx0XHRcdFx0bmV3V2luZG93OiB0cnVlLFxuXHRcdFx0XHRzdHJpcFByZWZpeDogZmFsc2UsXG5cdFx0XHRcdHVybHM6IHRydWUsXG5cdFx0XHRcdGVtYWlsOiB0cnVlLFxuXHRcdFx0XHRtZW50aW9uOiBmYWxzZSxcblx0XHRcdFx0cGhvbmU6IGZhbHNlLFxuXHRcdFx0XHRoYXNodGFnOiBmYWxzZSxcblx0XHRcdFx0cmVwbGFjZUZuOiBmdW5jdGlvbihtYXRjaCkge1xuXHRcdFx0XHRcdHJldHVybiAhKG1hdGNoICYmICd1cmwnID09PSBtYXRjaC5nZXRUeXBlKCkgJiYgbWF0Y2gubWF0Y2hlZFRleHQgJiYgMCAhPT0gbWF0Y2gubWF0Y2hlZFRleHQuaW5kZXhPZignaHR0cCcpKTtcblx0XHRcdFx0fVxuXHRcdCAgfSlcblx0XHQ6IGh0bWw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sVG9QbGFpbihodG1sKSB7XG5cdGxldCBwb3MgPSAwLFxuXHRcdGxpbWl0ID0gMCxcblx0XHRpUDEgPSAwLFxuXHRcdGlQMiA9IDAsXG5cdFx0aVAzID0gMCxcblx0XHR0ZXh0ID0gJyc7XG5cblx0Y29uc3QgY29udmVydEJsb2NrcXVvdGUgPSAoYmxvY2txdW90ZVRleHQpID0+IHtcblx0XHRibG9ja3F1b3RlVGV4dCA9ICc+ICcgKyB0cmltKGJsb2NrcXVvdGVUZXh0KS5yZXBsYWNlKC9cXG4vZ20sICdcXG4+ICcpO1xuXHRcdHJldHVybiBibG9ja3F1b3RlVGV4dC5yZXBsYWNlKC8oXnxcXG4pKFs+IF0rKS9nbSwgKC4uLmFyZ3MpID0+XG5cdFx0XHRhcmdzICYmIDIgPCBhcmdzLmxlbmd0aCA/IGFyZ3NbMV0gKyB0cmltKGFyZ3NbMl0ucmVwbGFjZSgvW1xcc10vZywgJycpKSArICcgJyA6ICcnXG5cdFx0KTtcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0RGl2cyA9ICguLi5hcmdzKSA9PiB7XG5cdFx0aWYgKGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoKSB7XG5cdFx0XHRsZXQgZGl2VGV4dCA9IHRyaW0oYXJnc1sxXSk7XG5cdFx0XHRpZiAoMCA8IGRpdlRleHQubGVuZ3RoKSB7XG5cdFx0XHRcdGRpdlRleHQgPSBkaXZUZXh0LnJlcGxhY2UoLzxkaXZbXj5dKj4oW1xcc1xcU1xcclxcbl0qKTxcXC9kaXY+L2dpbSwgY29udmVydERpdnMpO1xuXHRcdFx0XHRkaXZUZXh0ID0gJ1xcbicgKyB0cmltKGRpdlRleHQpICsgJ1xcbic7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXZUZXh0O1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0UHJlID0gKC4uLmFyZ3MpID0+XG5cdFx0XHRhcmdzICYmIDEgPCBhcmdzLmxlbmd0aFxuXHRcdFx0XHQ/IGFyZ3NbMV1cblx0XHRcdFx0XHRcdC50b1N0cmluZygpXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvW1xcbl0vZ20sICc8YnIgLz4nKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1tcXHJdL2dtLCAnJylcblx0XHRcdFx0OiAnJyxcblx0XHRmaXhBdHRpYnV0ZVZhbHVlID0gKC4uLmFyZ3MpID0+IChhcmdzICYmIDEgPCBhcmdzLmxlbmd0aCA/ICcnICsgYXJnc1sxXSArIF8uZXNjYXBlKGFyZ3NbMl0pIDogJycpLFxuXHRcdGNvbnZlcnRMaW5rcyA9ICguLi5hcmdzKSA9PiAoYXJncyAmJiAxIDwgYXJncy5sZW5ndGggPyB0cmltKGFyZ3NbMV0pIDogJycpO1xuXG5cdHRleHQgPSBodG1sXG5cdFx0LnJlcGxhY2UoLzxwW14+XSo+PFxcL3A+L2dpLCAnJylcblx0XHQucmVwbGFjZSgvPHByZVtePl0qPihbXFxzXFxTXFxyXFxuXFx0XSopPFxcL3ByZT4vZ2ltLCBjb252ZXJ0UHJlKVxuXHRcdC5yZXBsYWNlKC9bXFxzXSsvZ20sICcgJylcblx0XHQucmVwbGFjZSgvKCg/OmhyZWZ8ZGF0YSlcXHM/PVxccz8pKFwiW15cIl0rP1wifCdbXiddKz8nKS9naW0sIGZpeEF0dGlidXRlVmFsdWUpXG5cdFx0LnJlcGxhY2UoLzxicltePl0qPi9naW0sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvaFtcXGRdPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9wPi9naSwgJ1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLzx1bFtePl0qPi9naW0sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdWw+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPGxpW14+XSo+L2dpbSwgJyAqICcpXG5cdFx0LnJlcGxhY2UoLzxcXC9saT4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdGQ+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL3RyPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxocltePl0qPi9naW0sICdcXG5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXFxuXFxuJylcblx0XHQucmVwbGFjZSgvPGRpdltePl0qPihbXFxzXFxTXFxyXFxuXSopPFxcL2Rpdj4vZ2ltLCBjb252ZXJ0RGl2cylcblx0XHQucmVwbGFjZSgvPGJsb2NrcXVvdGVbXj5dKj4vZ2ltLCAnXFxuX19icV9fc3RhcnRfX1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9ibG9ja3F1b3RlPi9naW0sICdcXG5fX2JxX19lbmRfX1xcbicpXG5cdFx0LnJlcGxhY2UoLzxhIFtePl0qPihbXFxzXFxTXFxyXFxuXSo/KTxcXC9hPi9naW0sIGNvbnZlcnRMaW5rcylcblx0XHQucmVwbGFjZSgvPFxcL2Rpdj4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC8mbmJzcDsvZ2ksICcgJylcblx0XHQucmVwbGFjZSgvJnF1b3Q7L2dpLCAnXCInKVxuXHRcdC5yZXBsYWNlKC88W14+XSo+L2dtLCAnJyk7XG5cblx0dGV4dCA9ICRkaXYuaHRtbCh0ZXh0KS50ZXh0KCk7XG5cblx0dGV4dCA9IHRleHRcblx0XHQucmVwbGFjZSgvXFxuWyBcXHRdKy9nbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoL1tcXG5dezMsfS9nbSwgJ1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLyZndDsvZ2ksICc+Jylcblx0XHQucmVwbGFjZSgvJmx0Oy9naSwgJzwnKVxuXHRcdC5yZXBsYWNlKC8mYW1wOy9naSwgJyYnKTtcblxuXHR0ZXh0ID0gc3BsaXRQbGFpblRleHQodGV4dCk7XG5cblx0cG9zID0gMDtcblx0bGltaXQgPSA4MDA7XG5cblx0d2hpbGUgKDAgPCBsaW1pdCkge1xuXHRcdGxpbWl0IC09IDE7XG5cdFx0aVAxID0gdGV4dC5pbmRleE9mKCdfX2JxX19zdGFydF9fJywgcG9zKTtcblx0XHRpZiAoLTEgPCBpUDEpIHtcblx0XHRcdGlQMiA9IHRleHQuaW5kZXhPZignX19icV9fc3RhcnRfXycsIGlQMSArIDUpO1xuXHRcdFx0aVAzID0gdGV4dC5pbmRleE9mKCdfX2JxX19lbmRfXycsIGlQMSArIDUpO1xuXG5cdFx0XHRpZiAoKC0xID09PSBpUDIgfHwgaVAzIDwgaVAyKSAmJiBpUDEgPCBpUDMpIHtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGlQMSkgKyBjb252ZXJ0QmxvY2txdW90ZSh0ZXh0LnN1YnN0cmluZyhpUDEgKyAxMywgaVAzKSkgKyB0ZXh0LnN1YnN0cmluZyhpUDMgKyAxMSk7XG5cblx0XHRcdFx0cG9zID0gMDtcblx0XHRcdH0gZWxzZSBpZiAoLTEgPCBpUDIgJiYgaVAyIDwgaVAzKSB7XG5cdFx0XHRcdHBvcyA9IGlQMiAtIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwb3MgPSAwO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHR0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX2JxX19zdGFydF9fL2dtLCAnJykucmVwbGFjZSgvX19icV9fZW5kX18vZ20sICcnKTtcblxuXHRyZXR1cm4gdGV4dDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhaW5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluZEVtYWlsQW5kTGlua3NJblRleHQgPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYWluVG9IdG1sKHBsYWluLCBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA9IGZhbHNlKSB7XG5cdHBsYWluID0gcGxhaW4udG9TdHJpbmcoKS5yZXBsYWNlKC9cXHIvZywgJycpO1xuXHRwbGFpbiA9IHBsYWluLnJlcGxhY2UoL14+Wz4gXT4rL2dtLCAoW21hdGNoXSkgPT4gKG1hdGNoID8gbWF0Y2gucmVwbGFjZSgvWyBdKy9nLCAnJykgOiBtYXRjaCkpO1xuXG5cdGxldCBiSW4gPSBmYWxzZSxcblx0XHRiRG8gPSB0cnVlLFxuXHRcdGJTdGFydCA9IHRydWUsXG5cdFx0YU5leHRUZXh0ID0gW10sXG5cdFx0c0xpbmUgPSAnJyxcblx0XHRpSW5kZXggPSAwLFxuXHRcdGFUZXh0ID0gcGxhaW4uc3BsaXQoJ1xcbicpO1xuXG5cdGRvIHtcblx0XHRiRG8gPSBmYWxzZTtcblx0XHRhTmV4dFRleHQgPSBbXTtcblx0XHRmb3IgKGlJbmRleCA9IDA7IGlJbmRleCA8IGFUZXh0Lmxlbmd0aDsgaUluZGV4KyspIHtcblx0XHRcdHNMaW5lID0gYVRleHRbaUluZGV4XTtcblx0XHRcdGJTdGFydCA9ICc+JyA9PT0gc0xpbmUuc3Vic3RyKDAsIDEpO1xuXHRcdFx0aWYgKGJTdGFydCAmJiAhYkluKSB7XG5cdFx0XHRcdGJEbyA9IHRydWU7XG5cdFx0XHRcdGJJbiA9IHRydWU7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn5ibG9ja3F1b3Rlfn5+Jyk7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lLnN1YnN0cigxKSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFiU3RhcnQgJiYgYkluKSB7XG5cdFx0XHRcdGlmICgnJyAhPT0gc0xpbmUpIHtcblx0XHRcdFx0XHRiSW4gPSBmYWxzZTtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaCgnfn5+L2Jsb2NrcXVvdGV+fn4nKTtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGJTdGFydCAmJiBiSW4pIHtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUuc3Vic3RyKDEpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYkluKSB7XG5cdFx0XHRiSW4gPSBmYWxzZTtcblx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn4vYmxvY2txdW90ZX5+ficpO1xuXHRcdH1cblxuXHRcdGFUZXh0ID0gYU5leHRUZXh0O1xuXHR9IHdoaWxlIChiRG8pO1xuXG5cdHBsYWluID0gYVRleHQuam9pbignXFxuJyk7XG5cblx0cGxhaW4gPSBwbGFpblxuXHRcdC8vIC5yZXBsYWNlKC9+fn5cXC9ibG9ja3F1b3Rlfn5+XFxufn5+YmxvY2txdW90ZX5+fi9nLCAnXFxuJylcblx0XHQucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuXHRcdC5yZXBsYWNlKC8+L2csICcmZ3Q7Jylcblx0XHQucmVwbGFjZSgvPC9nLCAnJmx0OycpXG5cdFx0LnJlcGxhY2UoL35+fmJsb2NrcXVvdGV+fn5bXFxzXSovZywgJzxibG9ja3F1b3RlPicpXG5cdFx0LnJlcGxhY2UoL1tcXHNdKn5+flxcL2Jsb2NrcXVvdGV+fn4vZywgJzwvYmxvY2txdW90ZT4nKVxuXHRcdC5yZXBsYWNlKC9cXG4vZywgJzxiciAvPicpO1xuXG5cdHJldHVybiBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA/IGZpbmRFbWFpbEFuZExpbmtzKHBsYWluKSA6IHBsYWluO1xufVxuXG53aW5kb3dbJ3JhaW5sb29wX1V0aWxzX2h0bWxUb1BsYWluJ10gPSBodG1sVG9QbGFpbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbndpbmRvd1sncmFpbmxvb3BfVXRpbHNfcGxhaW5Ub0h0bWwnXSA9IHBsYWluVG9IdG1sOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IGFTeXN0ZW1cbiAqIEBwYXJhbSB7QXJyYXl9IGFMaXN0XG4gKiBAcGFyYW0ge0FycmF5PX0gYURpc2FibGVkXG4gKiBAcGFyYW0ge0FycmF5PX0gYUhlYWRlckxpbmVzXG4gKiBAcGFyYW0gez9udW1iZXI9fSBpVW5EZWVwXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZkRpc2FibGVDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGZWaXNpYmxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBmUmVuYW1lQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGJTeXN0ZW1cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGJCdWlsZFVudmlzaWJsZVxuICogQHJldHVybnMge0FycmF5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRhU3lzdGVtLFxuXHRhTGlzdCxcblx0YURpc2FibGVkLFxuXHRhSGVhZGVyTGluZXMsXG5cdGlVbkRlZXAsXG5cdGZEaXNhYmxlQ2FsbGJhY2ssXG5cdGZWaXNpYmxlQ2FsbGJhY2ssXG5cdGZSZW5hbWVDYWxsYmFjayxcblx0YlN5c3RlbSxcblx0YkJ1aWxkVW52aXNpYmxlXG4pIHtcblx0bGV0IC8qKlxuXHRcdCAqIEB0eXBlIHs/Rm9sZGVyTW9kZWx9XG5cdFx0ICovXG5cdFx0b0l0ZW0gPSBudWxsLFxuXHRcdGJTZXAgPSBmYWxzZSxcblx0XHRpSW5kZXggPSAwLFxuXHRcdGlMZW4gPSAwLFxuXHRcdGFSZXN1bHQgPSBbXTtcblxuXHRjb25zdCBzRGVlcFByZWZpeCA9ICdcXHUwMEEwXFx1MDBBMFxcdTAwQTAnO1xuXG5cdGJCdWlsZFVudmlzaWJsZSA9IGlzVW5kKGJCdWlsZFVudmlzaWJsZSkgPyBmYWxzZSA6ICEhYkJ1aWxkVW52aXNpYmxlO1xuXHRiU3lzdGVtID0gIWlzTm9ybWFsKGJTeXN0ZW0pID8gMCA8IGFTeXN0ZW0ubGVuZ3RoIDogYlN5c3RlbTtcblx0aVVuRGVlcCA9ICFpc05vcm1hbChpVW5EZWVwKSA/IDAgOiBpVW5EZWVwO1xuXHRmRGlzYWJsZUNhbGxiYWNrID0gaXNOb3JtYWwoZkRpc2FibGVDYWxsYmFjaykgPyBmRGlzYWJsZUNhbGxiYWNrIDogbnVsbDtcblx0ZlZpc2libGVDYWxsYmFjayA9IGlzTm9ybWFsKGZWaXNpYmxlQ2FsbGJhY2spID8gZlZpc2libGVDYWxsYmFjayA6IG51bGw7XG5cdGZSZW5hbWVDYWxsYmFjayA9IGlzTm9ybWFsKGZSZW5hbWVDYWxsYmFjaykgPyBmUmVuYW1lQ2FsbGJhY2sgOiBudWxsO1xuXG5cdGlmICghaXNBcnJheShhRGlzYWJsZWQpKSB7XG5cdFx0YURpc2FibGVkID0gW107XG5cdH1cblxuXHRpZiAoIWlzQXJyYXkoYUhlYWRlckxpbmVzKSkge1xuXHRcdGFIZWFkZXJMaW5lcyA9IFtdO1xuXHR9XG5cblx0Zm9yIChpSW5kZXggPSAwLCBpTGVuID0gYUhlYWRlckxpbmVzLmxlbmd0aDsgaUluZGV4IDwgaUxlbjsgaUluZGV4KyspIHtcblx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0aWQ6IGFIZWFkZXJMaW5lc1tpSW5kZXhdWzBdLFxuXHRcdFx0bmFtZTogYUhlYWRlckxpbmVzW2lJbmRleF1bMV0sXG5cdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0c2Vwb3JhdG9yOiBmYWxzZSxcblx0XHRcdGRpc2FibGVkOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cblx0YlNlcCA9IHRydWU7XG5cdGZvciAoaUluZGV4ID0gMCwgaUxlbiA9IGFTeXN0ZW0ubGVuZ3RoOyBpSW5kZXggPCBpTGVuOyBpSW5kZXgrKykge1xuXHRcdG9JdGVtID0gYVN5c3RlbVtpSW5kZXhdO1xuXHRcdGlmIChmVmlzaWJsZUNhbGxiYWNrID8gZlZpc2libGVDYWxsYmFjayhvSXRlbSkgOiB0cnVlKSB7XG5cdFx0XHRpZiAoYlNlcCAmJiAwIDwgYVJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRpZDogJy0tLScsXG5cdFx0XHRcdFx0bmFtZTogJy0tLScsXG5cdFx0XHRcdFx0c3lzdGVtOiBmYWxzZSxcblx0XHRcdFx0XHRzZXBvcmF0b3I6IHRydWUsXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGJTZXAgPSBmYWxzZTtcblx0XHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRcdGlkOiBvSXRlbS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0bmFtZTogZlJlbmFtZUNhbGxiYWNrID8gZlJlbmFtZUNhbGxiYWNrKG9JdGVtKSA6IG9JdGVtLm5hbWUoKSxcblx0XHRcdFx0c3lzdGVtOiB0cnVlLFxuXHRcdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0XHRkaXNhYmxlZDpcblx0XHRcdFx0XHQhb0l0ZW0uc2VsZWN0YWJsZSB8fFxuXHRcdFx0XHRcdC0xIDwgaW5BcnJheShvSXRlbS5mdWxsTmFtZVJhdywgYURpc2FibGVkKSB8fFxuXHRcdFx0XHRcdChmRGlzYWJsZUNhbGxiYWNrID8gZkRpc2FibGVDYWxsYmFjayhvSXRlbSkgOiBmYWxzZSlcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGJTZXAgPSB0cnVlO1xuXHRmb3IgKGlJbmRleCA9IDAsIGlMZW4gPSBhTGlzdC5sZW5ndGg7IGlJbmRleCA8IGlMZW47IGlJbmRleCsrKSB7XG5cdFx0b0l0ZW0gPSBhTGlzdFtpSW5kZXhdO1xuXHRcdC8vIGlmIChvSXRlbS5zdWJTY3JpYmVkKCkgfHwgIW9JdGVtLmV4aXN0ZW4gfHwgYkJ1aWxkVW52aXNpYmxlKVxuXHRcdGlmIChcblx0XHRcdChvSXRlbS5zdWJTY3JpYmVkKCkgfHwgIW9JdGVtLmV4aXN0ZW4gfHwgYkJ1aWxkVW52aXNpYmxlKSAmJlxuXHRcdFx0KG9JdGVtLnNlbGVjdGFibGUgfHwgb0l0ZW0uaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKSlcblx0XHQpIHtcblx0XHRcdGlmIChmVmlzaWJsZUNhbGxiYWNrID8gZlZpc2libGVDYWxsYmFjayhvSXRlbSkgOiB0cnVlKSB7XG5cdFx0XHRcdGlmIChGb2xkZXJUeXBlLlVzZXIgPT09IG9JdGVtLnR5cGUoKSB8fCAhYlN5c3RlbSB8fCBvSXRlbS5oYXNTdWJTY3JpYmVkU3ViZm9sZGVycygpKSB7XG5cdFx0XHRcdFx0aWYgKGJTZXAgJiYgMCA8IGFSZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRpZDogJy0tLScsXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICctLS0nLFxuXHRcdFx0XHRcdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRzZXBvcmF0b3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRiU2VwID0gZmFsc2U7XG5cdFx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRcdGlkOiBvSXRlbS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdG5hbWU6XG5cdFx0XHRcdFx0XHRcdG5ldyB3aW5kb3cuQXJyYXkob0l0ZW0uZGVlcCArIDEgLSBpVW5EZWVwKS5qb2luKHNEZWVwUHJlZml4KSArXG5cdFx0XHRcdFx0XHRcdChmUmVuYW1lQ2FsbGJhY2sgPyBmUmVuYW1lQ2FsbGJhY2sob0l0ZW0pIDogb0l0ZW0ubmFtZSgpKSxcblx0XHRcdFx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRcdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ6XG5cdFx0XHRcdFx0XHRcdCFvSXRlbS5zZWxlY3RhYmxlIHx8XG5cdFx0XHRcdFx0XHRcdC0xIDwgaW5BcnJheShvSXRlbS5mdWxsTmFtZVJhdywgYURpc2FibGVkKSB8fFxuXHRcdFx0XHRcdFx0XHQoZkRpc2FibGVDYWxsYmFjayA/IGZEaXNhYmxlQ2FsbGJhY2sob0l0ZW0pIDogZmFsc2UpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAob0l0ZW0uc3ViU2NyaWJlZCgpICYmIDAgPCBvSXRlbS5zdWJGb2xkZXJzKCkubGVuZ3RoKSB7XG5cdFx0XHRhUmVzdWx0ID0gYVJlc3VsdC5jb25jYXQoXG5cdFx0XHRcdGZvbGRlckxpc3RPcHRpb25zQnVpbGRlcihcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRvSXRlbS5zdWJGb2xkZXJzKCksXG5cdFx0XHRcdFx0YURpc2FibGVkLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdGlVbkRlZXAsXG5cdFx0XHRcdFx0ZkRpc2FibGVDYWxsYmFjayxcblx0XHRcdFx0XHRmVmlzaWJsZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGZSZW5hbWVDYWxsYmFjayxcblx0XHRcdFx0XHRiU3lzdGVtLFxuXHRcdFx0XHRcdGJCdWlsZFVudmlzaWJsZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhUmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdEVsZW1lbnQoZWxlbWVudCkge1xuXHRsZXQgc2VsID0gbnVsbCxcblx0XHRyYW5nZSA9IG51bGw7XG5cblx0aWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0cmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuXHRcdHNlbC5hZGRSYW5nZShyYW5nZSk7XG5cdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LnNlbGVjdGlvbikge1xuXHRcdHJhbmdlID0gd2luZG93LmRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG5cdFx0cmFuZ2UubW92ZVRvRWxlbWVudFRleHQoZWxlbWVudCk7XG5cdFx0cmFuZ2Uuc2VsZWN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSA9IF8uZGVib3VuY2UoKCkgPT4ge1xuXHRkcm9wZG93blZpc2liaWxpdHkoISFfLmZpbmQoR2xvYmFsc0RhdGEuYUJvb3RzdHJhcERyb3Bkb3ducywgKGl0ZW0pID0+IGl0ZW0uaGFzQ2xhc3MoJ29wZW4nKSkpO1xufSwgNTApO1xuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGRlbGF5ID0gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZShkZWxheSA9IGZhbHNlKSB7XG5cdGNvbnN0IGZGdW5jID0gKCkgPT4ge1xuXHRcdCQoJy5jaGVja0F1dG9jb21wbGV0ZScpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHR9O1xuXG5cdGlmIChkZWxheSkge1xuXHRcdF8uZGVsYXkoZkZ1bmMsIDEwMCk7XG5cdH0gZWxzZSB7XG5cdFx0ZkZ1bmMoKTtcblx0fVxufVxuXG5jb25zdCBjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGUgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlndXJhdGlvblxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ3VyYXRpb25Gcm9tU2NyaXB0VGFnKGNvbmZpZ3VyYXRpb24pIHtcblx0aWYgKCFjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0pIHtcblx0XHRjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0gPSAkKFxuXHRcdFx0J3NjcmlwdFt0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXVtkYXRhLWNvbmZpZ3VyYXRpb249XCInICsgY29uZmlndXJhdGlvbiArICdcIl0nXG5cdFx0KTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlW2NvbmZpZ3VyYXRpb25dLnRleHQoKSk7XG5cdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRyZXR1cm4ge307XG59XG5cbi8qKlxuICogQHBhcmFtIHttaXhlZH0gbVByb3BPclZhbHVlXG4gKiBAcGFyYW0ge21peGVkfSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZU9uZShwcm9wT3JWYWx1ZSwgdmFsdWUpIHtcblx0Y29uc3QgZGlzcG9zYWJsZSA9IHZhbHVlIHx8IHByb3BPclZhbHVlO1xuXHRpZiAoZGlzcG9zYWJsZSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgZGlzcG9zYWJsZS5kaXNwb3NlKSB7XG5cdFx0ZGlzcG9zYWJsZS5kaXNwb3NlKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlT2JqZWN0KG9iamVjdCkge1xuXHRpZiAob2JqZWN0KSB7XG5cdFx0aWYgKGlzQXJyYXkob2JqZWN0LmRpc3Bvc2FibGVzKSkge1xuXHRcdFx0Xy5lYWNoKG9iamVjdC5kaXNwb3NhYmxlcywgZGlzcG9zZU9uZSk7XG5cdFx0fVxuXG5cdFx0a28udXRpbHMub2JqZWN0Rm9yRWFjaChvYmplY3QsIGRpc3Bvc2VPbmUpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iamVjdE9yT2JqZWN0c1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxlZ2F0ZVJ1bk9uRGVzdHJveShvYmplY3RPck9iamVjdHMpIHtcblx0aWYgKG9iamVjdE9yT2JqZWN0cykge1xuXHRcdGlmIChpc0FycmF5KG9iamVjdE9yT2JqZWN0cykpIHtcblx0XHRcdF8uZWFjaChvYmplY3RPck9iamVjdHMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGl0ZW0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RPck9iamVjdHMgJiYgb2JqZWN0T3JPYmplY3RzLm9uRGVzdHJveSkge1xuXHRcdFx0b2JqZWN0T3JPYmplY3RzLm9uRGVzdHJveSgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSAkc3R5bGVUYWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBjc3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kU3R5bGVzKCRzdHlsZVRhZywgY3NzKSB7XG5cdGlmICgkc3R5bGVUYWcgJiYgJHN0eWxlVGFnWzBdKSB7XG5cdFx0aWYgKCRzdHlsZVRhZ1swXS5zdHlsZVNoZWV0ICYmICFpc1VuZCgkc3R5bGVUYWdbMF0uc3R5bGVTaGVldC5jc3NUZXh0KSkge1xuXHRcdFx0JHN0eWxlVGFnWzBdLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN0eWxlVGFnLnRleHQoY3NzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxubGV0IF9fdGhlbWVUaW1lciA9IDAsXG5cdF9fdGhlbWVBamF4ID0gbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb249fSB0aGVtZVRyaWdnZXIgPSBub29wXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVRoZW1lKHZhbHVlLCB0aGVtZVRyaWdnZXIgPSBub29wKSB7XG5cdGNvbnN0IHRoZW1lTGluayA9ICQoJyNhcHAtdGhlbWUtbGluaycpLFxuXHRcdGNsZWFyVGltZXIgPSAoKSA9PiB7XG5cdFx0XHRfX3RoZW1lVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKSwgMTAwMCk7XG5cdFx0XHRfX3RoZW1lQWpheCA9IG51bGw7XG5cdFx0fTtcblxuXHRsZXQgdGhlbWVTdHlsZSA9ICQoJyNhcHAtdGhlbWUtc3R5bGUnKSxcblx0XHR1cmwgPSB0aGVtZUxpbmsuYXR0cignaHJlZicpO1xuXG5cdGlmICghdXJsKSB7XG5cdFx0dXJsID0gdGhlbWVTdHlsZS5hdHRyKCdkYXRhLWhyZWYnKTtcblx0fVxuXG5cdGlmICh1cmwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKS5yZXBsYWNlKC9cXC8tXFwvW14vXStcXC8tXFwvLywgJy8tLycgKyB2YWx1ZSArICcvLS8nKTtcblx0XHR1cmwgPSB1cmwucmVwbGFjZSgvXFwvQ3NzXFwvW14vXStcXC9Vc2VyXFwvLywgJy9Dc3MvMC9Vc2VyLycpO1xuXHRcdHVybCA9IHVybC5yZXBsYWNlKC9cXC9IYXNoXFwvW14vXStcXC8vLCAnL0hhc2gvLS8nKTtcblxuXHRcdGlmICgnSnNvbi8nICE9PSB1cmwuc3Vic3RyaW5nKHVybC5sZW5ndGggLSA1LCB1cmwubGVuZ3RoKSkge1xuXHRcdFx0dXJsICs9ICdKc29uLyc7XG5cdFx0fVxuXG5cdFx0d2luZG93LmNsZWFyVGltZW91dChfX3RoZW1lVGltZXIpO1xuXG5cdFx0dGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuQW5pbWF0ZSk7XG5cblx0XHRpZiAoX190aGVtZUFqYXggJiYgX190aGVtZUFqYXguYWJvcnQpIHtcblx0XHRcdF9fdGhlbWVBamF4LmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0X190aGVtZUFqYXggPSAkLmFqYXgoe1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nXG5cdFx0fSlcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdGlmIChkYXRhICYmIGlzQXJyYXkoZGF0YSkgJiYgMiA9PT0gZGF0YS5sZW5ndGgpIHtcblx0XHRcdFx0XHRpZiAodGhlbWVMaW5rICYmIHRoZW1lTGlua1swXSAmJiAoIXRoZW1lU3R5bGUgfHwgIXRoZW1lU3R5bGVbMF0pKSB7XG5cdFx0XHRcdFx0XHR0aGVtZVN0eWxlID0gJCgnPHN0eWxlIGlkPVwiYXBwLXRoZW1lLXN0eWxlXCI+PC9zdHlsZT4nKTtcblx0XHRcdFx0XHRcdHRoZW1lTGluay5hZnRlcih0aGVtZVN0eWxlKTtcblx0XHRcdFx0XHRcdHRoZW1lTGluay5yZW1vdmUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodGhlbWVTdHlsZSAmJiB0aGVtZVN0eWxlWzBdKSB7XG5cdFx0XHRcdFx0XHRpZiAoYXBwZW5kU3R5bGVzKHRoZW1lU3R5bGUsIGRhdGFbMV0pKSB7XG5cdFx0XHRcdFx0XHRcdHRoZW1lU3R5bGUuYXR0cignZGF0YS1ocmVmJywgdXJsKS5hdHRyKCdkYXRhLXRoZW1lJywgZGF0YVswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQudGhlbihjbGVhclRpbWVyLCBjbGVhclRpbWVyKTtcblx0fVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkUGFnZW5hdG9ySGVscGVyKGtvQ3VycmVudFBhZ2UsIGtvUGFnZUNvdW50KSB7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSBrb0N1cnJlbnRQYWdlKCksXG5cdFx0XHRwYWdlQ291bnQgPSBrb1BhZ2VDb3VudCgpLFxuXHRcdFx0cmVzdWx0ID0gW10sXG5cdFx0XHRmQWRkID0gKGluZGV4LCBwdXNoID0gdHJ1ZSwgY3VzdG9tTmFtZSA9ICcnKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRcdFx0Y3VycmVudDogaW5kZXggPT09IGN1cnJlbnRQYWdlLFxuXHRcdFx0XHRcdG5hbWU6ICcnID09PSBjdXN0b21OYW1lID8gaW5kZXgudG9TdHJpbmcoKSA6IGN1c3RvbU5hbWUudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRjdXN0b206ICcnICE9PSBjdXN0b21OYW1lLFxuXHRcdFx0XHRcdHRpdGxlOiAnJyA9PT0gY3VzdG9tTmFtZSA/ICcnIDogaW5kZXgudG9TdHJpbmcoKSxcblx0XHRcdFx0XHR2YWx1ZTogaW5kZXgudG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChwdXNoKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goZGF0YSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzdWx0LnVuc2hpZnQoZGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRsZXQgcHJldiA9IDAsXG5cdFx0XHRuZXh0ID0gMCxcblx0XHRcdGxpbWl0ID0gMjtcblxuXHRcdGlmICgxIDwgcGFnZUNvdW50IHx8ICgwIDwgcGFnZUNvdW50ICYmIHBhZ2VDb3VudCA8IGN1cnJlbnRQYWdlKSkge1xuXHRcdFx0aWYgKHBhZ2VDb3VudCA8IGN1cnJlbnRQYWdlKSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50KTtcblx0XHRcdFx0cHJldiA9IHBhZ2VDb3VudDtcblx0XHRcdFx0bmV4dCA9IHBhZ2VDb3VudDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgzID49IGN1cnJlbnRQYWdlIHx8IHBhZ2VDb3VudCAtIDIgPD0gY3VycmVudFBhZ2UpIHtcblx0XHRcdFx0XHRsaW1pdCArPSAyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZkFkZChjdXJyZW50UGFnZSk7XG5cdFx0XHRcdHByZXYgPSBjdXJyZW50UGFnZTtcblx0XHRcdFx0bmV4dCA9IGN1cnJlbnRQYWdlO1xuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoMCA8IGxpbWl0KSB7XG5cdFx0XHRcdHByZXYgLT0gMTtcblx0XHRcdFx0bmV4dCArPSAxO1xuXG5cdFx0XHRcdGlmICgwIDwgcHJldikge1xuXHRcdFx0XHRcdGZBZGQocHJldiwgZmFsc2UpO1xuXHRcdFx0XHRcdGxpbWl0IC09IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocGFnZUNvdW50ID49IG5leHQpIHtcblx0XHRcdFx0XHRmQWRkKG5leHQsIHRydWUpO1xuXHRcdFx0XHRcdGxpbWl0IC09IDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoMCA+PSBwcmV2KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKDMgPT09IHByZXYpIHtcblx0XHRcdFx0ZkFkZCgyLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2UgaWYgKDMgPCBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoTWF0aC5yb3VuZCgocHJldiAtIDEpIC8gMiksIGZhbHNlLCAnLi4uJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYWdlQ291bnQgLSAyID09PSBuZXh0KSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50IC0gMSwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHBhZ2VDb3VudCAtIDIgPiBuZXh0KSB7XG5cdFx0XHRcdGZBZGQoTWF0aC5yb3VuZCgocGFnZUNvdW50ICsgbmV4dCkgLyAyKSwgdHJ1ZSwgJy4uLicpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmaXJzdCBhbmQgbGFzdFxuXHRcdFx0aWYgKDEgPCBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoMSwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocGFnZUNvdW50ID4gbmV4dCkge1xuXHRcdFx0XHRmQWRkKHBhZ2VDb3VudCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKSB7XG5cdGZpbGVOYW1lID0gdHJpbShmaWxlTmFtZSkudG9Mb3dlckNhc2UoKTtcblxuXHRjb25zdCByZXN1bHQgPSBmaWxlTmFtZS5zcGxpdCgnLicpLnBvcCgpO1xuXHRyZXR1cm4gcmVzdWx0ID09PSBmaWxlTmFtZSA/ICcnIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pbWVDb250ZW50VHlwZShmaWxlTmFtZSkge1xuXHRsZXQgZXh0ID0gJycsXG5cdFx0cmVzdWx0ID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cblx0ZmlsZU5hbWUgPSB0cmltKGZpbGVOYW1lKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGlmICgnd2lubWFpbC5kYXQnID09PSBmaWxlTmFtZSkge1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24vbXMtdG5lZic7XG5cdH1cblxuXHRleHQgPSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcblx0aWYgKGV4dCAmJiAwIDwgZXh0Lmxlbmd0aCAmJiAhaXNVbmQoTWltZVtleHRdKSkge1xuXHRcdHJlc3VsdCA9IE1pbWVbZXh0XTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJhbnNwYXJlbnQoY29sb3IpIHtcblx0cmV0dXJuICdyZ2JhKDAsIDAsIDAsIDApJyA9PT0gY29sb3IgfHwgJ3RyYW5zcGFyZW50JyA9PT0gY29sb3I7XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9ICRlbFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWxIZWlnaHQoJGVsKSB7XG5cdCRlbFxuXHRcdC5jbG9uZSgpXG5cdFx0LnNob3coKVxuXHRcdC5hcHBlbmRUbygkaGNvbnQpO1xuXHRjb25zdCByZXN1bHQgPSAkaGNvbnQuaGVpZ2h0KCk7XG5cdCRoY29udC5lbXB0eSgpO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVBbmRDcm9wKHVybCwgdmFsdWUsIGZDYWxsYmFjaykge1xuXHRjb25zdCBpbWcgPSBuZXcgd2luZG93LkltYWdlKCk7XG5cdGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRsZXQgZGlmZiA9IFswLCAwXTtcblxuXHRcdGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcblx0XHRcdGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5cdFx0Y2FudmFzLndpZHRoID0gdmFsdWU7XG5cdFx0Y2FudmFzLmhlaWdodCA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMud2lkdGggPiB0aGlzLmhlaWdodCkge1xuXHRcdFx0ZGlmZiA9IFt0aGlzLndpZHRoIC0gdGhpcy5oZWlnaHQsIDBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaWZmID0gWzAsIHRoaXMuaGVpZ2h0IC0gdGhpcy53aWR0aF07XG5cdFx0fVxuXG5cdFx0Y3R4LmZpbGxTdHlsZSA9ICcjZmZmJztcblx0XHRjdHguZmlsbFJlY3QoMCwgMCwgdmFsdWUsIHZhbHVlKTtcblx0XHRjdHguZHJhd0ltYWdlKHRoaXMsIGRpZmZbMF0gLyAyLCBkaWZmWzFdIC8gMiwgdGhpcy53aWR0aCAtIGRpZmZbMF0sIHRoaXMuaGVpZ2h0IC0gZGlmZlsxXSwgMCwgMCwgdmFsdWUsIHZhbHVlKTtcblxuXHRcdGZDYWxsYmFjayhjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJykpO1xuXHR9O1xuXG5cdGltZy5zcmMgPSB1cmw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1haWxUb1VybFxuICogQHBhcmFtIHtGdW5jdGlvbn0gUG9wdXBDb21wb3NlVmlld01vZGVsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haWxUb0hlbHBlcihtYWlsVG9VcmwsIFBvcHVwQ29tcG9zZVZpZXdNb2RlbCkge1xuXHRpZiAoXG5cdFx0bWFpbFRvVXJsICYmXG5cdFx0J21haWx0bzonID09PVxuXHRcdFx0bWFpbFRvVXJsXG5cdFx0XHRcdC50b1N0cmluZygpXG5cdFx0XHRcdC5zdWJzdHIoMCwgNylcblx0XHRcdFx0LnRvTG93ZXJDYXNlKClcblx0KSB7XG5cdFx0aWYgKCFQb3B1cENvbXBvc2VWaWV3TW9kZWwpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdG1haWxUb1VybCA9IG1haWxUb1VybC50b1N0cmluZygpLnN1YnN0cig3KTtcblxuXHRcdGxldCB0byA9IFtdLFxuXHRcdFx0Y2MgPSBudWxsLFxuXHRcdFx0YmNjID0gbnVsbCxcblx0XHRcdHBhcmFtcyA9IHt9O1xuXG5cdFx0Y29uc3QgZW1haWwgPSBtYWlsVG9VcmwucmVwbGFjZSgvXFw/LiskLywgJycpLFxuXHRcdFx0cXVlcnkgPSBtYWlsVG9VcmwucmVwbGFjZSgvXlteP10qXFw/LywgJycpLFxuXHRcdFx0RW1haWxNb2RlbCA9IHJlcXVpcmUoJ01vZGVsL0VtYWlsJykuZGVmYXVsdDtcblxuXHRcdHBhcmFtcyA9IHNpbXBsZVF1ZXJ5UGFyc2VyKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNVbmQocGFyYW1zLnRvKSkge1xuXHRcdFx0dG8gPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGRlY29kZVVSSUNvbXBvbmVudChlbWFpbCArICcsJyArIHBhcmFtcy50bykpO1xuXHRcdFx0dG8gPSBfLnZhbHVlcyhcblx0XHRcdFx0dG8ucmVkdWNlKChyZXN1bHQsIHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlLmVtYWlsXSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXJlc3VsdFt2YWx1ZS5lbWFpbF0ubmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdFt2YWx1ZS5lbWFpbF0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0W3ZhbHVlLmVtYWlsXSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LCB7fSlcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRvID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShlbWFpbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMuY2MpKSB7XG5cdFx0XHRjYyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5jYykpO1xuXHRcdH1cblxuXHRcdGlmICghaXNVbmQocGFyYW1zLmJjYykpIHtcblx0XHRcdGJjYyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5iY2MpKTtcblx0XHR9XG5cblx0XHRyZXF1aXJlKCdLbm9pbi9Lbm9pbicpLnNob3dTY3JlZW5Qb3B1cChQb3B1cENvbXBvc2VWaWV3TW9kZWwsIFtcblx0XHRcdENvbXBvc2VUeXBlLkVtcHR5LFxuXHRcdFx0bnVsbCxcblx0XHRcdHRvLFxuXHRcdFx0Y2MsXG5cdFx0XHRiY2MsXG5cdFx0XHRpc1VuZChwYXJhbXMuc3ViamVjdCkgPyBudWxsIDogcFN0cmluZyhkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLnN1YmplY3QpKSxcblx0XHRcdGlzVW5kKHBhcmFtcy5ib2R5KSA/IG51bGwgOiBwbGFpblRvSHRtbChwU3RyaW5nKGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMuYm9keSkpKVxuXHRcdF0pO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZG9tUmVhZHkoZm4pIHtcblx0JCgoKSA9PiBmbigpKTtcblx0Ly9cblx0Ly9cdGlmICgnbG9hZGluZycgIT09IHdpbmRvdy5kb2N1bWVudC5yZWFkeVN0YXRlKVxuXHQvL1x0e1xuXHQvL1x0XHRmbigpO1xuXHQvL1x0fVxuXHQvL1x0ZWxzZVxuXHQvL1x0e1xuXHQvL1x0XHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKTtcblx0Ly9cdH1cbn1cblxuZXhwb3J0IGNvbnN0IHdpbmRvd1Jlc2l6ZSA9IF8uZGVib3VuY2UoKHRpbWVvdXQpID0+IHtcblx0aWYgKGlzVW5kKHRpbWVvdXQpIHx8IGlzTnVsbCh0aW1lb3V0KSkge1xuXHRcdCR3aW4ucmVzaXplKCk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0JHdpbi5yZXNpemUoKTtcblx0XHR9LCB0aW1lb3V0KTtcblx0fVxufSwgNTApO1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2luZG93UmVzaXplQ2FsbGJhY2soKSB7XG5cdHdpbmRvd1Jlc2l6ZSgpO1xufVxuXG5sZXQgc3Vic3RyID0gd2luZG93LlN0cmluZy5zdWJzdHI7XG5pZiAoJ2InICE9PSAnYWInLnN1YnN0cigtMSkpIHtcblx0c3Vic3RyID0gKHN0ciwgc3RhcnQsIGxlbmd0aCkgPT4ge1xuXHRcdHN0YXJ0ID0gMCA+IHN0YXJ0ID8gc3RyLmxlbmd0aCArIHN0YXJ0IDogc3RhcnQ7XG5cdFx0cmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbmd0aCk7XG5cdH07XG5cblx0d2luZG93LlN0cmluZy5zdWJzdHIgPSBzdWJzdHI7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5fOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93OyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCB7IGlzVW5kLCBpc05vcm1hbCwgaXNBcnJheSwgaW5BcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmxldCBTRVRUSU5HUyA9IHdpbmRvdy5fX3JsYWhfZGF0YSgpIHx8IG51bGw7XG5TRVRUSU5HUyA9IGlzTm9ybWFsKFNFVFRJTkdTKSA/IFNFVFRJTkdTIDoge307XG5cbmxldCBBUFBfU0VUVElOR1MgPSBTRVRUSU5HUy5TeXN0ZW0gfHwgbnVsbDtcbkFQUF9TRVRUSU5HUyA9IGlzTm9ybWFsKEFQUF9TRVRUSU5HUykgPyBBUFBfU0VUVElOR1MgOiB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBpc1VuZChTRVRUSU5HU1tuYW1lXSkgPyBudWxsIDogU0VUVElOR1NbbmFtZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2V0KG5hbWUsIHZhbHVlKSB7XG5cdFNFVFRJTkdTW25hbWVdID0gdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwU2V0dGluZ3NHZXQobmFtZSkge1xuXHRyZXR1cm4gaXNVbmQoQVBQX1NFVFRJTkdTW25hbWVdKSA/IG51bGwgOiBBUFBfU0VUVElOR1NbbmFtZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwYShuYW1lKSB7XG5cdGNvbnN0IHZhbHVlcyA9IHNldHRpbmdzR2V0KCdDYXBhJyk7XG5cdHJldHVybiBpc0FycmF5KHZhbHVlcykgJiYgaXNOb3JtYWwobmFtZSkgJiYgLTEgPCBpbkFycmF5KG5hbWUsIHZhbHVlcyk7XG59XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuY29uc3QgJHdpbiA9ICQod2luZG93KTtcbiR3aW4uX19zaXplcyA9IFswLCAwXTtcblxuZXhwb3J0IHsgJHdpbiB9O1xuXG5leHBvcnQgY29uc3QgJGRvYyA9ICQod2luZG93LmRvY3VtZW50KTtcblxuZXhwb3J0IGNvbnN0ICRodG1sID0gJCgnaHRtbCcpO1xuXG5leHBvcnQgY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cbmV4cG9ydCBjb25zdCAkZGl2ID0gJCgnPGRpdj48L2Rpdj4nKTtcblxuZXhwb3J0IGNvbnN0ICRoY29udCA9ICQoJzxkaXY+PC9kaXY+Jyk7XG4kaGNvbnRcblx0LmF0dHIoJ2FyZWEnLCAnaGlkZGVuJylcblx0LmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAtNTAwMCB9KVxuXHQuYXBwZW5kVG8oJGJvZHkpO1xuXG5leHBvcnQgY29uc3Qgc3RhcnRNaWNyb3RpbWUgPSBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBjb21tdW5pdHkgPSBSTF9DT01NVU5JVFk7XG5cbi8qKlxuICogQHR5cGUgez99XG4gKi9cbmV4cG9ydCBjb25zdCBkcm9wZG93blZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCB1c2VLZXlib2FyZFNob3J0Y3V0cyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IHNVc2VyQWdlbnQgPVxuXHQoJ25hdmlnYXRvcicgaW4gd2luZG93ICYmICd1c2VyQWdlbnQnIGluIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkgfHwgJyc7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiSUUgPSAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignbXNpZScpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYkNocm9tZSA9IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJTYWZhcmkgPSAhYkNocm9tZSAmJiAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignc2FmYXJpJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiTW9iaWxlRGV2aWNlID1cblx0KC9hbmRyb2lkL2kpLnRlc3Qoc1VzZXJBZ2VudCkgfHxcblx0KC9pcGhvbmUvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwb2QvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwYWQvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2JsYWNrYmVycnkvaSkudGVzdChzVXNlckFnZW50KTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJEaXNhYmxlTmFub1Njcm9sbCA9IGJNb2JpbGVEZXZpY2U7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiQW5pbWF0aW9uU3VwcG9ydGVkID1cblx0IWJNb2JpbGVEZXZpY2UgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc3RyYW5zaXRpb25zJykgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc2FuaW1hdGlvbnMnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCA9ICEhd2luZG93LlhNTEh0dHBSZXF1ZXN0O1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYklzSHR0cHMgPVxuXHR3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmxvY2F0aW9uID8gJ2h0dHBzOicgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA6IGZhbHNlO1xuXG4vKipcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyA9IHtcblx0J3RpdGxlJzogZmFsc2UsXG5cdCdzdHlsZXNTZXQnOiBmYWxzZSxcblx0J2N1c3RvbUNvbmZpZyc6ICcnLFxuXHQnY29udGVudHNDc3MnOiAnJyxcblx0J3Rvb2xiYXJHcm91cHMnOiBbXG5cdFx0eyBuYW1lOiAnc3BlYycgfSxcblx0XHR7IG5hbWU6ICdzdHlsZXMnIH0sXG5cdFx0eyBuYW1lOiAnYmFzaWNzdHlsZXMnLCBncm91cHM6IFsnYmFzaWNzdHlsZXMnLCAnY2xlYW51cCcsICdiaWRpJ10gfSxcblx0XHR7IG5hbWU6ICdjb2xvcnMnIH0sXG5cdFx0Yk1vYmlsZURldmljZSA/IHt9IDogeyBuYW1lOiAncGFyYWdyYXBoJywgZ3JvdXBzOiBbJ2xpc3QnLCAnaW5kZW50JywgJ2Jsb2NrcycsICdhbGlnbiddIH0sXG5cdFx0eyBuYW1lOiAnbGlua3MnIH0sXG5cdFx0eyBuYW1lOiAnaW5zZXJ0JyB9LFxuXHRcdHsgbmFtZTogJ2RvY3VtZW50JywgZ3JvdXBzOiBbJ21vZGUnLCAnZG9jdW1lbnQnLCAnZG9jdG9vbHMnXSB9LFxuXHRcdHsgbmFtZTogJ290aGVycycgfVxuXHRdLFxuXG5cdCdyZW1vdmVQbHVnaW5zJzogJ2xpc3RzdHlsZScsXG5cdCdyZW1vdmVCdXR0b25zJzogJ0Zvcm1hdCxVbmRvLFJlZG8sQ3V0LENvcHksUGFzdGUsQW5jaG9yLFN0cmlrZSxTdWJzY3JpcHQsU3VwZXJzY3JpcHQsSW1hZ2UsU2VsZWN0QWxsLFNvdXJjZScsXG5cdCdyZW1vdmVEaWFsb2dUYWJzJzogJ2xpbms6YWR2YW5jZWQ7bGluazp0YXJnZXQ7aW1hZ2U6YWR2YW5jZWQ7aW1hZ2VzOmFkdmFuY2VkJyxcblxuXHQnZXh0cmFQbHVnaW5zJzogJ3BsYWluLHNpZ25hdHVyZScsXG5cblx0J2FsbG93ZWRDb250ZW50JzogdHJ1ZSxcblx0J2V4dHJhQWxsb3dlZENvbnRlbnQnOiB0cnVlLFxuXG5cdCdmaWxsRW1wdHlCbG9ja3MnOiBmYWxzZSxcblx0J2lnbm9yZUVtcHR5UGFyYWdyYXBoJzogdHJ1ZSxcblx0J2Rpc2FibGVOYXRpdmVTcGVsbENoZWNrZXInOiBmYWxzZSxcblxuXHQnY29sb3JCdXR0b25fZW5hYmxlQXV0b21hdGljJzogZmFsc2UsXG5cdCdjb2xvckJ1dHRvbl9lbmFibGVNb3JlJzogdHJ1ZSxcblxuXHQnZm9udF9kZWZhdWx0TGFiZWwnOiAnQXJpYWwnLFxuXHQnZm9udFNpemVfZGVmYXVsdExhYmVsJzogJzEzJyxcblx0J2ZvbnRTaXplX3NpemVzJzogJzEwLzEwcHg7MTIvMTJweDsxMy8xM3B4OzE0LzE0cHg7MTYvMTZweDsxOC8xOHB4OzIwLzIwcHg7MjQvMjRweDsyOC8yOHB4OzM2LzM2cHg7NDgvNDhweCdcbn07XG5cbi8qKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxFZGl0b3JMYW5nc01hcCA9IHtcblx0J2FyX3NhJzogJ2FyLXNhJyxcblx0J2JnX2JnJzogJ2JnJyxcblx0J2NzX0NaJzogJ2NzJyxcblx0J2RlX2RlJzogJ2RlJyxcblx0J2VsX2dyJzogJ2VsJyxcblx0J2VzX2VzJzogJ2VzJyxcblx0J2V0X2VlJzogJ2V0Jyxcblx0J2ZyX2ZyJzogJ2ZyJyxcblx0J2h1X2h1JzogJ2h1Jyxcblx0J2lzX2lzJzogJ2lzJyxcblx0J2l0X2l0JzogJ2l0Jyxcblx0J2phX2pwJzogJ2phJyxcblx0J2tvX2tyJzogJ2tvJyxcblx0J2x0X2x0JzogJ2x0Jyxcblx0J2x2X2x2JzogJ2x2Jyxcblx0J2ZhX2lyJzogJ2ZhJyxcblx0J25iX25vJzogJ25iJyxcblx0J25sX25sJzogJ25sJyxcblx0J3BsX3BsJzogJ3BsJyxcblx0J3B0X2JyJzogJ3B0LWJyJyxcblx0J3B0X3B0JzogJ3B0Jyxcblx0J3JvX3JvJzogJ3JvJyxcblx0J3J1X3J1JzogJ3J1Jyxcblx0J3NrX3NrJzogJ3NrJyxcblx0J3NsX3NpJzogJ3NsJyxcblx0J3N2X3NlJzogJ3N2Jyxcblx0J3RyX3RyJzogJ3RyJyxcblx0J3VrX3VhJzogJ3VrJyxcblx0J3poX2NuJzogJ3poLWNuJyxcblx0J3poX3R3JzogJ3poJ1xufTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xubGV0IGJBbGxvd1BkZlByZXZpZXcgPSAhYk1vYmlsZURldmljZTtcblxuaWYgKGJBbGxvd1BkZlByZXZpZXcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcykge1xuXHRiQWxsb3dQZGZQcmV2aWV3ID0gISFfLmZpbmQod2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXMsICh0eXBlKSA9PiB0eXBlICYmICdhcHBsaWNhdGlvbi9wZGYnID09PSB0eXBlLnR5cGUpO1xuXG5cdGlmICghYkFsbG93UGRmUHJldmlldykge1xuXHRcdGJBbGxvd1BkZlByZXZpZXcgPSAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzWydhcHBsaWNhdGlvbi9wZGYnXTtcblx0fVxufVxuXG5leHBvcnQgeyBiQWxsb3dQZGZQcmV2aWV3IH07XG5cbmV4cG9ydCBjb25zdCBWSUVXX01PREVMUyA9IHtcblx0c2V0dGluZ3M6IFtdLFxuXHQnc2V0dGluZ3MtcmVtb3ZlZCc6IFtdLFxuXHQnc2V0dGluZ3MtZGlzYWJsZWQnOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVBY3Rpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxEaXNhYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbFR5cGUgPSBrby5vYnNlcnZhYmxlKCcnKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxXaWR0aCA9IGtvLm9ic2VydmFibGUoMCk7XG5cbmxlZnRQYW5lbERpc2FibGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlICYmIG1vdmVBY3Rpb24oKSkge1xuXHRcdG1vdmVBY3Rpb24oZmFsc2UpO1xuXHR9XG59KTtcblxubW92ZUFjdGlvbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSAmJiBsZWZ0UGFuZWxEaXNhYmxlZCgpKSB7XG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQoZmFsc2UpO1xuXHR9XG59KTtcblxuLy8gcG9wdXBzXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5TmFtZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHBvcHVwVmlzaWJpbGl0eU5hbWVzKCkubGVuZ3RoKTtcblxucG9wdXBWaXNpYmlsaXR5LnN1YnNjcmliZSgoYlZhbHVlKSA9PiB7XG5cdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1tb2RhbCcsIGJWYWx1ZSk7XG59KTtcblxuLy8ga2V5c1xuZXhwb3J0IGNvbnN0IGtleVNjb3BlUmVhbCA9IGtvLm9ic2VydmFibGUoS2V5U3RhdGUuQWxsKTtcbmV4cG9ydCBjb25zdCBrZXlTY29wZUZha2UgPSBrby5vYnNlcnZhYmxlKEtleVN0YXRlLkFsbCk7XG5cbmV4cG9ydCBjb25zdCBrZXlTY29wZSA9IGtvLmNvbXB1dGVkKHtcblx0cmVhZDogKCkgPT4ga2V5U2NvcGVGYWtlKCksXG5cdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRpZiAoS2V5U3RhdGUuTWVudSAhPT0gdmFsdWUpIHtcblx0XHRcdGlmIChLZXlTdGF0ZS5Db21wb3NlID09PSB2YWx1ZSkge1xuXHRcdFx0XHQvLyBkaXNhYmxlS2V5RmlsdGVyXG5cdFx0XHRcdGtleS5maWx0ZXIgPSAoKSA9PiB1c2VLZXlib2FyZFNob3J0Y3V0cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVzdG9yZUtleUZpbHRlclxuXHRcdFx0XHRrZXkuZmlsdGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHVzZUtleWJvYXJkU2hvcnRjdXRzKCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdHRhZ05hbWUgPSBlbCA/IGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA6ICcnO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gIShcblx0XHRcdFx0XHRcdFx0J0lOUFVUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnU0VMRUNUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnVEVYVEFSRUEnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdChlbCAmJiAnRElWJyA9PT0gdGFnTmFtZSAmJiAoJ2VkaXRvckh0bWxBcmVhJyA9PT0gZWwuY2xhc3NOYW1lIHx8ICd0cnVlJyA9PT0gJycgKyBlbC5jb250ZW50RWRpdGFibGUpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGtleVNjb3BlRmFrZSh2YWx1ZSk7XG5cdFx0XHRpZiAoZHJvcGRvd25WaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0dmFsdWUgPSBLZXlTdGF0ZS5NZW51O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGtleVNjb3BlUmVhbCh2YWx1ZSk7XG5cdH1cbn0pO1xuXG5rZXlTY29wZVJlYWwuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHQvL1x0d2luZG93LmNvbnNvbGUubG9nKCdrZXlTY29wZT0nICsgc1ZhbHVlKTsgLy8gREVCVUdcblx0a2V5LnNldFNjb3BlKHZhbHVlKTtcbn0pO1xuXG5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUpIHtcblx0XHRrZXlTY29wZShLZXlTdGF0ZS5NZW51KTtcblx0fSBlbHNlIGlmIChLZXlTdGF0ZS5NZW51ID09PSBrZXkuZ2V0U2NvcGUoKSkge1xuXHRcdGtleVNjb3BlKGtleVNjb3BlRmFrZSgpKTtcblx0fVxufSk7XG5cbi8qKlxuICogQHR5cGUgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBkYXRhID0ge1xuXHRfX0FQUF9fOiBudWxsLFxuXHRpQWpheEVycm9yQ291bnQ6IDAsXG5cdGlUb2tlbkVycm9yQ291bnQ6IDAsXG5cdGFCb290c3RyYXBEcm9wZG93bnM6IFtdLFxuXHRpTWVzc2FnZUJvZHlDYWNoZUNvdW50OiAwLFxuXHRiVW5sb2FkOiBmYWxzZVxufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGhhc2hlciBmcm9tICdoYXNoZXInO1xuaW1wb3J0IGNyb3Nzcm9hZHMgZnJvbSAnY3Jvc3Nyb2Fkcyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBydW5Ib29rIH0gZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuaW1wb3J0IHsgJGh0bWwsIFZJRVdfTU9ERUxTLCBwb3B1cFZpc2liaWxpdHlOYW1lcyB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgaXNBcnJheSwgaXNVbmQsIHBTdHJpbmcsIGxvZywgaXNGdW5jLCBjcmVhdGVDb21tYW5kTGVnYWN5LCBkZWxlZ2F0ZVJ1biwgaXNOb25FbXB0eUFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxubGV0IGN1cnJlbnRTY3JlZW4gPSBudWxsLFxuXHRkZWZhdWx0U2NyZWVuTmFtZSA9ICcnO1xuXG5jb25zdCBTQ1JFRU5TID0ge307XG5cbmV4cG9ydCBjb25zdCBWaWV3VHlwZSA9IHtcblx0UG9wdXA6ICdQb3B1cHMnLFxuXHRMZWZ0OiAnTGVmdCcsXG5cdFJpZ2h0OiAnUmlnaHQnLFxuXHRDZW50ZXI6ICdDZW50ZXInXG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZUxvYWRpbmcoKSB7XG5cdCQoJyNybC1jb250ZW50JykuYWRkQ2xhc3MoJ3JsLWNvbnRlbnQtc2hvdycpO1xuXHQkKCcjcmwtbG9hZGluZycpXG5cdFx0LmhpZGUoKVxuXHRcdC5yZW1vdmUoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZChmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdHJldHVybiBjcmVhdGVDb21tYW5kTGVnYWN5KG51bGwsIGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcm91dGVcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzRGVmYXVsdCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlLCBpc0RlZmF1bHQgPSBmYWxzZSkge1xuXHRTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLl9fcmxTZXR0aW5nc0RhdGEgPSB7XG5cdFx0TGFiZWw6IGxhYmVsTmFtZSxcblx0XHRUZW1wbGF0ZTogdGVtcGxhdGUsXG5cdFx0Um91dGU6IHJvdXRlLFxuXHRcdElzRGVmYXVsdDogISFpc0RlZmF1bHRcblx0fTtcblxuXHRWSUVXX01PREVMUy5zZXR0aW5ncy5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLnB1c2goU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtZGlzYWJsZWQnXS5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPZmYoKSB7XG5cdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IGZhbHNlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPbigpIHtcblx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMgez9PYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JlZW4oc2NyZWVuTmFtZSkge1xuXHRyZXR1cm4gJycgIT09IHNjcmVlbk5hbWUgJiYgIWlzVW5kKFNDUkVFTlNbc2NyZWVuTmFtZV0pID8gU0NSRUVOU1tzY3JlZW5OYW1lXSA6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEByZXR1cm5zIHtGdW5jdGlvbnxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NyZWVuUG9wdXAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdGxldCByZXN1bHQgPSBudWxsO1xuXHRpZiAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzO1xuXHRcdGlmIChQb3B1Vmlld01vZGVsQ2xhc3MuZGVmYXVsdCkge1xuXHRcdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzLmRlZmF1bHQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvSGlkZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpO1xuXHRpZiAoTW9kYWxWaWV3ICYmIE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eShmYWxzZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9va05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge21peGVkPX0gcGFyYW1zID0gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdm1SdW5Ib29rKGhvb2tOYW1lLCBWaWV3TW9kZWxDbGFzcywgcGFyYW1zID0gbnVsbCkge1xuXHRfLmVhY2goVmlld01vZGVsQ2xhc3MuX19uYW1lcywgKG5hbWUpID0+IHtcblx0XHRydW5Ib29rKGhvb2tOYW1lLCBbbmFtZSwgVmlld01vZGVsQ2xhc3MuX192bSwgcGFyYW1zXSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge09iamVjdD19IHZtU2NyZWVuXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbikge1xuXHRpZiAoVmlld01vZGVsQ2xhc3MgJiYgIVZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCkge1xuXHRcdGxldCB2bURvbSA9IG51bGw7XG5cdFx0Y29uc3Qgdm0gPSBuZXcgVmlld01vZGVsQ2xhc3Modm1TY3JlZW4pLFxuXHRcdFx0cG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGUgfHwgJycsXG5cdFx0XHR2bVBsYWNlID0gcG9zaXRpb24gPyAkKCcjcmwtY29udGVudCAjcmwtJyArIHBvc2l0aW9uLnRvTG93ZXJDYXNlKCkpIDogbnVsbDtcblxuXHRcdFZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCA9IHRydWU7XG5cdFx0Vmlld01vZGVsQ2xhc3MuX192bSA9IHZtO1xuXG5cdFx0dm0ub25TaG93VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHZtLm9uSGlkZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHZtLnZpZXdNb2RlbE5hbWUgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWU7XG5cdFx0dm0udmlld01vZGVsTmFtZXMgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWVzO1xuXHRcdHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgPSBWaWV3TW9kZWxDbGFzcy5fX3RlbXBsYXRlSUQ7XG5cdFx0dm0udmlld01vZGVsUG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGU7XG5cblx0XHRpZiAodm1QbGFjZSAmJiAxID09PSB2bVBsYWNlLmxlbmd0aCkge1xuXHRcdFx0dm1Eb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdC5hZGRDbGFzcygncmwtdmlldy1tb2RlbCcpXG5cdFx0XHRcdC5hZGRDbGFzcygnUkwtJyArIHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQpXG5cdFx0XHRcdC5oaWRlKCk7XG5cdFx0XHR2bURvbS5hcHBlbmRUbyh2bVBsYWNlKTtcblxuXHRcdFx0dm0udmlld01vZGVsRG9tID0gdm1Eb207XG5cdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSA9IHZtRG9tO1xuXG5cdFx0XHRpZiAoVmlld1R5cGUuUG9wdXAgPT09IHBvc2l0aW9uKSB7XG5cdFx0XHRcdHZtLmNhbmNlbENvbW1hbmQgPSB2bS5jbG9zZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kKCgpID0+IHtcblx0XHRcdFx0XHRoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2bS5tb2RhbFZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dm0udmlld01vZGVsRG9tLnNob3coKTtcblx0XHRcdFx0XHRcdHZtLnN0b3JlQW5kU2V0S2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0cG9wdXBWaXNpYmlsaXR5TmFtZXMucHVzaCh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAzMDAwICsgcG9wdXBWaXNpYmlsaXR5TmFtZXMoKS5sZW5ndGggKyAxMCk7XG5cblx0XHRcdFx0XHRcdGlmICh2bS5vblNob3dUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdHZtLm9uU2hvd1RyaWdnZXIoIXZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25TaG93V2l0aERlbGF5JywgW10sIDUwMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0XHRpZiAodm0ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHR2bS5vbkhpZGVUcmlnZ2VyKCF2bS5vbkhpZGVUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2bS5yZXN0b3JlS2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLW9uLWhpZGUnLCBWaWV3TW9kZWxDbGFzcyk7XG5cblx0XHRcdFx0XHRcdHBvcHVwVmlzaWJpbGl0eU5hbWVzLnJlbW92ZSh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAyMDAwKTtcblxuXHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB2bS52aWV3TW9kZWxEb20uaGlkZSgpLCAzMDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1wcmUtYnVpbGQnLCBWaWV3TW9kZWxDbGFzcywgdm1Eb20pO1xuXG5cdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdHZtRG9tWzBdLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHJhbnNsYXRvckluaXQ6IHRydWUsXG5cdFx0XHRcdFx0dGVtcGxhdGU6ICgpID0+ICh7IG5hbWU6IHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgfSlcblx0XHRcdFx0fSxcblx0XHRcdFx0dm1cblx0XHRcdCk7XG5cblx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25CdWlsZCcsIFt2bURvbV0pO1xuXHRcdFx0aWYgKHZtICYmIFZpZXdUeXBlLlBvcHVwID09PSBwb3NpdGlvbikge1xuXHRcdFx0XHR2bS5yZWdpc3RlclBvcHVwS2V5RG93bigpO1xuXHRcdFx0fVxuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtcG9zdC1idWlsZCcsIFZpZXdNb2RlbENsYXNzLCB2bURvbSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZygnQ2Fubm90IGZpbmQgdmlldyBtb2RlbCBwb3NpdGlvbjogJyArIHBvc2l0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gVmlld01vZGVsQ2xhc3MgPyBWaWV3TW9kZWxDbGFzcy5fX3ZtIDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHBhcmFtIHtBcnJheT19IHBhcmFtc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3csIHBhcmFtcyA9IFtdKSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0aWYgKE1vZGFsVmlldykge1xuXHRcdGJ1aWxkVmlld01vZGVsKE1vZGFsVmlldyk7XG5cblx0XHRpZiAoTW9kYWxWaWV3Ll9fdm0gJiYgTW9kYWxWaWV3Ll9fZG9tKSB7XG5cdFx0XHRkZWxlZ2F0ZVJ1bihNb2RhbFZpZXcuX192bSwgJ29uQmVmb3JlU2hvdycsIHBhcmFtcyB8fCBbXSk7XG5cblx0XHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSh0cnVlKTtcblxuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvblNob3cnLCBwYXJhbXMgfHwgW10pO1xuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtb24tc2hvdycsIE1vZGFsVmlldywgcGFyYW1zIHx8IFtdKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJtVXBTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdykge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdyk7XG5cdGlmIChNb2RhbFZpZXcpIHtcblx0XHRidWlsZFZpZXdNb2RlbChNb2RhbFZpZXcpO1xuXG5cdFx0aWYgKE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvbldhcm1VcCcpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9wdXBWaXNpYmxlKFZpZXdNb2RlbENsYXNzVG9TaG93KSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0cmV0dXJuIE1vZGFsVmlldyAmJiBNb2RhbFZpZXcuX192bSA/IE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSgpIDogZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbk5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJQYXJ0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmVlbk9uUm91dGUoc2NyZWVuTmFtZSwgc3ViUGFydCkge1xuXHRsZXQgdm1TY3JlZW4gPSBudWxsLFxuXHRcdGlzU2FtZVNjcmVlbiA9IGZhbHNlLFxuXHRcdGNyb3NzID0gbnVsbDtcblxuXHRpZiAoJycgPT09IHBTdHJpbmcoc2NyZWVuTmFtZSkpIHtcblx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdH1cblxuXHRpZiAoJycgIT09IHNjcmVlbk5hbWUpIHtcblx0XHR2bVNjcmVlbiA9IHNjcmVlbihzY3JlZW5OYW1lKTtcblx0XHRpZiAoIXZtU2NyZWVuKSB7XG5cdFx0XHR2bVNjcmVlbiA9IHNjcmVlbihkZWZhdWx0U2NyZWVuTmFtZSk7XG5cdFx0XHRpZiAodm1TY3JlZW4pIHtcblx0XHRcdFx0c3ViUGFydCA9IHNjcmVlbk5hbWUgKyAnLycgKyBzdWJQYXJ0O1xuXHRcdFx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fc3RhcnRlZCkge1xuXHRcdFx0aXNTYW1lU2NyZWVuID0gY3VycmVudFNjcmVlbiAmJiB2bVNjcmVlbiA9PT0gY3VycmVudFNjcmVlbjtcblxuXHRcdFx0aWYgKCF2bVNjcmVlbi5fX2J1aWxkZWQpIHtcblx0XHRcdFx0dm1TY3JlZW4uX19idWlsZGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHZtU2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRfLmVhY2godm1TY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uQnVpbGQnKTtcblx0XHRcdH1cblxuXHRcdFx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0XHRcdC8vIGhpZGUgc2NyZWVuXG5cdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuICYmICFpc1NhbWVTY3JlZW4pIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihjdXJyZW50U2NyZWVuLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0Y3VycmVudFNjcmVlbi5vbkhpZGVUcmlnZ2VyKCFjdXJyZW50U2NyZWVuLm9uSGlkZVRyaWdnZXIoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRcdF8uZWFjaChjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSwgKFZpZXdNb2RlbENsYXNzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3VHlwZS5Qb3B1cCAhPT0gVmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxQb3NpdGlvblxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbS5oaWRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxWaXNpYmlsaXR5KGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25IaWRlV2l0aERlbGF5JywgW10sIDUwMCk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoVmlld01vZGVsQ2xhc3MuX192bS5vbkhpZGVUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uSGlkZVRyaWdnZXIoIVZpZXdNb2RlbENsYXNzLl9fdm0ub25IaWRlVHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdGN1cnJlbnRTY3JlZW4gPSB2bVNjcmVlbjtcblxuXHRcdFx0XHQvLyBzaG93IHNjcmVlblxuXHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbiAmJiAhaXNTYW1lU2NyZWVuKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuLm9uU2hvd1RyaWdnZXIpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRTY3JlZW4ub25TaG93VHJpZ2dlcighY3VycmVudFNjcmVlbi5vblNob3dUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1vbi1zaG93JywgW2N1cnJlbnRTY3JlZW4uc2NyZWVuTmFtZSgpLCBjdXJyZW50U2NyZWVuXSk7XG5cblx0XHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpKSkge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdUeXBlLlBvcHVwICE9PSBWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFBvc2l0aW9uXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkJlZm9yZVNob3cnKTtcblxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFZpc2liaWxpdHkodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25TaG93Jyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFZpZXdNb2RlbENsYXNzLl9fdm0ub25TaG93VHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS5vblNob3dUcmlnZ2VyKCFWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXHRcdFx0XHRcdFx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1vbi1zaG93JywgVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRjcm9zcyA9IHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fY3Jvc3MgPyB2bVNjcmVlbi5fX2Nyb3NzKCkgOiBudWxsO1xuXHRcdFx0XHRpZiAoY3Jvc3MpIHtcblx0XHRcdFx0XHRjcm9zcy5wYXJzZShzdWJQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gc2NyZWVuc0NsYXNzZXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTY3JlZW5zKHNjcmVlbnNDbGFzc2VzKSB7XG5cdF8uZWFjaChzY3JlZW5zQ2xhc3NlcywgKENTY3JlZW4pID0+IHtcblx0XHRpZiAoQ1NjcmVlbikge1xuXHRcdFx0Y29uc3Qgdm1TY3JlZW4gPSBuZXcgQ1NjcmVlbigpLFxuXHRcdFx0XHRzY3JlZW5OYW1lID0gdm1TY3JlZW4gPyB2bVNjcmVlbi5zY3JlZW5OYW1lKCkgOiAnJztcblxuXHRcdFx0aWYgKHZtU2NyZWVuICYmICcnICE9PSBzY3JlZW5OYW1lKSB7XG5cdFx0XHRcdGlmICgnJyA9PT0gZGVmYXVsdFNjcmVlbk5hbWUpIHtcblx0XHRcdFx0XHRkZWZhdWx0U2NyZWVuTmFtZSA9IHNjcmVlbk5hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRTQ1JFRU5TW3NjcmVlbk5hbWVdID0gdm1TY3JlZW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRfLmVhY2goU0NSRUVOUywgKHZtU2NyZWVuKSA9PiB7XG5cdFx0aWYgKHZtU2NyZWVuICYmICF2bVNjcmVlbi5fX3N0YXJ0ZWQgJiYgdm1TY3JlZW4uX19zdGFydCkge1xuXHRcdFx0dm1TY3JlZW4uX19zdGFydGVkID0gdHJ1ZTtcblx0XHRcdHZtU2NyZWVuLl9fc3RhcnQoKTtcblxuXHRcdFx0cnVuSG9vaygnc2NyZWVuLXByZS1zdGFydCcsIFt2bVNjcmVlbi5zY3JlZW5OYW1lKCksIHZtU2NyZWVuXSk7XG5cdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uU3RhcnQnKTtcblx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1wb3N0LXN0YXJ0JywgW3ZtU2NyZWVuLnNjcmVlbk5hbWUoKSwgdm1TY3JlZW5dKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGNyb3NzID0gY3Jvc3Nyb2Fkcy5jcmVhdGUoKTtcblx0Y3Jvc3MuYWRkUm91dGUoL14oW2EtekEtWjAtOS1dKilcXC8/KC4qKSQvLCBzY3JlZW5PblJvdXRlKTtcblxuXHRoYXNoZXIuaW5pdGlhbGl6ZWQuYWRkKGNyb3NzLnBhcnNlLCBjcm9zcyk7XG5cdGhhc2hlci5jaGFuZ2VkLmFkZChjcm9zcy5wYXJzZSwgY3Jvc3MpO1xuXHRoYXNoZXIuaW5pdCgpO1xuXG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXN0YXJ0ZWQtdHJpZ2dlcicpLmFkZENsYXNzKCdybC1zdGFydGVkJyksIDEwMCk7XG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwuYWRkQ2xhc3MoJ3JsLXN0YXJ0ZWQtZGVsYXknKSwgMjAwKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc0hhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHNpbGVuY2UgPSBmYWxzZVxuICogQHBhcmFtIHtib29sZWFuPX0gcmVwbGFjZSA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEhhc2goaGFzaCwgc2lsZW5jZSA9IGZhbHNlLCByZXBsYWNlID0gZmFsc2UpIHtcblx0aGFzaCA9ICcjJyA9PT0gaGFzaC5zdWJzdHIoMCwgMSkgPyBoYXNoLnN1YnN0cigxKSA6IGhhc2g7XG5cdGhhc2ggPSAnLycgPT09IGhhc2guc3Vic3RyKDAsIDEpID8gaGFzaC5zdWJzdHIoMSkgOiBoYXNoO1xuXG5cdGNvbnN0IGNtZCA9IHJlcGxhY2UgPyAncmVwbGFjZUhhc2gnIDogJ3NldEhhc2gnO1xuXG5cdGlmIChzaWxlbmNlKSB7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gZmFsc2U7XG5cdFx0aGFzaGVyW2NtZF0oaGFzaCk7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSB0cnVlO1xuXHRcdGhhc2hlcltjbWRdKGhhc2gpO1xuXHRcdGhhc2hlci5zZXRIYXNoKGhhc2gpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB2aWV3RGVjb3JhdG9yKHsgbmFtZSwgdHlwZSwgdGVtcGxhdGVJRCB9KSB7XG5cdHJldHVybiAodGFyZ2V0KSA9PiB7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0aWYgKGlzQXJyYXkobmFtZSkpIHtcblx0XHRcdFx0XHR0YXJnZXQuX19uYW1lcyA9IG5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0Ll9fbmFtZXMgPSBbbmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXQuX19uYW1lID0gdGFyZ2V0Ll9fbmFtZXNbMF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlKSB7XG5cdFx0XHRcdHRhcmdldC5fX3R5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGVtcGxhdGVJRCkge1xuXHRcdFx0XHR0YXJnZXQuX190ZW1wbGF0ZUlEID0gdGVtcGxhdGVJRDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBwb3B1cERlY29yYXRvcih7IG5hbWUsIHRlbXBsYXRlSUQgfSkge1xuXHRyZXR1cm4gdmlld0RlY29yYXRvcih7IG5hbWUsIHR5cGU6IFZpZXdUeXBlLlBvcHVwLCB0ZW1wbGF0ZUlEIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbkV4ZWN1dGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY29tbWFuZERlY29yYXRvcihjYW5FeGVjdXRlID0gdHJ1ZSkge1xuXHRyZXR1cm4gKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSA9PiB7XG5cdFx0aWYgKCFrZXkgfHwgIWtleS5tYXRjaCgvQ29tbWFuZCQvKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBuYW1lIFwiJHtrZXl9XCIgc2hvdWxkIGVuZCB3aXRoIENvbW1hbmQgc3VmZml4YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWUgPSBkZXNjcmlwdG9yLnZhbHVlIHx8IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXIoKSxcblx0XHRcdG5vcm1DYW5FeGVjdXRlID0gaXNGdW5jKGNhbkV4ZWN1dGUpID8gY2FuRXhlY3V0ZSA6ICgpID0+ICEhY2FuRXhlY3V0ZTtcblxuXHRcdGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdFx0XHRpZiAobm9ybUNhbkV4ZWN1dGUuY2FsbCh0aGlzLCB0aGlzKSkge1xuXHRcdFx0XHR2YWx1ZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRkZXNjcmlwdG9yLnZhbHVlLl9fcmVhbENhbkV4ZWN1dGUgPSBub3JtQ2FuRXhlY3V0ZTtcblx0XHRkZXNjcmlwdG9yLnZhbHVlLmlzQ29tbWFuZCA9IHRydWU7XG5cblx0XHRyZXR1cm4gZGVzY3JpcHRvcjtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge21pY2VkfSAkaXRlbXNcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJGl0ZW1zKSB7XG5cdHJldHVybiBfLnRocm90dGxlKChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdGNvbnN0IHVwID0gaGFuZGxlciAmJiAndXAnID09PSBoYW5kbGVyLnNob3J0Y3V0O1xuXG5cdFx0aWYgKGV2ZW50ICYmICRpdGVtcy5sZW5ndGgpIHtcblx0XHRcdGxldCBpbmRleCA9ICRpdGVtcy5pbmRleCgkaXRlbXMuZmlsdGVyKCcuc2VsZWN0ZWQnKSk7XG5cdFx0XHRpZiAodXAgJiYgMCA8IGluZGV4KSB7XG5cdFx0XHRcdGluZGV4IC09IDE7XG5cdFx0XHR9IGVsc2UgaWYgKCF1cCAmJiBpbmRleCA8ICRpdGVtcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdGluZGV4ICs9IDE7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJlc3VsdEhhc2ggPSAkaXRlbXMuZXEoaW5kZXgpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdGlmIChyZXN1bHRIYXNoKSB7XG5cdFx0XHRcdHNldEhhc2gocmVzdWx0SGFzaCwgZmFsc2UsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG59XG5cbmV4cG9ydCB7XG5cdGNvbW1hbmREZWNvcmF0b3IsXG5cdGNvbW1hbmREZWNvcmF0b3IgYXMgY29tbWFuZCxcblx0dmlld0RlY29yYXRvcixcblx0dmlld0RlY29yYXRvciBhcyB2aWV3LFxuXHR2aWV3RGVjb3JhdG9yIGFzIHZpZXdNb2RlbCxcblx0cG9wdXBEZWNvcmF0b3IsXG5cdHBvcHVwRGVjb3JhdG9yIGFzIHBvcHVwLFxuXHRzZXR0aW5nc01lbnVLZXlzSGFuZGxlclxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmpRdWVyeTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiwgVXBsb2FkRXJyb3JDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIGlzVW5kLCBpc051bGwsIGhhcywgbWljcm90aW1lLCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7ICRodG1sLCBiQW5pbWF0aW9uU3VwcG9ydGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgcmVsb2FkIGFzIG1vbWVudG9yUmVsb2FkIH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcbmltcG9ydCB7IGxhbmdMaW5rIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxubGV0IEkxOE5fREFUQSA9IHdpbmRvdy5yYWlubG9vcEkxOE4gfHwge307XG5cbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEEgPSB7fTtcbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX01BUCA9IFtcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5BdXRoRXJyb3IsICdOT1RJRklDQVRJT05TL0FVVEhfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5BY2Nlc3NFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDRVNTX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLCAnTk9USUZJQ0FUSU9OUy9DT05ORUNUSU9OX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FwdGNoYUVycm9yLCAnTk9USUZJQ0FUSU9OUy9DQVBUQ0hBX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9GQUNFQk9PS19MT0dJTl9BQ0NFU1NfRElTQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLlNvY2lhbFR3aXR0ZXJMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9UV0lUVEVSX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlLCAnTk9USUZJQ0FUSU9OUy9TT0NJQUxfR09PR0xFX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCwgJ05PVElGSUNBVElPTlMvRE9NQUlOX05PVF9BTExPV0VEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfTk9UX0FMTE9XRUQnXSxcblxuXHRbTm90aWZpY2F0aW9uLkFjY291bnRUd29GYWN0b3JBdXRoUmVxdWlyZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfVFdPX0ZBQ1RPUl9BVVRIX1JFUVVJUkVEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9UV09fRkFDVE9SX0FVVEhfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkLCAnTk9USUZJQ0FUSU9OUy9DT1VMRF9OT1RfU0FWRV9ORVdfUEFTU1dPUkQnXSxcblx0W05vdGlmaWNhdGlvbi5DdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QsICdOT1RJRklDQVRJT05TL0NVUlJFTlRfUEFTU1dPUkRfSU5DT1JSRUNUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRTaG9ydCwgJ05PVElGSUNBVElPTlMvTkVXX1BBU1NXT1JEX1NIT1JUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRXZWFrLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfV0VBSyddLFxuXHRbTm90aWZpY2F0aW9uLk5ld1Bhc3N3b3JkRm9yYmlkZGVuLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfRk9SQklEREVOVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ29udGFjdHNTeW5jRXJyb3IsICdOT1RJRklDQVRJT05TL0NPTlRBQ1RTX1NZTkNfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRHZXRNZXNzYWdlTGlzdCwgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfTUVTU0FHRV9MSVNUJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudEdldE1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfR0VUX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRNb3ZlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9NT1ZFX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50Q29weU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfTU9WRV9NRVNTQUdFJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfU0FWRV9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNlbmRNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NFTkRfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRSZWNpcGllbnRzLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1JFQ0lQSUVOVFMnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlRmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX0ZJTFRFUlMnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50R2V0RmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfRklMVEVSUyddLFxuXHRbTm90aWZpY2F0aW9uLkZpbHRlcnNBcmVOb3RDb3JyZWN0LCAnTk9USUZJQ0FUSU9OUy9GSUxURVJTX0FSRV9OT1RfQ09SUkVDVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudENyZWF0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9DUkVBVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFJlbmFtZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9SRU5BTUVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZU5vbkVtcHR5Rm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9OT05fRU1QVFlfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFN1YnNjcmliZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9TVUJTQ1JJQkVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFVuc3Vic2NyaWJlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1VOU1VCU0NSSUJFX0ZPTERFUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVTZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1NFVFRJTkdTJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVQbHVnaW5TZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1BMVUdJTl9TRVRUSU5HUyddLFxuXG5cdFtOb3RpZmljYXRpb24uRG9tYWluQWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvRE9NQUlOX0FMUkVBRFlfRVhJU1RTJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50SW5zdGFsbFBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfSU5TVEFMTF9QQUNLQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZVBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX1BBQ0tBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9QTFVHSU5fUEFDS0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvVU5TVVBQT1JURURfUExVR0lOX1BBQ0tBR0UnXSxcblxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUsICdOT1RJRklDQVRJT05TL0xJQ0VOU0lOR19TRVJWRVJfSVNfVU5BVkFJTEFCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5MaWNlbnNpbmdFeHBpcmVkLCAnTk9USUZJQ0FUSU9OUy9MSUNFTlNJTkdfRVhQSVJFRCddLFxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ0Jhbm5lZCwgJ05PVElGSUNBVElPTlMvTElDRU5TSU5HX0JBTk5FRCddLFxuXG5cdFtOb3RpZmljYXRpb24uRGVtb1NlbmRNZXNzYWdlRXJyb3IsICdOT1RJRklDQVRJT05TL0RFTU9fU0VORF9NRVNTQUdFX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uRGVtb0FjY291bnRFcnJvciwgJ05PVElGSUNBVElPTlMvREVNT19BQ0NPVU5UX0VSUk9SJ10sXG5cblx0W05vdGlmaWNhdGlvbi5BY2NvdW50QWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9BTFJFQURZX0VYSVNUUyddLFxuXHRbTm90aWZpY2F0aW9uLkFjY291bnREb2VzTm90RXhpc3QsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfRE9FU19OT1RfRVhJU1QnXSxcblxuXHRbTm90aWZpY2F0aW9uLk1haWxTZXJ2ZXJFcnJvciwgJ05PVElGSUNBVElPTlMvTUFJTF9TRVJWRVJfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkSW5wdXRBcmd1bWVudCwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9JTlBVVF9BUkdVTUVOVCddLFxuXHRbTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24sICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IsICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXVxuXTtcblxuZXhwb3J0IGNvbnN0IHRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge09iamVjdD19IHZhbHVlTGlzdFxuICogQHBhcmFtIHtzdHJpbmc9fSBkZWZhdWxWYWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGkxOG4oa2V5LCB2YWx1ZUxpc3QsIGRlZmF1bFZhbHVlKSB7XG5cdGxldCB2YWx1ZU5hbWUgPSAnJyxcblx0XHRyZXN1bHQgPSBJMThOX0RBVEFba2V5XTtcblxuXHRpZiAoaXNVbmQocmVzdWx0KSkge1xuXHRcdHJlc3VsdCA9IGlzVW5kKGRlZmF1bFZhbHVlKSA/IGtleSA6IGRlZmF1bFZhbHVlO1xuXHR9XG5cblx0aWYgKCFpc1VuZCh2YWx1ZUxpc3QpICYmICFpc051bGwodmFsdWVMaXN0KSkge1xuXHRcdGZvciAodmFsdWVOYW1lIGluIHZhbHVlTGlzdCkge1xuXHRcdFx0aWYgKGhhcyh2YWx1ZUxpc3QsIHZhbHVlTmFtZSkpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoJyUnICsgdmFsdWVOYW1lICsgJyUnLCB2YWx1ZUxpc3RbdmFsdWVOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgaTE4blRvTm9kZSA9IChlbGVtZW50KSA9PiB7XG5cdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ2kxOG4nKTtcblxuXHRpZiAoa2V5KSB7XG5cdFx0aWYgKCdbJyA9PT0ga2V5LnN1YnN0cigwLCAxKSkge1xuXHRcdFx0c3dpdGNoIChrZXkuc3Vic3RyKDAsIDYpKSB7XG5cdFx0XHRcdGNhc2UgJ1todG1sXSc6XG5cdFx0XHRcdFx0JGVsLmh0bWwoaTE4bihrZXkuc3Vic3RyKDYpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1twbGFjZSc6XG5cdFx0XHRcdFx0JGVsLmF0dHIoJ3BsYWNlaG9sZGVyJywgaTE4bihrZXkuc3Vic3RyKDEzKSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdbdGl0bGUnOlxuXHRcdFx0XHRcdCRlbC5hdHRyKCd0aXRsZScsIGkxOG4oa2V5LnN1YnN0cig3KSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC50ZXh0KGkxOG4oa2V5KSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50c1xuICogQHBhcmFtIHtib29sZWFuPX0gYW5pbWF0ZSA9IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpMThuVG9Ob2RlcyhlbGVtZW50cywgYW5pbWF0ZSA9IGZhbHNlKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJ1tkYXRhLWkxOG5dJywgZWxlbWVudHMpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRpMThuVG9Ob2RlKGl0ZW0pO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFuaW1hdGUgJiYgYkFuaW1hdGlvblN1cHBvcnRlZCkge1xuXHRcdFx0JCgnLmkxOG4tYW5pbWF0aW9uW2RhdGEtaTE4bl0nLCBlbGVtZW50cykubGV0dGVyZngoe1xuXHRcdFx0XHQnZngnOiAnZmFsbCBmYWRlJyxcblx0XHRcdFx0J2JhY2t3YXJkcyc6IGZhbHNlLFxuXHRcdFx0XHQndGltaW5nJzogNTAsXG5cdFx0XHRcdCdmeF9kdXJhdGlvbic6ICc1MG1zJyxcblx0XHRcdFx0J2xldHRlcl9lbmQnOiAncmVzdG9yZScsXG5cdFx0XHRcdCdlbGVtZW50X2VuZCc6ICdyZXN0b3JlJ1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuY29uc3QgcmVsb2FkRGF0YSA9ICgpID0+IHtcblx0aWYgKHdpbmRvdy5yYWlubG9vcEkxOE4pIHtcblx0XHRJMThOX0RBVEEgPSB3aW5kb3cucmFpbmxvb3BJMThOIHx8IHt9O1xuXG5cdFx0aTE4blRvTm9kZXMod2luZG93LmRvY3VtZW50LCB0cnVlKTtcblxuXHRcdG1vbWVudG9yUmVsb2FkKCk7XG5cdFx0dHJpZ2dlcighdHJpZ2dlcigpKTtcblx0fVxuXG5cdHdpbmRvdy5yYWlubG9vcEkxOE4gPSBudWxsO1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXROb3RpZmljYXRpb25MYW5ndWFnZSgpIHtcblx0STE4Tl9OT1RJRklDQVRJT05fTUFQLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRJMThOX05PVElGSUNBVElPTl9EQVRBW2l0ZW1bMF1dID0gaTE4bihpdGVtWzFdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RhcnRDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGxhbmdDYWxsYmFjayA9IG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlKHN0YXJ0Q2FsbGJhY2ssIGxhbmdDYWxsYmFjayA9IG51bGwpIHtcblx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRzdGFydENhbGxiYWNrKCk7XG5cdH1cblxuXHRpZiAobGFuZ0NhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRcdFx0c3RhcnRDYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxhbmdDYWxsYmFjaykge1xuXHRcdFx0XHRsYW5nQ2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChzdGFydENhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoc3RhcnRDYWxsYmFjayk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHBhcmFtIHsqPX0gbWVzc2FnZSA9ICcnXG4gKiBAcGFyYW0geyo9fSBkZWZDb2RlID0gbnVsbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbihjb2RlLCBtZXNzYWdlID0gJycsIGRlZkNvZGUgPSBudWxsKSB7XG5cdGNvZGUgPSB3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDA7XG5cdGlmIChOb3RpZmljYXRpb24uQ2xpZW50Vmlld0Vycm9yID09PSBjb2RlICYmIG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZTtcblx0fVxuXG5cdGRlZkNvZGUgPSBkZWZDb2RlID8gd2luZG93LnBhcnNlSW50KGRlZkNvZGUsIDEwKSB8fCAwIDogMDtcblx0cmV0dXJuIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV0pXG5cdFx0PyBkZWZDb2RlICYmIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV0pXG5cdFx0XHQ/IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV1cblx0XHRcdDogJydcblx0XHQ6IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlXG4gKiBAcGFyYW0ge251bWJlcn0gZGVmQ29kZSA9IE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBkZWZDb2RlID0gTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24pIHtcblx0cmV0dXJuIHJlc3BvbnNlICYmIHJlc3BvbnNlLkVycm9yQ29kZVxuXHRcdD8gZ2V0Tm90aWZpY2F0aW9uKHBJbnQocmVzcG9uc2UuRXJyb3JDb2RlKSwgcmVzcG9uc2UuRXJyb3JNZXNzYWdlIHx8ICcnKVxuXHRcdDogZ2V0Tm90aWZpY2F0aW9uKGRlZkNvZGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gY29kZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShjb2RlKSB7XG5cdGxldCByZXN1bHQgPSAnJztcblx0c3dpdGNoICh3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDApIHtcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlSXNUb29CaWc6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9JU19UT09fQklHJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlUGFydGlhbGx5VXBsb2FkZWQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9QQVJUSUFMTFlfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVOb1VwbG9hZGVkOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX05PX0ZJTEVfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLk1pc3NpbmdUZW1wRm9sZGVyOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX01JU1NJTkdfVEVNUF9GT0xERVInKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVPblNhdmVpbmdFcnJvcjpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9PTl9TQVZJTkdfRklMRScpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZVR5cGU6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9UWVBFJyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX1VOS05PV04nKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkbWluXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZChhZG1pbiwgbGFuZ3VhZ2UpIHtcblx0Y29uc3Qgc3RhcnQgPSBtaWNyb3RpbWUoKTtcblxuXHQkaHRtbC5hZGRDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblxuXHRyZXR1cm4gbmV3IHdpbmRvdy5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHQkLmFqYXgoe1xuXHRcdFx0dXJsOiBsYW5nTGluayhsYW5ndWFnZSwgYWRtaW4pLFxuXHRcdFx0ZGF0YVR5cGU6ICdzY3JpcHQnLFxuXHRcdFx0Y2FjaGU6IHRydWVcblx0XHR9KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRfLmRlbGF5KFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJlbG9hZERhdGEoKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgaXNSdGwgPSAtMSA8IGluQXJyYXkoKGxhbmd1YWdlIHx8ICcnKS50b0xvd2VyQ2FzZSgpLCBbJ2FyJywgJ2FyX3NhJywgJ2hlJywgJ2hlX2hlJywgJ3VyJywgJ3VyX2lyJ10pO1xuXG5cdFx0XHRcdFx0XHQkaHRtbFxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3JsLWNoYW5naW5nLWxhbmd1YWdlJylcblx0XHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdybC1ydGwgcmwtbHRyJylcblx0XHRcdFx0XHRcdFx0Ly8gLmF0dHIoJ2RpcicsIGlzUnRsID8gJ3J0bCcgOiAnbHRyJylcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKGlzUnRsID8gJ3JsLXJ0bCcgOiAncmwtbHRyJyk7XG5cblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdDUwMCA8IG1pY3JvdGltZSgpIC0gc3RhcnQgPyAxIDogNTAwXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblx0XHRcdFx0d2luZG93LnJhaW5sb29wSTE4TiA9IG51bGw7XG5cdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH0pO1xufVxuXG4vLyBpbml0IHNlY3Rpb25cbiRodG1sLmFkZENsYXNzKCdybC0nICsgKCRodG1sLmF0dHIoJ2RpcicpIHx8ICdsdHInKSk7XG4iLCJpbXBvcnQgX09iamVjdCRjcmVhdGUgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2NyZWF0ZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbmRcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgcFN0cmluZywgcEludCwgaXNVbmQsIGlzTm9ybWFsLCB0cmltLCBlbmNvZGVVUklDb21wb25lbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFJPT1QgPSAnLi8nLFxuXHRIQVNIX1BSRUZJWCA9ICcjLycsXG5cdFNFUlZFUl9QUkVGSVggPSAnLi8/Jyxcblx0U1VCX1FVRVJZX1BSRUZJWCA9ICcmcVtdPScsXG5cdFZFUlNJT04gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndmVyc2lvbicpLFxuXHRXRUJfUFJFRklYID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3dlYlBhdGgnKSB8fCAnJyxcblx0VkVSU0lPTl9QUkVGSVggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnd2ViVmVyc2lvblBhdGgnKSB8fCAncmFpbmxvb3Avdi8nICsgVkVSU0lPTiArICcvJyxcblx0U1RBVElDX1BSRUZJWCA9IFZFUlNJT05fUFJFRklYICsgJ3N0YXRpYy8nLFxuXHRBRE1JTl9IT1NUX1VTRSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluSG9zdFVzZScpLFxuXHRBRE1JTl9QQVRIID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluUGF0aCcpIHx8ICdhZG1pbic7XG5cbmxldCBBVVRIX1BSRUZJWCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoQWNjb3VudEhhc2gnKSB8fCAnMCc7XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZUF1dGhTdWZmaXgoKSB7XG5cdEFVVEhfUFJFRklYID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGhBY2NvdW50SGFzaCcpIHx8ICcwJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViUXVlcnlQcmVmaXgoKSB7XG5cdHJldHVybiBTVUJfUVVFUllfUFJFRklYO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc3RhcnR1cFVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3Qoc3RhcnR1cFVybCA9ICcnKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArIHBTdHJpbmcoc3RhcnR1cFVybCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RBZG1pbigpIHtcblx0cmV0dXJuIEFETUlOX0hPU1RfVVNFID8gUk9PVCA6IFNFUlZFUl9QUkVGSVggKyBBRE1JTl9QQVRIO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290VXNlcigpIHtcblx0cmV0dXJuIFJPT1Q7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFJhdyh0eXBlLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRjdXN0b21TcGVjU3VmZml4ID0gaXNVbmQoY3VzdG9tU3BlY1N1ZmZpeCkgPyBBVVRIX1BSRUZJWCA6IGN1c3RvbVNwZWNTdWZmaXg7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0Jy9SYXcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRjdXN0b21TcGVjU3VmZml4ICtcblx0XHQnLycgK1xuXHRcdHR5cGUgK1xuXHRcdCcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRkb3dubG9hZFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudERvd25sb2FkKGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdEb3dubG9hZCcsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRQcmV2aWV3KGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdWaWV3JywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFRodW1ibmFpbFByZXZpZXcoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdUaHVtYm5haWwnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50UHJldmlld0FzUGxhaW4oZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdBc1BsYWluJywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudEZyYW1lZChkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnRnJhbWVkVmlldycsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlclJlcXVlc3QodHlwZSkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvJyArIHR5cGUgKyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZCcpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRDb250YWN0cygpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZENvbnRhY3RzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZEJhY2tncm91bmQoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdVcGxvYWRCYWNrZ3JvdW5kJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ0FwcGVuZCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZShlbWFpbCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQ2hhbmdlJykgKyBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhamF4KGFkZCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQWpheCcpICsgYWRkO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VWaWV3TGluayhyZXF1ZXN0SGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggK1xuXHRcdCcvUmF3LycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0QVVUSF9QUkVGSVggK1xuXHRcdCcvVmlld0FzUGxhaW4vJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRyZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VEb3dubG9hZExpbmsocmVxdWVzdEhhc2gpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvRG93bmxvYWQvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyByZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF2YXRhckxpbmsoZW1haWwpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8wL0F2YXRhci8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKSArICcvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY0xpbmsoaGFzaCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LzAvUHVibGljLycgKyBoYXNoICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlckJhY2tncm91bmQoaGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Vc2VyQmFja2dyb3VuZC8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIGhhc2hcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGhwSW5mbygpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL0luZm8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQWRtaW5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYW5nTGluayhsYW5nLCBpc0FkbWluKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9MYW5nLzAvJyArIChpc0FkbWluID8gJ0FkbWluJyA6ICdBcHAnKSArICcvJyArIHdpbmRvdy5lbmNvZGVVUkkobGFuZykgKyAnLycgKyBWRVJTSU9OICsgJy8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c1ZjZigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c1ZjZi8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c0NzdigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c0Nzdi8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0geGF1dGggPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvY2lhbEdvb2dsZSh4YXV0aCA9IGZhbHNlKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0J1NvY2lhbEdvb2dsZScgK1xuXHRcdCgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJykgK1xuXHRcdCh4YXV0aCA/ICcmeGF1dGg9MScgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29jaWFsVHdpdHRlcigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnU29jaWFsVHdpdHRlcicgKyAoJycgIT09IEFVVEhfUFJFRklYID8gJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2NpYWxGYWNlYm9vaygpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJ1NvY2lhbEZhY2Vib29rJyArICgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRpY1ByZWZpeChwYXRoKSB7XG5cdHJldHVybiBTVEFUSUNfUFJFRklYICsgcGF0aDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlDb250YWN0UGljKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2VtcHR5LWNvbnRhY3QucG5nJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc291bmQoZmlsZU5hbWUpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnc291bmRzLycgKyBmaWxlTmFtZSk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdGlmaWNhdGlvbk1haWxJY29uKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2ljb20tbWVzc2FnZS1ub3RpZmljYXRpb24ucG5nJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3AubWluLmpzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BXb3JrZXJKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3Aud29ya2VyLm1pbi5qcycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuUGdwV29ya2VyUGF0aCgpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluLycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGVtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRoZW1lUHJldmlld0xpbmsodGhlbWUpIHtcblx0bGV0IHByZWZpeCA9IFZFUlNJT05fUFJFRklYO1xuXHRpZiAoJ0BjdXN0b20nID09PSB0aGVtZS5zdWJzdHIoLTcpKSB7XG5cdFx0dGhlbWUgPSB0cmltKHRoZW1lLnN1YnN0cmluZygwLCB0aGVtZS5sZW5ndGggLSA3KSk7XG5cdFx0cHJlZml4ID0gV0VCX1BSRUZJWDtcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyAndGhlbWVzLycgKyB3aW5kb3cuZW5jb2RlVVJJKHRoZW1lKSArICcvaW1hZ2VzL3ByZXZpZXcucG5nJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5ib3hGb2xkZXJOYW1lID0gJ0lOQk9YJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluYm94KGluYm94Rm9sZGVyTmFtZSA9ICdJTkJPWCcpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ21haWxib3gvJyArIGluYm94Rm9sZGVyTmFtZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZz19IHNjcmVlbk5hbWUgPSAnJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzKHNjcmVlbk5hbWUgPSAnJykge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyAnc2V0dGluZ3MnICsgKHNjcmVlbk5hbWUgPyAnLycgKyBzY3JlZW5OYW1lIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhYm91dCgpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ2Fib3V0Jztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkbWluKHNjcmVlbk5hbWUpIHtcblx0bGV0IHJlc3VsdCA9IEhBU0hfUFJFRklYO1xuXHRzd2l0Y2ggKHNjcmVlbk5hbWUpIHtcblx0XHRjYXNlICdBZG1pbkRvbWFpbnMnOlxuXHRcdFx0cmVzdWx0ICs9ICdkb21haW5zJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ0FkbWluU2VjdXJpdHknOlxuXHRcdFx0cmVzdWx0ICs9ICdzZWN1cml0eSc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdBZG1pbkxpY2Vuc2luZyc6XG5cdFx0XHRyZXN1bHQgKz0gJ2xpY2Vuc2luZyc7XG5cdFx0XHRicmVhaztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcGFnZSA9IDFcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc2VhcmNoID0gJydcbiAqIEBwYXJhbSB7c3RyaW5nPX0gdGhyZWFkVWlkID0gJydcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWlsQm94KGZvbGRlciwgcGFnZSA9IDEsIHNlYXJjaCA9ICcnLCB0aHJlYWRVaWQgPSAnJykge1xuXHRwYWdlID0gaXNOb3JtYWwocGFnZSkgPyBwSW50KHBhZ2UpIDogMTtcblx0c2VhcmNoID0gcFN0cmluZyhzZWFyY2gpO1xuXG5cdGxldCByZXN1bHQgPSBIQVNIX1BSRUZJWCArICdtYWlsYm94Lyc7XG5cblx0aWYgKCcnICE9PSBmb2xkZXIpIHtcblx0XHRjb25zdCByZXN1bHRUaHJlYWRVaWQgPSBwSW50KHRocmVhZFVpZCk7XG5cdFx0cmVzdWx0ICs9IHdpbmRvdy5lbmNvZGVVUkkoZm9sZGVyKSArICgwIDwgcmVzdWx0VGhyZWFkVWlkID8gJ34nICsgcmVzdWx0VGhyZWFkVWlkIDogJycpO1xuXHR9XG5cblx0aWYgKDEgPCBwYWdlKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnL3AnICsgcGFnZTtcblx0fVxuXG5cdGlmICgnJyAhPT0gc2VhcmNoKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnLycgKyB3aW5kb3cuZW5jb2RlVVJJKHNlYXJjaCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9zbGljZVwiO1xuaW1wb3J0IF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlXCI7XG5pbXBvcnQgX3JlZHVjZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvaW5zdGFuY2UvcmVkdWNlXCI7XG5pbXBvcnQgX09iamVjdCRrZXlzIGZyb20gXCIuLi8uLi9jb3JlLWpzL29iamVjdC9rZXlzXCI7XG5pbXBvcnQgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCIuLi8uLi9jb3JlLWpzL2luc3RhbmNlL2Zvci1lYWNoXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHksIGRlY29yYXRvcnMsIGRlc2NyaXB0b3IsIGNvbnRleHQpIHtcbiAgdmFyIF9jb250ZXh0LCBfY29udGV4dDIsIF9jb250ZXh0MztcblxuICB2YXIgZGVzYyA9IHt9O1xuXG4gIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qka2V5cyhkZXNjcmlwdG9yKSkuY2FsbChfY29udGV4dCwgZnVuY3Rpb24gKGtleSkge1xuICAgIGRlc2Nba2V5XSA9IGRlc2NyaXB0b3Jba2V5XTtcbiAgfSk7XG5cbiAgZGVzYy5lbnVtZXJhYmxlID0gISFkZXNjLmVudW1lcmFibGU7XG4gIGRlc2MuY29uZmlndXJhYmxlID0gISFkZXNjLmNvbmZpZ3VyYWJsZTtcblxuICBpZiAoJ3ZhbHVlJyBpbiBkZXNjIHx8IGRlc2MuaW5pdGlhbGl6ZXIpIHtcbiAgICBkZXNjLndyaXRhYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGRlc2MgPSBfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDIgPSBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShkZWNvcmF0b3JzKS5jYWxsKGRlY29yYXRvcnMpKS5jYWxsKF9jb250ZXh0MykpLmNhbGwoX2NvbnRleHQyLCBmdW5jdGlvbiAoZGVzYywgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGRlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5LCBkZXNjKSB8fCBkZXNjO1xuICB9LCBkZXNjKTtcblxuICBpZiAoY29udGV4dCAmJiBkZXNjLmluaXRpYWxpemVyICE9PSB2b2lkIDApIHtcbiAgICBkZXNjLnZhbHVlID0gZGVzYy5pbml0aWFsaXplciA/IGRlc2MuaW5pdGlhbGl6ZXIuY2FsbChjb250ZXh0KSA6IHZvaWQgMDtcbiAgICBkZXNjLmluaXRpYWxpemVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGRlc2MuaW5pdGlhbGl6ZXIgPT09IHZvaWQgMCkge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzYyk7XG5cbiAgICBkZXNjID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkZXNjO1xufSIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmtleTsiLCJpbXBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUgfSBmcm9tICdSZW1vdGUvQWJzdHJhY3RBamF4JztcblxuY2xhc3MgUmVtb3RlQWRtaW5BamF4IGV4dGVuZHMgQWJzdHJhY3RBamF4UmVtb3RlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0xvZ2luXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGFzc3dvcmRcblx0ICovXG5cdGFkbWluTG9naW4oZkNhbGxiYWNrLCBzTG9naW4sIHNQYXNzd29yZCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Mb2dpbicsIHtcblx0XHRcdCdMb2dpbic6IHNMb2dpbixcblx0XHRcdCdQYXNzd29yZCc6IHNQYXNzd29yZFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGFkbWluTG9nb3V0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Mb2dvdXQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHNhdmVBZG1pbkNvbmZpZyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblNldHRpbmdzVXBkYXRlJywgb0RhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IHZhbHVlRm5cblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZuXG5cdCAqL1xuXHRzYXZlQWRtaW5Db25maWdIZWxwZXIoa2V5LCB2YWx1ZUZuLCBmbikge1xuXHRcdHJldHVybiAodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGFba2V5XSA9IHZhbHVlRm4gPyB2YWx1ZUZuKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0dGhpcy5zYXZlQWRtaW5Db25maWcoZm4gfHwgbnVsbCwgZGF0YSk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJJbmNsdWRlQWxpYXNlcyA9IHRydWVcblx0ICovXG5cdGRvbWFpbkxpc3QoZkNhbGxiYWNrLCBiSW5jbHVkZUFsaWFzZXMgPSB0cnVlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkxpc3QnLCB7XG5cdFx0XHQnSW5jbHVkZUFsaWFzZXMnOiBiSW5jbHVkZUFsaWFzZXMgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRwbHVnaW5MaXN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QbHVnaW5MaXN0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0cGFja2FnZXNMaXN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QYWNrYWdlc0xpc3QnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRjb3JlRGF0YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluQ29yZURhdGEnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHR1cGRhdGVDb3JlRGF0YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluVXBkYXRlQ29yZURhdGEnLCB7fSwgOTAwMDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYWNrYWdlXG5cdCAqL1xuXHRwYWNrYWdlSW5zdGFsbChmQ2FsbGJhY2ssIG9QYWNrYWdlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdBZG1pblBhY2thZ2VJbnN0YWxsJyxcblx0XHRcdHtcblx0XHRcdFx0J0lkJzogb1BhY2thZ2UuaWQsXG5cdFx0XHRcdCdUeXBlJzogb1BhY2thZ2UudHlwZSxcblx0XHRcdFx0J0ZpbGUnOiBvUGFja2FnZS5maWxlXG5cdFx0XHR9LFxuXHRcdFx0NjAwMDBcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYWNrYWdlXG5cdCAqL1xuXHRwYWNrYWdlRGVsZXRlKGZDYWxsYmFjaywgb1BhY2thZ2UpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFja2FnZURlbGV0ZScsIHtcblx0XHRcdCdJZCc6IG9QYWNrYWdlLmlkXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdGRvbWFpbihmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkxvYWQnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdHBsdWdpbihmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpbkxvYWQnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdGRvbWFpbkRlbGV0ZShmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkRlbGV0ZScsIHtcblx0XHRcdCdOYW1lJzogc05hbWVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTmFtZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJEaXNhYmxlZFxuXHQgKi9cblx0ZG9tYWluRGlzYWJsZShmQ2FsbGJhY2ssIHNOYW1lLCBiRGlzYWJsZWQpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkRpc2FibGUnLCB7XG5cdFx0XHROYW1lOiBzTmFtZSxcblx0XHRcdERpc2FibGVkOiBiRGlzYWJsZWQgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvQ29uZmlnXG5cdCAqL1xuXHRwbHVnaW5TZXR0aW5nc1VwZGF0ZShmQ2FsbGJhY2ssIG9Db25maWcpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpblNldHRpbmdzVXBkYXRlJywgb0NvbmZpZyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJGb3JjZVxuXHQgKi9cblx0bGljZW5zaW5nKGZDYWxsYmFjaywgYkZvcmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5MaWNlbnNpbmcnLCB7XG5cdFx0XHRGb3JjZTogYkZvcmNlID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0RvbWFpblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0tleVxuXHQgKi9cblx0bGljZW5zaW5nQWN0aXZhdGUoZkNhbGxiYWNrLCBzRG9tYWluLCBzS2V5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5MaWNlbnNpbmdBY3RpdmF0ZScsIHtcblx0XHRcdERvbWFpbjogc0RvbWFpbixcblx0XHRcdEtleTogc0tleVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRpc2FibGVkXG5cdCAqL1xuXHRwbHVnaW5EaXNhYmxlKGZDYWxsYmFjaywgc05hbWUsIGJEaXNhYmxlZCkge1xuXHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGx1Z2luRGlzYWJsZScsIHtcblx0XHRcdE5hbWU6IHNOYW1lLFxuXHRcdFx0RGlzYWJsZWQ6IGJEaXNhYmxlZCA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlRG9tYWluQWxpYXMoZkNhbGxiYWNrLCBzTmFtZSwgc0FsaWFzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkFsaWFzU2F2ZScsIHtcblx0XHRcdE5hbWU6IHNOYW1lLFxuXHRcdFx0QWxpYXM6IHNBbGlhc1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlT3JVcGRhdGVEb21haW4oXG5cdFx0ZkNhbGxiYWNrLFxuXHRcdGJDcmVhdGUsXG5cdFx0c05hbWUsXG5cdFx0c0luY0hvc3QsXG5cdFx0aUluY1BvcnQsXG5cdFx0c0luY1NlY3VyZSxcblx0XHRiSW5jU2hvcnRMb2dpbixcblx0XHRiVXNlU2lldmUsXG5cdFx0c1NpZXZlQWxsb3dSYXcsXG5cdFx0c1NpZXZlSG9zdCxcblx0XHRpU2lldmVQb3J0LFxuXHRcdHNTaWV2ZVNlY3VyZSxcblx0XHRzT3V0SG9zdCxcblx0XHRpT3V0UG9ydCxcblx0XHRzT3V0U2VjdXJlLFxuXHRcdGJPdXRTaG9ydExvZ2luLFxuXHRcdGJPdXRBdXRoLFxuXHRcdGJPdXRQaHBNYWlsLFxuXHRcdHNXaGl0ZUxpc3Rcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpblNhdmUnLCB7XG5cdFx0XHQnQ3JlYXRlJzogYkNyZWF0ZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdOYW1lJzogc05hbWUsXG5cblx0XHRcdCdJbmNIb3N0Jzogc0luY0hvc3QsXG5cdFx0XHQnSW5jUG9ydCc6IGlJbmNQb3J0LFxuXHRcdFx0J0luY1NlY3VyZSc6IHNJbmNTZWN1cmUsXG5cdFx0XHQnSW5jU2hvcnRMb2dpbic6IGJJbmNTaG9ydExvZ2luID8gJzEnIDogJzAnLFxuXG5cdFx0XHQnVXNlU2lldmUnOiBiVXNlU2lldmUgPyAnMScgOiAnMCcsXG5cdFx0XHQnU2lldmVBbGxvd1Jhdyc6IHNTaWV2ZUFsbG93UmF3ID8gJzEnIDogJzAnLFxuXHRcdFx0J1NpZXZlSG9zdCc6IHNTaWV2ZUhvc3QsXG5cdFx0XHQnU2lldmVQb3J0JzogaVNpZXZlUG9ydCxcblx0XHRcdCdTaWV2ZVNlY3VyZSc6IHNTaWV2ZVNlY3VyZSxcblxuXHRcdFx0J091dEhvc3QnOiBzT3V0SG9zdCxcblx0XHRcdCdPdXRQb3J0JzogaU91dFBvcnQsXG5cdFx0XHQnT3V0U2VjdXJlJzogc091dFNlY3VyZSxcblx0XHRcdCdPdXRTaG9ydExvZ2luJzogYk91dFNob3J0TG9naW4gPyAnMScgOiAnMCcsXG5cdFx0XHQnT3V0QXV0aCc6IGJPdXRBdXRoID8gJzEnIDogJzAnLFxuXHRcdFx0J091dFVzZVBocE1haWwnOiBiT3V0UGhwTWFpbCA/ICcxJyA6ICcwJyxcblxuXHRcdFx0J1doaXRlTGlzdCc6IHNXaGl0ZUxpc3Rcblx0XHR9KTtcblx0fVxuXG5cdHRlc3RDb25uZWN0aW9uRm9yRG9tYWluKFxuXHRcdGZDYWxsYmFjayxcblx0XHRzTmFtZSxcblx0XHRzSW5jSG9zdCxcblx0XHRpSW5jUG9ydCxcblx0XHRzSW5jU2VjdXJlLFxuXHRcdGJVc2VTaWV2ZSxcblx0XHRzU2lldmVIb3N0LFxuXHRcdGlTaWV2ZVBvcnQsXG5cdFx0c1NpZXZlU2VjdXJlLFxuXHRcdHNPdXRIb3N0LFxuXHRcdGlPdXRQb3J0LFxuXHRcdHNPdXRTZWN1cmUsXG5cdFx0Yk91dEF1dGgsXG5cdFx0Yk91dFBocE1haWxcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpblRlc3QnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lLFxuXHRcdFx0J0luY0hvc3QnOiBzSW5jSG9zdCxcblx0XHRcdCdJbmNQb3J0JzogaUluY1BvcnQsXG5cdFx0XHQnSW5jU2VjdXJlJzogc0luY1NlY3VyZSxcblx0XHRcdCdVc2VTaWV2ZSc6IGJVc2VTaWV2ZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdTaWV2ZUhvc3QnOiBzU2lldmVIb3N0LFxuXHRcdFx0J1NpZXZlUG9ydCc6IGlTaWV2ZVBvcnQsXG5cdFx0XHQnU2lldmVTZWN1cmUnOiBzU2lldmVTZWN1cmUsXG5cdFx0XHQnT3V0SG9zdCc6IHNPdXRIb3N0LFxuXHRcdFx0J091dFBvcnQnOiBpT3V0UG9ydCxcblx0XHRcdCdPdXRTZWN1cmUnOiBzT3V0U2VjdXJlLFxuXHRcdFx0J091dEF1dGgnOiBiT3V0QXV0aCA/ICcxJyA6ICcwJyxcblx0XHRcdCdPdXRVc2VQaHBNYWlsJzogYk91dFBocE1haWwgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHRlc3RDb250YWN0cyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkNvbnRhY3RzVGVzdCcsIG9EYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHNhdmVOZXdBZG1pblBhc3N3b3JkKGZDYWxsYmFjaywgb0RhdGEpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFzc3dvcmRVcGRhdGUnLCBvRGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0YWRtaW5QaW5nKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QaW5nJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFJlbW90ZUFkbWluQWpheCgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmNvbnN0IFNVQlMgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViKG5hbWUsIGZ1bmMsIGNvbnRleHQpIHtcblx0aWYgKGlzT2JqZWN0KG5hbWUpKSB7XG5cdFx0Y29udGV4dCA9IGZ1bmMgfHwgbnVsbDtcblx0XHRmdW5jID0gbnVsbDtcblxuXHRcdF8uZWFjaChuYW1lLCAoc3ViRnVuYywgc3ViTmFtZSkgPT4ge1xuXHRcdFx0c3ViKHN1Yk5hbWUsIHN1YkZ1bmMsIGNvbnRleHQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdFx0U1VCU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNVQlNbbmFtZV0ucHVzaChbZnVuYywgY29udGV4dF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWIobmFtZSwgYXJncykge1xuXHRQbHVnaW5zLnJ1bkhvb2soJ3JsLXB1YicsIFtuYW1lLCBhcmdzXSk7XG5cblx0aWYgKCFpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdF8uZWFjaChTVUJTW25hbWVdLCAoaXRlbXMpID0+IHtcblx0XHRcdGlmIChpdGVtc1swXSkge1xuXHRcdFx0XHRpdGVtc1swXS5hcHBseShpdGVtc1sxXSB8fCBudWxsLCBhcmdzIHx8IFtdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiZXhwb3J0IGNvbnN0IE1FU1NBR0VTX1BFUl9QQUdFID0gMjA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMgPSBbMTAsIDIwLCAzMCwgNTAsIDEwMF07XG5cbmV4cG9ydCBjb25zdCBDT05UQUNUU19QRVJfUEFHRSA9IDUwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BSkFYX1RJTUVPVVQgPSAzMDAwMDtcblxuZXhwb3J0IGNvbnN0IFNFQVJDSF9BSkFYX1RJTUVPVVQgPSAzMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUID0gMzAwMDAwO1xuXG5leHBvcnQgY29uc3QgU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCA9IDIwMDAwMDtcblxuZXhwb3J0IGNvbnN0IENPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUID0gMjAwMDAwO1xuXG5leHBvcnQgY29uc3QgVU5VU0VEX09QVElPTl9WQUxVRSA9ICdfX1VOVVNFX18nO1xuXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FID0gJ3JsY3NjJztcblxuZXhwb3J0IGNvbnN0IElNQVBfREVGQVVMVF9QT1JUID0gMTQzO1xuXG5leHBvcnQgY29uc3QgSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUID0gOTkzO1xuXG5leHBvcnQgY29uc3QgU01UUF9ERUZBVUxUX1BPUlQgPSAyNTtcblxuZXhwb3J0IGNvbnN0IFNNVFBfREVGQVVMVF9TRUNVUkVfUE9SVCA9IDQ2NTtcblxuZXhwb3J0IGNvbnN0IFNJRVZFX0RFRkFVTFRfUE9SVCA9IDQxOTA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQgPSAxNTtcblxuZXhwb3J0IGNvbnN0IEFKQVhfRVJST1JfTElNSVQgPSA3O1xuXG5leHBvcnQgY29uc3QgVE9LRU5fRVJST1JfTElNSVQgPSAxMDtcblxuZXhwb3J0IGNvbnN0IFJBSU5MT09QX1RSSUFMX0tFWSA9ICdSQUlOTE9PUC1UUklBTC1LRVknO1xuXG4vKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuZXhwb3J0IGNvbnN0IERBVEFfSU1BR0VfVVNFUl9ET1RfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQzRBQUFBdUNBWUFBQUJYdVNzM0FBQUhIa2xFUVZSb1E3VlpXMDhiVnhDZVhSdXdJYlRHWEl3TnRCQmFxandnVlVpUjhsRGxiemE5cWUxRHBWWjlhTlEvMEtwUGVhSkswN1NwY3VFZUNFbVVBT2JtMjFiZnJMOWxPTmpleFNZcldmYnVuajM3elhkbXZwa3o5b0lnQ0tURDBXZzB4UGQ5NFREUDgzUTB6dldhNTB2emtsU3JkYW5WYW5xZjQvRDg0R0JHcitGK09wM1M4ZnFvSnhMT2RuWmdUdnNPL25ZaGVuSEErVUM3Q1dGMXVYd2tiOSsrbGRQVFV3VmVyVmJWcUZRcXBSOFlQalEwSkNNakk1TE5EaWpvUmdQM1BRVnU1KzVFb3IyWEdMZzdJVjRHa0lkSEovTG16UnM1T0RpSXdOYnJkUjBPMEdDY3E0WHo0ZUZobVp5Y2xQNyt0RFFhSWlrL0JHNVhLUW40U3dHM3pKVExaWG45K3JVY2xJOFVIRDVZVm9ERE44YlN6WGhPTndMNDhmRnhHUjRlaWx6RlpUMXVGUklCNXlUOEJxQ2RuUjNaM2QwVlA5VW42WFJhd1lKcGdnVnJaQnYzOE1FNFhLdFVLbkx0MmpVcGxVb3kxUFIvbDNVN1Q2c1ZTQVFjZ01Ba2o4UERROW5lM3Bham95TVJMN3plS3NZWldIZ1dZREdtdjc4L21tZHdjRkErbUpsU2d6aUhEV3JFUnJzakVYRFhlZ1RpMXRaVytETHhJMmJ4SXJxRk5ZVFh5RHlDRndlTUFIQ3diOGU0Um5UTnVPc3FlM3Q3c3JhMjFwVEQwS2N0NjY2RThYbGNaeXp3OS9SVVVYSzVuSzVvVWluVVFJNlRRM2N5bk8vdjc4dnE2cXJLWENOd2xUaUpKcHlOR2MzblpIcDZ1cVYyZHdyUVdPQ3RaQkRBVjFaV3dzUWs3ZjB3aVFuNWtmZmJBdS8wL0tXQll6SUMxK1h1a2ZHeDBSR1ptcHBLbEMydElWMEJoNGFEY1pXN0hoa2ZIOHVyTExaTDdUMnBpaHZsa01Obno1NkZpYWRIeGljTDQxSXNGcE40MWJreHNZeGJSZEZvOWp3QjhLZFBuMTRKOEtuU3BCUUtoUXM2M25QbWJDVlJjQlVBUjJMcTFWVm1wa3N5TVRGeEFYamNFc1F5YmllZ0VTaW9uang1b3NDWk9lTmUxTzQrRWhDQVg3YlFTZ1FjeFJIVE1nQWdjejUrL0Rpcy9oTDR1SFUzL0I0WUdOQVNHSElLeHVFcWwwaytsMDVBZUlBRjF2UG56NVZ4RkZtZERsYUpyTXRaSVRKZVNzWENPVGxNdW5LeGpMdE1ZT0tOalExNThlSkZ1QXVLa1VPYjVzRXdnZmYxOVNrSlVCVmtUaFpVYm5YWnJ0Q0tCUTZnYm5XSWtqWnB5bmUzZWpBV29HbkE3SWN6NmlydkJMZ2JPTWljQ002VGt4UHgvTEFrYlhmZ1djc2F6dUUya0ZSc0tENVorQ2lxRHVtS25jcFp2aWVXY1M2ZERWRDh4aVlDTmZscEpkd2Nkd0pPZjlhaXJMbVZRN0RQek14SVlXTHNYR1hvVnFMdDVrME0zSzNKVVZQRFpkYldOenNDcDQ4VFBGZHZkblpXVXozMm5EaGE3Yko2M2tnQUpQelNkUmtzOS9LZjl4TUpBUTFncTJOcGFVbXkyWXo0emFyNG5RQzN4Yjk5QVF3Q2NHekxBQXd1aEc4WWlXdmNPS3RzK3I0R09lNW5NaG01ZWZPbTlsVUEzRTN2U1pKUnJLdkUwZm5Qdi8vSnk1Y3ZvNWNUSElQUWJTamhPb3FxNjlldlMxOWY2bHhES0s0K3NWaGlnWlB0S0pxYnJRZXF4ZDUrV1I0K2ZLZ3FnVDBrMlhYM25oaVBnRVRXWEZoWWtGenVQWjJ5VnExR1RTT1hwRTQ3L1ZqZ05uRDRtNEdHNy9MaHNUeDY5RWl3RDRWcjJNd0lJeGdiQUgxOGZLeDF5Zno4dkVvZ052R3RXbkN1aExaYTlVVEFyZVZXRnNIeS9iLytWcmJkbDdFNVJFTVFEMmpEb1ViQnl0eSsvWm5VNjRHa1UySHp5Skxoa3RVMWNMdjhuQVJna1lTMmQzYWpBZ3dHOHFVMm9MbURaOTJDTWFPam83SzR1Q2laZ2JEV2FSV2duWmhQeExock1VQ3ZyNjlyaXdLWmsxTEhGN1hxcldBTzloSnhINm96TnpjbkN4L1BxenRaZzltZjZTUU1zY0N0bTJDNWtlNEJHTWxIV1RVcDM2MDM2QUphakRWckZNekJyaGhXc2xRc1NyRllpT3FWcE1yaU5ZSWdxRlJxMmozRkFiL3pmZlQ2enV4Rlh4c056czNOVFhuMTZsVzRnWWlXOTZ3MUZ5ZWRGKzgzeEcvMkZOR0NScFU0TmphbU1zbitPWjl4RTVSWHFkYURkUHBpYjZSV0N6dXdLRjlSeHFJMkFWTlFCd1FZSm9LMHdkQmVqbnF0RWlrUDNwZlA1MVhqVVRFU2wxMkZxSkVLeHNFb3JBUllERDQ0T05UZUlEN1lwc0VuclJ2UWZXQUkyZThXZkRhVFVTSXdKMGlCQ21GT3RPVUFIdlZNUHAvVFB3dllGVllGSXVQOGwrREJnd2RhYTJNaXF3YTBHZ1l3ZmVNbHRvdmJEZmg2YzF2SWdNWWNsaVNzS3Y0SVdGcjZWREh4dmxkdkJBSCsxc0ErY25sNVdZT1BtbXI5aXIrMWw5STBDZ3oweWpoWGpmSkowSlJPbm1leldibDE2NWF5ci81ZnF3Y0JOcjdJZmhqTXFLY3ZFU1NNNGVSY0Nhc1EzYkROT2JtS1BMZEdVR3Bac04yNGNVTkxCbTl6YXp1NGQrK2U2cXBOQkZhVHVVUzI2VTVkcHVSMUN4eUE3SjlkZHJNUnFsejRwd0xMWWF3eW1QZCsrLzJQQUR0MnVnY0d3cTlnQ0NkaFE5NkM2eFd3YTZqMWNldXErSTBFaFcwaThNQUlWSmZlTDNkL0RWRDhFS2kxMlA2LzJTMmpWL0VjY1ZCNTRPL2Vqei85SEdDcG9CQk10YTVyWE1YTHU1M0QxWEF3amhYd3Z2ditoNEJBWFZlNGJPdTNPM0NoeEYwOExpWkZHM2ZlbDE5OUc5Q0gzZkx5cXYyNE5jQjQ0TVJocGRLNzg4VTNDcHlLd3NDdzU5MHhtZlNwenNCdDBGcWMzdWQzdnRaaWd4V2NWWkNrbFZwU2lOMHczcTVFL2g5VEdNSVV1QTMrRVFBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG5leHBvcnQgY29uc3QgREFUQV9JTUFHRV9UUkFOU1BfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRSVcyTmtBQUlBQUFvQUFnZ0E5R2tBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmV4cG9ydCBjb25zdCBEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc1FBQUE3RUFaVXJEaHNBQUFBTlNVUkJWQmhYWXpoOCtQQi9BQWZmQTBuTlB1Q0xBQUFBQUVsRlRrU3VRbUNDJztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZFwiKTsiLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgZGVsZWdhdGVSdW4sIGluRm9jdXMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUsIEV2ZW50S2V5Q29kZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyAkd2luLCBrZXlTY29wZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0Vmlld05leHQge1xuXHRiRGlzYWJlQ2xvc2VPbkVzYyA9IGZhbHNlO1xuXHRzRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuTm9uZTtcblx0c0N1cnJlbnRLZXlTY29wZSA9IEtleVN0YXRlLk5vbmU7XG5cblx0dmlld01vZGVsVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRtb2RhbFZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cblx0dmlld01vZGVsTmFtZSA9ICcnO1xuXHR2aWV3TW9kZWxOYW1lcyA9IFtdO1xuXHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHN0b3JlQW5kU2V0S2V5U2NvcGUoKSB7XG5cdFx0dGhpcy5zQ3VycmVudEtleVNjb3BlID0ga2V5U2NvcGUoKTtcblx0XHRrZXlTY29wZSh0aGlzLnNEZWZhdWx0S2V5U2NvcGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0cmVzdG9yZUtleVNjb3BlKCkge1xuXHRcdGtleVNjb3BlKHRoaXMuc0N1cnJlbnRLZXlTY29wZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZWdpc3RlclBvcHVwS2V5RG93bigpIHtcblx0XHQkd2luLm9uKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRpZiAoIXRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgJiYgRXZlbnRLZXlDb2RlLkVzYyA9PT0gZXZlbnQua2V5Q29kZSkge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjYW5jZWxDb21tYW5kJyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5CYWNrc3BhY2UgPT09IGV2ZW50LmtleUNvZGUgJiYgIWluRm9jdXMoKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdGNhbmNlbENvbW1hbmQoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cdGNsb3NlQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBTb2NpYWxTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZ29vZ2xlID0ge307XG5cdFx0dGhpcy50d2l0dGVyID0ge307XG5cdFx0dGhpcy5mYWNlYm9vayA9IHt9O1xuXHRcdHRoaXMuZHJvcGJveCA9IHt9O1xuXG5cdFx0Ly8gR29vZ2xlXG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5nb29nbGUuY2xpZW50SUQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5hcGlLZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS51c2VyTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5nb29nbGUubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5nb29nbGUudXNlck5hbWUoKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhID0ge307XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoR21haWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmRyaXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5wcmV2aWV3ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlID0ge307XG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5jbGllbnRTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0dGhpcy5nb29nbGUuZW5hYmxlZCgpICYmICh0aGlzLmdvb2dsZS5jYXBhLmF1dGgoKSB8fCB0aGlzLmdvb2dsZS5jYXBhLmF1dGhHbWFpbCgpIHx8IHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5hcGlLZXlTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuZ29vZ2xlLmVuYWJsZWQoKSAmJiB0aGlzLmdvb2dsZS5jYXBhLmRyaXZlKCkpO1xuXG5cdFx0Ly8gRmFjZWJvb2tcblx0XHR0aGlzLmZhY2Vib29rLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcElEID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZmFjZWJvb2subG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5mYWNlYm9vay51c2VyTmFtZSgpKTtcblxuXHRcdC8vIFR3aXR0ZXJcblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lclNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d2l0dGVyLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnR3aXR0ZXIubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy50d2l0dGVyLnVzZXJOYW1lKCkpO1xuXG5cdFx0Ly8gRHJvcGJveFxuXHRcdHRoaXMuZHJvcGJveC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2xpZW50U2VjcmV0KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRTZWNyZXQnKSk7XG5cdFx0dGhpcy5nb29nbGUuYXBpS2V5KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVBcGlLZXknKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGgoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aEdtYWlsKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aEdtYWlsJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxEcml2ZScpKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLnByZXZpZXcoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxQcmV2aWV3JykpO1xuXG5cdFx0dGhpcy5mYWNlYm9vay5lbmFibGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RmFjZWJvb2tTb2NpYWwnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBJRCcpKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcFNlY3JldChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBTZWNyZXQnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3VwcG9ydGVkRmFjZWJvb2tTb2NpYWwnKSk7XG5cblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dUd2l0dGVyU29jaWFsJykpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1R3aXR0ZXJDb25zdW1lcktleScpKTtcblx0XHR0aGlzLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQgPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUd2l0dGVyQ29uc3VtZXJTZWNyZXQnKSk7XG5cblx0XHR0aGlzLmRyb3Bib3guZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0Ryb3Bib3hTb2NpYWwnKSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleShTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJvcGJveEFwaUtleScpKTtcblx0fVxuXG5cdGFwcGVuZERyb3Bib3goKSB7XG5cdFx0aWYgKCF3aW5kb3cuRHJvcGJveCAmJiB0aGlzLmRyb3Bib3guZW5hYmxlZCgpICYmIHRoaXMuZHJvcGJveC5hcGlLZXkoKSkge1xuXHRcdFx0aWYgKCF3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Bib3hqcycpKSB7XG5cdFx0XHRcdGNvbnN0IHNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRcdFx0c2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0Jztcblx0XHRcdFx0c2NyaXB0LnNyYyA9ICdodHRwczovL3d3dy5kcm9wYm94LmNvbS9zdGF0aWMvYXBpLzIvZHJvcGlucy5qcyc7XG5cdFx0XHRcdCQoc2NyaXB0KVxuXHRcdFx0XHRcdC5hdHRyKCdpZCcsICdkcm9wYm94anMnKVxuXHRcdFx0XHRcdC5hdHRyKCdkYXRhLWFwcC1rZXknLCB0aGlzLmRyb3Bib3guYXBpS2V5KCkpO1xuXG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTb2NpYWxTdG9yZSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmRleC1vZlwiKTsiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXMoU3ltYm9sLCBuYW1lKSkgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIGVsc2UgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlclwiKTsiLCJpbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG5Ub05vZGVzIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5jbGFzcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdGRpc3Bvc2FibGUgPSBbXTtcblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuZGlzcG9zYWJsZS5mb3JFYWNoKChmdW5jVG9EaXNwb3NlKSA9PiB7XG5cdFx0XHRpZiAoZnVuY1RvRGlzcG9zZSAmJiBmdW5jVG9EaXNwb3NlLmRpc3Bvc2UpIHtcblx0XHRcdFx0ZnVuY1RvRGlzcG9zZS5kaXNwb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IENsYXNzT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVJRCA9ICcnXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCBjb21wb25lbnRFeHBvcnRIZWxwZXIgPSAoQ2xhc3NPYmplY3QsIHRlbXBsYXRlSUQgPSAnJykgPT4gKHtcblx0dGVtcGxhdGU6IHRlbXBsYXRlSUQgPyB7IGVsZW1lbnQ6IHRlbXBsYXRlSUQgfSA6ICc8Yj48L2I+Jyxcblx0dmlld01vZGVsOiB7XG5cdFx0Y3JlYXRlVmlld01vZGVsOiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSA9PiB7XG5cdFx0XHRwYXJhbXMgPSBwYXJhbXMgfHwge307XG5cdFx0XHRwYXJhbXMuZWxlbWVudCA9IG51bGw7XG5cblx0XHRcdGlmIChjb21wb25lbnRJbmZvICYmIGNvbXBvbmVudEluZm8uZWxlbWVudCkge1xuXHRcdFx0XHRwYXJhbXMuY29tcG9uZW50ID0gY29tcG9uZW50SW5mbztcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQgPSAkKGNvbXBvbmVudEluZm8uZWxlbWVudCk7XG5cblx0XHRcdFx0aTE4blRvTm9kZXMocGFyYW1zLmVsZW1lbnQpO1xuXG5cdFx0XHRcdGlmICghaXNVbmQocGFyYW1zLmlubGluZSkgJiYga28udW53cmFwKHBhcmFtcy5pbmxpbmUpKSB7XG5cdFx0XHRcdFx0cGFyYW1zLmVsZW1lbnQuY3NzKCdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgQ2xhc3NPYmplY3QocGFyYW1zKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgaXNGdW5jLCBpc0FycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFNJTVBMRV9IT09LUyA9IHt9LFxuXHRVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTID0gW10sXG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTID0gW107XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKG5hbWUsIGNhbGxiYWNrKSB7XG5cdGlmIChpc0Z1bmMoY2FsbGJhY2spKSB7XG5cdFx0aWYgKCFpc0FycmF5KFNJTVBMRV9IT09LU1tuYW1lXSkpIHtcblx0XHRcdFNJTVBMRV9IT09LU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNJTVBMRV9IT09LU1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0FycmF5PX0gYXJncyA9IFtdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Ib29rKG5hbWUsIGFyZ3MgPSBbXSkge1xuXHRpZiAoaXNBcnJheShTSU1QTEVfSE9PS1NbbmFtZV0pKSB7XG5cdFx0Xy5lYWNoKFNJTVBMRV9IT09LU1tuYW1lXSwgKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRjYWxsYmFjayguLi5hcmdzKTtcblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haW5TZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBTZXR0aW5ncy5zZXR0aW5nc0dldChuYW1lKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3Q9fSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gez9udW1iZXI9fSB0aW1lb3V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdGVSZXF1ZXN0KGNhbGxiYWNrLCBhY3Rpb24sIHBhcmFtZXRlcnMsIHRpbWVvdXQpIHtcblx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18pIHtcblx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLnJlbW90ZSgpLmRlZmF1bHRSZXF1ZXN0KGNhbGxiYWNrLCAnUGx1Z2luJyArIGFjdGlvbiwgcGFyYW1ldGVycywgdGltZW91dCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUpIHtcblx0VVNFUl9WSUVXX01PREVMU19IT09LUy5wdXNoKFtTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZV0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlKSB7XG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTLnB1c2goW1NldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBhZG1pblxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyhhZG1pbikge1xuXHRjb25zdCBLbm9pbiA9IHJlcXVpcmUoJ0tub2luL0tub2luJyk7XG5cdF8uZWFjaChhZG1pbiA/IEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTIDogVVNFUl9WSUVXX01PREVMU19IT09LUywgKHZpZXcpID0+IHtcblx0XHRLbm9pbi5hZGRTZXR0aW5nc1ZpZXdNb2RlbCh2aWV3WzBdLCB2aWV3WzFdLCB2aWV3WzJdLCB2aWV3WzNdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpblNlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzR2V0KHBsdWdpblNlY3Rpb24sIG5hbWUpIHtcblx0bGV0IHBsdWdpbnMgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnUGx1Z2lucycpO1xuXHRwbHVnaW5zID0gcGx1Z2lucyAmJiAhaXNVbmQocGx1Z2luc1twbHVnaW5TZWN0aW9uXSkgPyBwbHVnaW5zW3BsdWdpblNlY3Rpb25dIDogbnVsbDtcblx0cmV0dXJuIHBsdWdpbnMgPyAoaXNVbmQocGx1Z2luc1tuYW1lXSkgPyBudWxsIDogcGx1Z2luc1tuYW1lXSkgOiBudWxsO1xufVxuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgQ29yZUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvcmVSZWFsID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvcmVDaGFubmVsID0ga28ub2JzZXJ2YWJsZSgnc3RhYmxlJyk7XG5cdFx0dGhpcy5jb3JlVHlwZSA9IGtvLm9ic2VydmFibGUoJ3N0YWJsZScpO1xuXHRcdHRoaXMuY29yZVVwZGF0YWJsZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jb3JlQWNjZXNzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvcmVXYXJuaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jb3JlQ2hlY2tpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwIH0pO1xuXHRcdHRoaXMuY29yZVVwZGF0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb3JlUmVtb3RlVmVyc2lvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY29yZVJlbW90ZVJlbGVhc2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSA9IGtvLm9ic2VydmFibGUoLTIpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlQWRtaW5TdG9yZSgpO1xuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9iaW5kLWNvbnRleHQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG5cbnZhciB3cmFwQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgdmFyIFdyYXBwZXIgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gTmF0aXZlQ29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgV3JhcHBlci5wcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBXcmFwcGVyO1xufTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5ub1RhcmdldEdldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgKHBhdGhbVEFSR0VUXSA9IHt9KTtcbiAgdmFyIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG5cbiAgdmFyIEZPUkNFRCwgVVNFX05BVElWRSwgVklSVFVBTF9QUk9UT1RZUEU7XG4gIHZhciBrZXksIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSwgbmF0aXZlUHJvcGVydHksIHJlc3VsdFByb3BlcnR5LCBkZXNjcmlwdG9yO1xuXG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgVVNFX05BVElWRSA9ICFGT1JDRUQgJiYgbmF0aXZlU291cmNlICYmIGhhcyhuYXRpdmVTb3VyY2UsIGtleSk7XG5cbiAgICB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUpIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hdGl2ZVNvdXJjZSwga2V5KTtcbiAgICAgIG5hdGl2ZVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSBuYXRpdmVQcm9wZXJ0eSA9IG5hdGl2ZVNvdXJjZVtrZXldO1xuXG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBpbXBsZW1lbnRhdGlvblxuICAgIHNvdXJjZVByb3BlcnR5ID0gKFVTRV9OQVRJVkUgJiYgbmF0aXZlUHJvcGVydHkpID8gbmF0aXZlUHJvcGVydHkgOiBzb3VyY2Vba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFICYmIHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSA9PT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgaWYgKG9wdGlvbnMuYmluZCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoc291cmNlUHJvcGVydHksIGdsb2JhbCk7XG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5ncyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSAnZnVuY3Rpb24nKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoRnVuY3Rpb24uY2FsbCwgc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGhpZGUocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGFyZ2V0W2tleV0gPSByZXN1bHRQcm9wZXJ0eTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkgaGlkZShwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSwge30pO1xuICAgICAgLy8gZXhwb3J0IHZpcnR1YWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdW2tleV0gPSBzb3VyY2VQcm9wZXJ0eTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAhdGFyZ2V0UHJvdG90eXBlW2tleV0pIGhpZGUodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICB9XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcgPSBGdW5jdGlvblByb3RvdHlwZS50b1N0cmluZztcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gRnVuY3Rpb24gaW5zdGFuY2VzIGAubmFtZWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLWluc3RhbmNlcy1uYW1lXG5pZiAoREVTQ1JJUFRPUlMgJiYgIShOQU1FIGluIEZ1bmN0aW9uUHJvdG90eXBlKSkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTkFNRSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvblByb3RvdHlwZVRvU3RyaW5nLmNhbGwodGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHVuc2FmZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMudW5zYWZlIDogZmFsc2U7XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zID8gISFvcHRpb25zLmVudW1lcmFibGUgOiBmYWxzZTtcbiAgdmFyIG5vVGFyZ2V0R2V0ID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5ub1RhcmdldEdldCA6IGZhbHNlO1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJyAmJiAhaGFzKHZhbHVlLCAnbmFtZScpKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodmFsdWUsICduYW1lJywga2V5KTtcbiAgICBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSkuc291cmNlID0gVEVNUExBVEUuam9pbih0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogJycpO1xuICB9XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIHNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIXVuc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gIH0gZWxzZSBpZiAoIW5vVGFyZ2V0R2V0ICYmIE9ba2V5XSkge1xuICAgIHNpbXBsZSA9IHRydWU7XG4gIH1cbiAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sIGtleSwgdmFsdWUpO1xuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSk7XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SKSB7XG4gIHJldHVybiBwYXRoW0NPTlNUUlVDVE9SICsgJ1Byb3RvdHlwZSddO1xufTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKFJFUExBQ0UsIG5hdGl2ZVJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSwgcmVhc29uKSB7XG4gIHZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IHJlYXNvbi5SRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRTtcbiAgdmFyIFJFUExBQ0VfS0VFUFNfJDAgPSByZWFzb24uUkVQTEFDRV9LRUVQU18kMDtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiByZXBsYWNlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gcmVwbGFjZXIuY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IG5hdGl2ZVJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCFSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSAmJiBSRVBMQUNFX0tFRVBTXyQwKSB8fFxuICAgICAgICAodHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ3N0cmluZycgJiYgcmVwbGFjZVZhbHVlLmluZGV4T2YoVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSlcbiAgICAgICkge1xuICAgICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG5cbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuIG5hdGl2ZVJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YXJpYWJsZSA9PSAnZnVuY3Rpb24nID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxubGV0IF9tb21lbnQgPSBudWxsO1xubGV0IF9tb21lbnROb3cgPSAwO1xuXG5jb25zdCB1cGRhdGVNb21lbnROb3cgPSBfLmRlYm91bmNlKFxuXHQoKSA9PiB7XG5cdFx0X21vbWVudCA9IG1vbWVudCgpO1xuXHR9LFxuXHQ1MDAsXG5cdHRydWVcbik7XG5cbmNvbnN0IHVwZGF0ZU1vbWVudE5vd1VuaXggPSBfLmRlYm91bmNlKFxuXHQoKSA9PiB7XG5cdFx0X21vbWVudE5vdyA9IG1vbWVudCgpLnVuaXgoKTtcblx0fSxcblx0NTAwLFxuXHR0cnVlXG4pO1xuXG4vKipcbiAqIEByZXR1cm5zIHttb21lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnROb3coKSB7XG5cdHVwZGF0ZU1vbWVudE5vdygpO1xuXHRyZXR1cm4gX21vbWVudCB8fCBtb21lbnQoKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9tZW50Tm93VW5peCgpIHtcblx0dXBkYXRlTW9tZW50Tm93VW5peCgpO1xuXHRyZXR1cm4gX21vbWVudE5vdyB8fCAwO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoU3VidHJhY3RGb3JtYXREYXRlSGVscGVyKGRhdGUpIHtcblx0cmV0dXJuIG1vbWVudE5vdygpXG5cdFx0LmNsb25lKClcblx0XHQuc3VidHJhY3QoZGF0ZSwgJ2RheXMnKVxuXHRcdC5mb3JtYXQoJ1lZWVkuTU0uREQnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gbVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0Q3VzdG9tU2hvcnREYXRlKG0pIHtcblx0Y29uc3Qgbm93ID0gbW9tZW50Tm93KCk7XG5cdGlmIChtICYmIG5vdykge1xuXHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0Y2FzZSA0ID49IG5vdy5kaWZmKG0sICdob3VycycpOlxuXHRcdFx0XHRyZXR1cm4gbS5mcm9tTm93KCk7XG5cdFx0XHRjYXNlIG5vdy5mb3JtYXQoJ0wnKSA9PT0gbS5mb3JtYXQoJ0wnKTpcblx0XHRcdFx0cmV0dXJuIGkxOG4oJ01FU1NBR0VfTElTVC9UT0RBWV9BVCcsIHtcblx0XHRcdFx0XHRUSU1FOiBtLmZvcm1hdCgnTFQnKVxuXHRcdFx0XHR9KTtcblx0XHRcdGNhc2Ugbm93XG5cdFx0XHRcdC5jbG9uZSgpXG5cdFx0XHRcdC5zdWJ0cmFjdCgxLCAnZGF5cycpXG5cdFx0XHRcdC5mb3JtYXQoJ0wnKSA9PT0gbS5mb3JtYXQoJ0wnKTpcblx0XHRcdFx0cmV0dXJuIGkxOG4oJ01FU1NBR0VfTElTVC9ZRVNURVJEQVlfQVQnLCB7XG5cdFx0XHRcdFx0VElNRTogbS5mb3JtYXQoJ0xUJylcblx0XHRcdFx0fSk7XG5cdFx0XHRjYXNlIG5vdy55ZWFyKCkgPT09IG0ueWVhcigpOlxuXHRcdFx0XHRyZXR1cm4gbS5mb3JtYXQoJ0QgTU1NLicpO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtID8gbS5mb3JtYXQoJ0xMJykgOiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZVN0YW1wSW5VVENcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRTdHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQodGltZVN0YW1wSW5VVEMsIGZvcm1hdFN0cikge1xuXHRsZXQgbSA9IG51bGwsXG5cdFx0cmVzdWx0ID0gJyc7XG5cblx0Y29uc3Qgbm93ID0gbW9tZW50Tm93VW5peCgpO1xuXG5cdHRpbWVTdGFtcEluVVRDID0gMCA8IHRpbWVTdGFtcEluVVRDID8gdGltZVN0YW1wSW5VVEMgOiAwID09PSB0aW1lU3RhbXBJblVUQyA/IG5vdyA6IDA7XG5cdHRpbWVTdGFtcEluVVRDID0gbm93IDwgdGltZVN0YW1wSW5VVEMgPyBub3cgOiB0aW1lU3RhbXBJblVUQztcblxuXHRtID0gMCA8IHRpbWVTdGFtcEluVVRDID8gbW9tZW50LnVuaXgodGltZVN0YW1wSW5VVEMpIDogbnVsbDtcblxuXHRpZiAobSAmJiAxOTcwID09PSBtLnllYXIoKSkge1xuXHRcdG0gPSBudWxsO1xuXHR9XG5cblx0aWYgKG0pIHtcblx0XHRzd2l0Y2ggKGZvcm1hdFN0cikge1xuXHRcdFx0Y2FzZSAnRlJPTU5PVyc6XG5cdFx0XHRcdHJlc3VsdCA9IG0uZnJvbU5vdygpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ1NIT1JUJzpcblx0XHRcdFx0cmVzdWx0ID0gZm9ybWF0Q3VzdG9tU2hvcnREYXRlKG0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ0ZVTEwnOlxuXHRcdFx0XHRyZXN1bHQgPSBtLmZvcm1hdCgnTExMJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmVzdWx0ID0gbS5mb3JtYXQoZm9ybWF0U3RyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnRUb05vZGUoZWxlbWVudCkge1xuXHRsZXQga2V5ID0gJycsXG5cdFx0dGltZSA9IDA7XG5cdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0dGltZSA9ICRlbC5kYXRhKCdtb21lbnQtdGltZScpO1xuXHRpZiAodGltZSkge1xuXHRcdGtleSA9ICRlbC5kYXRhKCdtb21lbnQtZm9ybWF0Jyk7XG5cdFx0aWYgKGtleSkge1xuXHRcdFx0JGVsLnRleHQoZm9ybWF0KHRpbWUsIGtleSkpO1xuXHRcdH1cblxuXHRcdGtleSA9ICRlbC5kYXRhKCdtb21lbnQtZm9ybWF0LXRpdGxlJyk7XG5cdFx0aWYgKGtleSkge1xuXHRcdFx0JGVsLmF0dHIoJ3RpdGxlJywgZm9ybWF0KHRpbWUsIGtleSkpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkKCkge1xuXHRfLmRlZmVyKCgpID0+IHtcblx0XHQkKCcubW9tZW50Jywgd2luZG93LmRvY3VtZW50KS5lYWNoKChpbmRleCwgaXRlbSkgPT4ge1xuXHRcdFx0bW9tZW50VG9Ob2RlKGl0ZW0pO1xuXHRcdH0pO1xuXHR9KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Lmhhc2hlcjsiLCJ2YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICByZWRlZmluZShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCIvKipcbiAqIEByZXR1cm5zIHtBcHBBZG1pbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcCgpIHtcblx0cmV0dXJuIHJlcXVpcmUoJ0FwcC9BZG1pbicpLmRlZmF1bHQ7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGl0KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHNjaGVkdWxlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHNjaGVkdWxlcihib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgaGFuZGxlciA9PSAnZnVuY3Rpb24nID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogaGFuZGxlciwgdGltZW91dCk7XG4gIH07XG59O1xuXG4vLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBNU0lFIH0sIHtcbiAgLy8gYHNldFRpbWVvdXRgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICAvLyBgc2V0SW50ZXJ2YWxgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgc3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIFN5bWJvbFtuYW1lXVxuICAgIHx8IChOQVRJVkVfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgTGFuZ3VhZ2VTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubGFuZ3VhZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmxhbmd1YWdlc0FkbWluID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2UgPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUoJycpXG5cdFx0XHQuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMubGFuZ3VhZ2VzIH0pXG5cdFx0XHQuZXh0ZW5kKHsgcmV2ZXJzaWJsZTogdHJ1ZSB9KTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbiA9IGtvXG5cdFx0XHQub2JzZXJ2YWJsZSgnJylcblx0XHRcdC5leHRlbmQoeyBsaW1pdGVkTGlzdDogdGhpcy5sYW5ndWFnZXNBZG1pbiB9KVxuXHRcdFx0LmV4dGVuZCh7IHJldmVyc2libGU6IHRydWUgfSk7XG5cblx0XHR0aGlzLnVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlQWRtaW4gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdGNvbnN0IGFMYW5ndWFnZXMgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbGFuZ3VhZ2VzJyksXG5cdFx0XHRhTGFuZ3VhZ2VzQWRtaW4gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbGFuZ3VhZ2VzQWRtaW4nKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VzKGlzQXJyYXkoYUxhbmd1YWdlcykgPyBhTGFuZ3VhZ2VzIDogW10pO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4oaXNBcnJheShhTGFuZ3VhZ2VzQWRtaW4pID8gYUxhbmd1YWdlc0FkbWluIDogW10pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnTGFuZ3VhZ2UnKSk7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluKFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZUFkbWluJykpO1xuXG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMYW5ndWFnZScpKTtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZUFkbWluKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyTGFuZ3VhZ2VBZG1pbicpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTGFuZ3VhZ2VTdG9yZSgpO1xuIiwiLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXIoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSm9pbiA9IFtdLmpvaW47XG5cbnZhciBFUzNfU1RSSU5HUyA9IEluZGV4ZWRPYmplY3QgIT0gT2JqZWN0O1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdqb2luJywgJywnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBFUzNfU1RSSU5HUyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUpvaW4uY2FsbCh0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCJ2YXIgTyA9ICdvYmplY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gTyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09IE8gJiYgd2luZG93KSB8fFxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSBPICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gTyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBTdG9yZSB9IGZyb20gJ1N0b3Jlcy9BYnN0cmFjdEFwcCc7XG5cbmNsYXNzIEFwcEFkbWluU3RvcmUgZXh0ZW5kcyBBYnN0cmFjdEFwcFN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckxhbmd1YWdlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyRG9tYWluID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLndlYWtQYXNzd29yZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRhdGFGb2xkZXJBY2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHN1cGVyLnBvcHVsYXRlKCk7XG5cblx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZSghIXNldHRpbmdzR2V0KCdEZXRlcm1pbmVVc2VyTGFuZ3VhZ2UnKSk7XG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyRG9tYWluKCEhc2V0dGluZ3NHZXQoJ0RldGVybWluZVVzZXJEb21haW4nKSk7XG5cblx0XHR0aGlzLndlYWtQYXNzd29yZCghIXNldHRpbmdzR2V0KCdXZWFrUGFzc3dvcmQnKSk7XG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMoISFzZXR0aW5nc0dldCgnVXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzJykpO1xuXG5cdFx0aWYgKHNldHRpbmdzR2V0KCdBdXRoJykpIHtcblx0XHRcdCQuZ2V0KCcuL2RhdGEvVkVSU0lPTj8nICsgd2luZG93Lk1hdGgucmFuZG9tKCkpLnRoZW4oKCkgPT4gdGhpcy5kYXRhRm9sZGVyQWNjZXNzKHRydWUpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEFwcEFkbWluU3RvcmUoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCJ2YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBUb0ludGVnZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbnRlZ2VyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNOYU4oYXJndW1lbnQgPSArYXJndW1lbnQpID8gMCA6IChhcmd1bWVudCA+IDAgPyBmbG9vciA6IGNlaWwpKGFyZ3VtZW50KTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBhZGRyZXNzcGFyc2VyIGZyb20gJ2VtYWlsanMtYWRkcmVzc3BhcnNlcic7XG5pbXBvcnQgeyB0cmltLCBlbmNvZGVIdG1sLCBpc05vbkVtcHR5QXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5jbGFzcyBFbWFpbE1vZGVsIHtcblx0ZW1haWwgPSAnJztcblx0bmFtZSA9ICcnO1xuXHRka2ltU3RhdHVzID0gJyc7XG5cdGRraW1WYWx1ZSA9ICcnO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZz19IGVtYWlsID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBka2ltU3RhdHVzID0gJ25vbmUnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gZGtpbVZhbHVlID0gJydcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVtYWlsID0gJycsIG5hbWUgPSAnJywgZGtpbVN0YXR1cyA9ICdub25lJywgZGtpbVZhbHVlID0gJycpIHtcblx0XHR0aGlzLmVtYWlsID0gZW1haWw7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHR0aGlzLmRraW1TdGF0dXMgPSBka2ltU3RhdHVzO1xuXHRcdHRoaXMuZGtpbVZhbHVlID0gZGtpbVZhbHVlO1xuXG5cdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSB7QWpheEpzb25FbWFpbH0ganNvblxuXHQgKiBAcmV0dXJucyB7P0VtYWlsTW9kZWx9XG5cdCAqL1xuXHRzdGF0aWMgbmV3SW5zdGFuY2VGcm9tSnNvbihqc29uKSB7XG5cdFx0Y29uc3QgZW1haWwgPSBuZXcgRW1haWxNb2RlbCgpO1xuXHRcdHJldHVybiBlbWFpbC5pbml0QnlKc29uKGpzb24pID8gZW1haWwgOiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5lbWFpbCA9ICcnO1xuXHRcdHRoaXMubmFtZSA9ICcnO1xuXG5cdFx0dGhpcy5ka2ltU3RhdHVzID0gJ25vbmUnO1xuXHRcdHRoaXMuZGtpbVZhbHVlID0gJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHR2YWxpZGF0ZSgpIHtcblx0XHRyZXR1cm4gJycgIT09IHRoaXMubmFtZSB8fCAnJyAhPT0gdGhpcy5lbWFpbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHdpdGhvdXROYW1lID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGhhc2god2l0aG91dE5hbWUgPSBmYWxzZSkge1xuXHRcdHJldHVybiAnIycgKyAod2l0aG91dE5hbWUgPyAnJyA6IHRoaXMubmFtZSkgKyAnIycgKyB0aGlzLmVtYWlsICsgJyMnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0Y2xlYXJEdXBsaWNhdGVOYW1lKCkge1xuXHRcdGlmICh0aGlzLm5hbWUgPT09IHRoaXMuZW1haWwpIHtcblx0XHRcdHRoaXMubmFtZSA9ICcnO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRzZWFyY2gocXVlcnkpIHtcblx0XHRyZXR1cm4gLTEgPCAodGhpcy5uYW1lICsgJyAnICsgdGhpcy5lbWFpbCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWpheEpzb25FbWFpbH0gb0pzb25FbWFpbFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRCeUpzb24oanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZTtcblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L0VtYWlsJyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLm5hbWUgPSB0cmltKGpzb24uTmFtZSk7XG5cdFx0XHR0aGlzLmVtYWlsID0gdHJpbShqc29uLkVtYWlsKTtcblx0XHRcdHRoaXMuZGtpbVN0YXR1cyA9IHRyaW0oanNvbi5Ea2ltU3RhdHVzIHx8ICcnKTtcblx0XHRcdHRoaXMuZGtpbVZhbHVlID0gdHJpbShqc29uLkRraW1WYWx1ZSB8fCAnJyk7XG5cblx0XHRcdHJlc3VsdCA9ICcnICE9PSB0aGlzLmVtYWlsO1xuXHRcdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJpZW5kbHlWaWV3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBXaXRoTGluayA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHVzZUVuY29kZUh0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dG9MaW5lKGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rID0gZmFsc2UsIHVzZUVuY29kZUh0bWwgPSBmYWxzZSkge1xuXHRcdGxldCByZXN1bHQgPSAnJztcblx0XHRpZiAoJycgIT09IHRoaXMuZW1haWwpIHtcblx0XHRcdGlmIChmcmllbmRseVZpZXcgJiYgJycgIT09IHRoaXMubmFtZSkge1xuXHRcdFx0XHRyZXN1bHQgPSB3cmFwV2l0aExpbmtcblx0XHRcdFx0XHQ/ICc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0ICAnP3RvPScgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdCAgJ1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHQgIGVuY29kZUh0bWwodGhpcy5uYW1lKSArXG5cdFx0XHRcdFx0ICAnPC9hPidcblx0XHRcdFx0XHQ6IHVzZUVuY29kZUh0bWxcblx0XHRcdFx0XHQ/IGVuY29kZUh0bWwodGhpcy5uYW1lKVxuXHRcdFx0XHRcdDogdGhpcy5uYW1lO1xuXHRcdFx0XHQvLyByZXN1bHQgPSB3cmFwV2l0aExpbmsgPyAnPGEgaHJlZj1cIm1haWx0bzonICsgZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHQvLyBcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArIGVuY29kZUh0bWwodGhpcy5uYW1lKSArICc8L2E+JyA6ICh1c2VFbmNvZGVIdG1sID8gZW5jb2RlSHRtbCh0aGlzLm5hbWUpIDogdGhpcy5uYW1lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuZW1haWw7XG5cdFx0XHRcdGlmICgnJyAhPT0gdGhpcy5uYW1lKSB7XG5cdFx0XHRcdFx0aWYgKHdyYXBXaXRoTGluaykge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID1cblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnKSArXG5cdFx0XHRcdFx0XHRcdCc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdFx0Jz90bz0nICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdFx0XHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHJlc3VsdCkgK1xuXHRcdFx0XHRcdFx0XHQnPC9hPicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKCc+Jyk7XG5cdFx0XHRcdFx0XHQvLyByZXN1bHQgPSBlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcpICsgJzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHQvLyBcdGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0XHRcdC8vIFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbChyZXN1bHQpICtcblx0XHRcdFx0XHRcdC8vIFx0JzwvYT4nICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbCgnPicpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSAnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgcmVzdWx0ICsgJz4nO1xuXHRcdFx0XHRcdFx0aWYgKHVzZUVuY29kZUh0bWwpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gZW5jb2RlSHRtbChyZXN1bHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh3cmFwV2l0aExpbmspIHtcblx0XHRcdFx0XHRyZXN1bHQgPVxuXHRcdFx0XHRcdFx0JzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdCc8L2E+Jztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgc3BsaXRFbWFpbExpbmUobGluZSkge1xuXHRcdGNvbnN0IHBhcnNlZFJlc3VsdCA9IGFkZHJlc3NwYXJzZXIobGluZSk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShwYXJzZWRSZXN1bHQpKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHRcdGxldCBleGlzdHMgPSBmYWxzZTtcblx0XHRcdHBhcnNlZFJlc3VsdC5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZHJlc3MgPSBpdGVtLmFkZHJlc3Ncblx0XHRcdFx0XHQ/IG5ldyBFbWFpbE1vZGVsKGl0ZW0uYWRkcmVzcy5yZXBsYWNlKC9eWzxdKyguKilbPl0rJC9nLCAnJDEnKSwgaXRlbS5uYW1lIHx8ICcnKVxuXHRcdFx0XHRcdDogbnVsbDtcblxuXHRcdFx0XHRpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmVtYWlsKSB7XG5cdFx0XHRcdFx0ZXhpc3RzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGFkZHJlc3MgPyBhZGRyZXNzLnRvTGluZShmYWxzZSkgOiBpdGVtLm5hbWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBleGlzdHMgPyByZXN1bHQgOiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c3RhdGljIHBhcnNlRW1haWxMaW5lKGxpbmUpIHtcblx0XHRjb25zdCBwYXJzZWRSZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGxpbmUpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocGFyc2VkUmVzdWx0KSkge1xuXHRcdFx0cmV0dXJuIF8uY29tcGFjdChcblx0XHRcdFx0Xy5tYXAocGFyc2VkUmVzdWx0LCAoaXRlbSkgPT5cblx0XHRcdFx0XHRpdGVtLmFkZHJlc3MgPyBuZXcgRW1haWxNb2RlbChpdGVtLmFkZHJlc3MucmVwbGFjZSgvXls8XSsoLiopWz5dKyQvZywgJyQxJyksIGl0ZW0ubmFtZSB8fCAnJykgOiBudWxsXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbEFkZHJlc3Ncblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRwYXJzZShlbWFpbEFkZHJlc3MpIHtcblx0XHRlbWFpbEFkZHJlc3MgPSB0cmltKGVtYWlsQWRkcmVzcyk7XG5cdFx0aWYgKCcnID09PSBlbWFpbEFkZHJlc3MpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGVtYWlsQWRkcmVzcyk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShyZXN1bHQpICYmIHJlc3VsdFswXSkge1xuXHRcdFx0dGhpcy5uYW1lID0gcmVzdWx0WzBdLm5hbWUgfHwgJyc7XG5cdFx0XHR0aGlzLmVtYWlsID0gcmVzdWx0WzBdLmFkZHJlc3MgfHwgJyc7XG5cdFx0XHR0aGlzLmNsZWFyRHVwbGljYXRlTmFtZSgpO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0IHsgRW1haWxNb2RlbCwgRW1haWxNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCwgdHJpbSwgcEludCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgQWJzdHJhY3RJbnB1dCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlIHx8ICcnO1xuXHRcdHRoaXMuc2l6ZSA9IHBhcmFtcy5zaXplIHx8IDA7XG5cdFx0dGhpcy5sYWJlbCA9IHBhcmFtcy5sYWJlbCB8fCAnJztcblx0XHR0aGlzLnByZUxhYmVsID0gcGFyYW1zLnByZUxhYmVsIHx8ICcnO1xuXHRcdHRoaXMuZW5hYmxlID0gaXNVbmQocGFyYW1zLmVuYWJsZSkgPyB0cnVlIDogcGFyYW1zLmVuYWJsZTtcblx0XHR0aGlzLnRyaWdnZXIgPSBwYXJhbXMudHJpZ2dlciAmJiBwYXJhbXMudHJpZ2dlci5zdWJzY3JpYmUgPyBwYXJhbXMudHJpZ2dlciA6IG51bGw7XG5cdFx0dGhpcy5wbGFjZWhvbGRlciA9IHBhcmFtcy5wbGFjZWhvbGRlciB8fCAnJztcblxuXHRcdHRoaXMubGFiZWxlZCA9ICFpc1VuZChwYXJhbXMubGFiZWwpO1xuXHRcdHRoaXMucHJlTGFiZWxlZCA9ICFpc1VuZChwYXJhbXMucHJlTGFiZWwpO1xuXHRcdHRoaXMudHJpZ2dlcmVkID0gIWlzVW5kKHBhcmFtcy50cmlnZ2VyKSAmJiAhIXRoaXMudHJpZ2dlcjtcblxuXHRcdHRoaXMuY2xhc3NGb3JUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNsYXNzTmFtZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHNpemUgPSBrby51bndyYXAodGhpcy5zaXplKSxcblx0XHRcdFx0c3VmZml4VmFsdWUgPSB0aGlzLnRyaWdnZXIgPyAnICcgKyB0cmltKCdzZXR0aW5ncy1zYXZlZC10cmlnZ2VyLWlucHV0ICcgKyB0aGlzLmNsYXNzRm9yVHJpZ2dlcigpKSA6ICcnO1xuXHRcdFx0cmV0dXJuICgwIDwgc2l6ZSA/ICdzcGFuJyArIHNpemUgOiAnJykgKyBzdWZmaXhWYWx1ZTtcblx0XHR9KTtcblxuXHRcdGlmICghaXNVbmQocGFyYW1zLndpZHRoKSAmJiBwYXJhbXMuZWxlbWVudCkge1xuXHRcdFx0cGFyYW1zLmVsZW1lbnQuZmluZCgnaW5wdXQsc2VsZWN0LHRleHRhcmVhJykuY3NzKCd3aWR0aCcsIHBhcmFtcy53aWR0aCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy5jbGFzc05hbWUpO1xuXG5cdFx0aWYgKHRoaXMudHJpZ2dlcikge1xuXHRcdFx0dGhpcy5zZXRUcmlnZ2VyU3RhdGUodGhpcy50cmlnZ2VyKCkpO1xuXG5cdFx0XHR0aGlzLmRpc3Bvc2FibGUucHVzaCh0aGlzLnRyaWdnZXIuc3Vic2NyaWJlKHRoaXMuc2V0VHJpZ2dlclN0YXRlLCB0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0VHJpZ2dlclN0YXRlKHZhbHVlKSB7XG5cdFx0c3dpdGNoIChwSW50KHZhbHVlKSkge1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQ6XG5cdFx0XHRcdHRoaXMuY2xhc3NGb3JUcmlnZ2VyKCdzdWNjZXNzJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignZXJyb3InKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdElucHV0LCBBYnN0cmFjdElucHV0IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBDYXBhIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBDYXBhQWRtaW5TdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuYWRkaXRpb25hbEFjY291bnRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5pZGVudGl0aWVzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5ncmF2YXRhciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudFRodW1ibmFpbHMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5maWx0ZXJzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50aGVtZXMgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMudXNlckJhY2tncm91bmQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm9wZW5QR1AgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3b0ZhY3RvckF1dGggPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3b0ZhY3RvckF1dGhGb3JjZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVtcGxhdGVzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHR0aGlzLmFkZGl0aW9uYWxBY2NvdW50cyhTZXR0aW5ncy5jYXBhKENhcGEuQWRkaXRpb25hbEFjY291bnRzKSk7XG5cdFx0dGhpcy5pZGVudGl0aWVzKFNldHRpbmdzLmNhcGEoQ2FwYS5JZGVudGl0aWVzKSk7XG5cdFx0dGhpcy5ncmF2YXRhcihTZXR0aW5ncy5jYXBhKENhcGEuR3JhdmF0YXIpKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRUaHVtYm5haWxzKFNldHRpbmdzLmNhcGEoQ2FwYS5BdHRhY2htZW50VGh1bWJuYWlscykpO1xuXHRcdHRoaXMuc2lldmUoU2V0dGluZ3MuY2FwYShDYXBhLlNpZXZlKSk7XG5cdFx0dGhpcy5maWx0ZXJzKFNldHRpbmdzLmNhcGEoQ2FwYS5GaWx0ZXJzKSk7XG5cdFx0dGhpcy50aGVtZXMoU2V0dGluZ3MuY2FwYShDYXBhLlRoZW1lcykpO1xuXHRcdHRoaXMudXNlckJhY2tncm91bmQoU2V0dGluZ3MuY2FwYShDYXBhLlVzZXJCYWNrZ3JvdW5kKSk7XG5cdFx0dGhpcy5vcGVuUEdQKFNldHRpbmdzLmNhcGEoQ2FwYS5PcGVuUEdQKSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoKFNldHRpbmdzLmNhcGEoQ2FwYS5Ud29GYWN0b3IpKTtcblx0XHR0aGlzLnR3b0ZhY3RvckF1dGhGb3JjZShTZXR0aW5ncy5jYXBhKENhcGEuVHdvRmFjdG9yRm9yY2UpKTtcblx0XHR0aGlzLnRlbXBsYXRlcyhTZXR0aW5ncy5jYXBhKENhcGEuVGVtcGxhdGVzKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IENhcGFBZG1pblN0b3JlKCk7XG4iLCJ2YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgb2JqZWN0SGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCkge1xuICB2YXIgc3RvcmUgPSBuZXcgV2Vha01hcCgpO1xuICB2YXIgd21nZXQgPSBzdG9yZS5nZXQ7XG4gIHZhciB3bWhhcyA9IHN0b3JlLmhhcztcbiAgdmFyIHdtc2V0ID0gc3RvcmUuc2V0O1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgd21zZXQuY2FsbChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldC5jYWxsKHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcy5jYWxsKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIFBhY2thZ2VBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wYWNrYWdlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5wYWNrYWdlcy5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblxuXHRcdHRoaXMucGFja2FnZXNSZWFsID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnBhY2thZ2VzTWFpblVwZGF0YWJsZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBhY2thZ2VBZG1pblN0b3JlKCk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIXByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbCwga2V5LCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnRvU3RyaW5nO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKHR5cGVvZiBzdG9yZS5pbnNwZWN0U291cmNlICE9ICdmdW5jdGlvbicpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nLmNhbGwoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsIi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cubW9tZW50OyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LnByb2dyZXNzSnM7IiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCduYXZpZ2F0b3InLCAndXNlckFnZW50JykgfHwgJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn07XG5cbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5cbi8vIGxldCByYWlubG9vcENhY2hlcyA9IHdpbmRvdy5jYWNoZXMgJiYgd2luZG93LmNhY2hlcy5vcGVuID8gd2luZG93LmNhY2hlcyA6IG51bGw7XG5cbi8qKlxuICogQHBhcmFtIHtzcmN9IHNyY1xuICogQHBhcmFtIHtib29sZWFufSBhc3luYyA9IGZhbHNlXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGphc3NsKHNyYywgYXN5bmMgPSBmYWxzZSkge1xuXHRpZiAoIXdpbmRvdy5Qcm9taXNlIHx8ICF3aW5kb3cuUHJvbWlzZS5hbGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1Byb21pc2VzIGFyZSBub3QgYXZhaWxhYmxlIHlvdXIgZW52aXJvbm1lbnQuJyk7XG5cdH1cblxuXHRpZiAoIXNyYykge1xuXHRcdHRocm93IG5ldyBFcnJvcignc3JjIHNob3VsZCBub3QgYmUgZW1wdHkuJyk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IHdpbmRvdy5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXG5cdFx0ZWxlbWVudC5vbmxvYWQgPSAoKSA9PiB7XG5cdFx0XHRyZXNvbHZlKHNyYyk7XG5cdFx0fTtcblxuXHRcdGVsZW1lbnQub25lcnJvciA9ICgpID0+IHtcblx0XHRcdHJlamVjdChuZXcgRXJyb3Ioc3JjKSk7XG5cdFx0fTtcblxuXHRcdGVsZW1lbnQuYXN5bmMgPSB0cnVlID09PSBhc3luYztcblx0XHRlbGVtZW50LnNyYyA9IHNyYztcblxuXHRcdHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHR9KSAvKiAudGhlbigocykgPT4ge1xuXG5cdFx0Y29uc3QgZm91bmQgPSBzICYmIHJhaW5sb29wQ2FjaGVzID8gcy5tYXRjaCgvcmFpbmxvb3BcXC92XFwvKFteXFwvXSspXFwvc3RhdGljXFwvLykgOiBudWxsO1xuXHRcdGlmIChmb3VuZCAmJiBmb3VuZFsxXSlcblx0XHR7XG5cdFx0XHRyYWlubG9vcENhY2hlcy5vcGVuKCdyYWlubG9vcC1vZmZsaW5lLScgKyBmb3VuZFsxXSkudGhlbihcblx0XHRcdFx0KGNhY2hlKSA9PiBjYWNoZS5hZGQocylcblx0XHRcdCkuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRyYWlubG9vcENhY2hlcyA9IG51bGw7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcztcblx0fSkqLztcbn1cbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQykge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KGl0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vcmVnZXhwLWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4vcmVnZXhwLXN0aWNreS1oZWxwZXJzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLztcbiAgdmFyIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1kgfHwgc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1k7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSByZWdleHBGbGFncy5jYWxsKHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgneScsICcnKTtcbiAgICAgIGlmIChmbGFncy5pbmRleE9mKCdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IFN0cmluZyhzdHIpLnNsaWNlKHJlLmxhc3RJbmRleCk7XG4gICAgICAvLyBTdXBwb3J0IGFuY2hvcmVkIHN0aWNreSBiZWhhdmlvci5cbiAgICAgIGlmIChyZS5sYXN0SW5kZXggPiAwICYmICghcmUubXVsdGlsaW5lIHx8IHJlLm11bHRpbGluZSAmJiBzdHJbcmUubGFzdEluZGV4IC0gMV0gIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChzdGlja3kgPyByZUNvcHkgOiByZSwgc3RyQ29weSk7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgbWF0Y2guaW5wdXQgPSBtYXRjaC5pbnB1dC5zbGljZShjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZShjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBmbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBuYXRpdmVUb1N0cmluZy5uYW1lICE9IFRPX1NUUklORztcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKE5PVF9HRU5FUklDIHx8IElOQ09SUkVDVF9OQU1FKSB7XG4gIHJlZGVmaW5lKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgcCA9IFN0cmluZyhSLnNvdXJjZSk7XG4gICAgdmFyIHJmID0gUi5mbGFncztcbiAgICB2YXIgZiA9IFN0cmluZyhyZiA9PT0gdW5kZWZpbmVkICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgPyBmbGFncy5jYWxsKFIpIDogcmYpO1xuICAgIHJldHVybiAnLycgKyBwICsgJy8nICsgZjtcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyKGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIFRoZW1lU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnRoZW1lcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmROYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmRIYXNoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnRoZW1lID0ga28ub2JzZXJ2YWJsZSgnJykuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMudGhlbWVzIH0pO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0Y29uc3QgdGhlbWVzID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3RoZW1lcycpO1xuXG5cdFx0dGhpcy50aGVtZXMoaXNBcnJheSh0aGVtZXMpID8gdGhlbWVzIDogW10pO1xuXHRcdHRoaXMudGhlbWUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RoZW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kTmFtZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmROYW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kSGFzaChTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmRIYXNoJykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBUaGVtZVN0b3JlKCk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5jbGFzcyBQbHVnaW5BZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wbHVnaW5zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnBsdWdpbnMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cdFx0dGhpcy5wbHVnaW5zLmVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBsdWdpbkFkbWluU3RvcmUoKTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIExpY2Vuc2VBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5saWNlbnNpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmxpY2Vuc2luZ1Byb2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmxpY2Vuc2VWYWxpZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubGljZW5zZUV4cGlyZWQgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMubGljZW5zZUVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxpY2Vuc2VUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IExpY2Vuc2VBZG1pblN0b3JlKCk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICByZXR1cm4gIU9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQuY2FsbChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBOYXRpdmVQcm9taXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyICRmZXRjaCA9IGdldEJ1aWx0SW4oJ2ZldGNoJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG52YXIgRk9SQ0VEID0gaXNGb3JjZWQoUFJPTUlTRSwgZnVuY3Rpb24gKCkge1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IGluc3BlY3RTb3VyY2UoUHJvbWlzZUNvbnN0cnVjdG9yKSAhPT0gU3RyaW5nKFByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSkge1xuICAgIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgIGlmIChWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gICAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIGlmICghSVNfTk9ERSAmJiB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ICE9ICdmdW5jdGlvbicpIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSNmaW5hbGx5IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZVsnZmluYWxseSddKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKFY4X1ZFUlNJT04gPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFByb21pc2VDb25zdHJ1Y3RvcikpIHJldHVybiBmYWxzZTtcbiAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgdmFyIHByb21pc2UgPSBQcm9taXNlQ29uc3RydWN0b3IucmVzb2x2ZSgxKTtcbiAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgfTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICByZXR1cm4gIShwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlKTtcbn0pO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9IEZPUkNFRCB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKVsnY2F0Y2gnXShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBzdGF0ZS5yZWFjdGlvbnM7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT0gRlVMRklMTEVEO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IGNoYWluW2luZGV4KytdO1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UsIHN0YXRlKTtcbiAgICAgICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGUucmVhY3Rpb25zID0gW107XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQocHJvbWlzZSwgc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3RhdGUpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgcHJvbWlzZSwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4ocHJvbWlzZSwgc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHByb21pc2UsIHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHByb21pc2UsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHByb21pc2UsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3QocHJvbWlzZSwgd3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdChwcm9taXNlLCB7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB0aGlzLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHRoaXMsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHRoaXMsIHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBbXSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZSwge1xuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZWFjdGlvbnMucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAoc3RhdGUuc3RhdGUgIT0gUEVORElORykgbm90aWZ5KHRoaXMsIHN0YXRlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBwcm9taXNlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBwcm9taXNlLCBzdGF0ZSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiB0eXBlb2YgTmF0aXZlUHJvbWlzZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2UucHJvdG90eXBlLnRoZW47XG5cbiAgICAvLyB3cmFwIG5hdGl2ZSBQcm9taXNlI3RoZW4gZm9yIG5hdGl2ZSBhc3luYyBmdW5jdGlvbnNcbiAgICByZWRlZmluZShOYXRpdmVQcm9taXNlLnByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG5hdGl2ZVRoZW4uY2FsbCh0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuXG4gICAgLy8gd3JhcCBmZXRjaCByZXN1bHRcbiAgICBpZiAodHlwZW9mICRmZXRjaCA9PSAnZnVuY3Rpb24nKSAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICBmZXRjaDogZnVuY3Rpb24gZmV0Y2goaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShQcm9taXNlQ29uc3RydWN0b3IsICRmZXRjaC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuXG5Qcm9taXNlV3JhcHBlciA9IGdldEJ1aWx0SW4oUFJPTUlTRSk7XG5cbi8vIHN0YXRpY3NcbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgY2FwYWJpbGl0eS5yZWplY3QuY2FsbCh1bmRlZmluZWQsIHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoSVNfUFVSRSAmJiB0aGlzID09PSBQcm9taXNlV3JhcHBlciA/IFByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgLy8gYFByb21pc2UuYWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUZ1bmN0aW9uKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIFBSRUZFUlJFRF9TVFJJTkcpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGlucHV0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9IDc7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwidmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNi40JyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIFN0cmluZyhrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyAoKytpZCArIHBvc3RmaXgpLnRvU3RyaW5nKDM2KTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09IE5BVElWRSA/IGZhbHNlXG4gICAgOiB0eXBlb2YgZGV0ZWN0aW9uID09ICdmdW5jdGlvbicgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgcmV0dXJuICFTdHJpbmcoU3ltYm9sKCkpO1xufSk7XG4iLCJ2YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG5cbnZhciBsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbnZhciBzZXQgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBwb3N0ID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmICFmYWlscyhwb3N0KSkge1xuICAgIGRlZmVyID0gcG9zdDtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gSUUgPD0gMTEgcmVwbGFjZXMgJDAgd2l0aCB0aGUgd2hvbGUgbWF0Y2gsIGFzIGlmIGl0IHdhcyAkJlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAyNDY2Ni9nZXR0aW5nLWllLXRvLXJlcGxhY2UtYS1yZWdleC13aXRoLXRoZS1saXRlcmFsLXN0cmluZy0wXG52YXIgUkVQTEFDRV9LRUVQU18kMCA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnYScucmVwbGFjZSgvLi8sICckMCcpID09PSAnJDAnO1xufSkoKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG4vLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbi8vIFdlZXggSlMgaGFzIGZyb3plbiBidWlsdC1pbiBwcm90b3R5cGVzLCBzbyB1c2UgdHJ5IC8gY2F0Y2ggd3JhcHBlclxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCAhPT0gMiB8fCByZXN1bHRbMF0gIT09ICdhJyB8fCByZXN1bHRbMV0gIT09ICdiJztcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYywgc2hhbSkge1xuICB2YXIgU1lNQk9MID0gd2VsbEtub3duU3ltYm9sKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcblxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSk7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICEoXG4gICAgICBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyAmJlxuICAgICAgUkVQTEFDRV9LRUVQU18kMCAmJlxuICAgICAgIVJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFXG4gICAgKSkgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgbWV0aG9kcyA9IGV4ZWMoU1lNQk9MLCAnJ1tLRVldLCBmdW5jdGlvbiAobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9LCB7XG4gICAgICBSRVBMQUNFX0tFRVBTXyQwOiBSRVBMQUNFX0tFRVBTXyQwLFxuICAgICAgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkU6IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFXG4gICAgfSk7XG4gICAgdmFyIHN0cmluZ01ldGhvZCA9IG1ldGhvZHNbMF07XG4gICAgdmFyIHJlZ2V4TWV0aG9kID0gbWV0aG9kc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyaW5nTWV0aG9kKTtcbiAgICByZWRlZmluZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJlZ2V4TWV0aG9kLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcmVnZXhNZXRob2QuY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxuXG4gIGlmIChzaGFtKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwLnByb3RvdHlwZVtTWU1CT0xdLCAnc2hhbScsIHRydWUpO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9jbGFzc29mLXJhdycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cblxuICByZXR1cm4gcmVnZXhwRXhlYy5jYWxsKFIsIFMpO1xufTtcblxuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgY3Jvc3Nyb2FkcyBmcm9tICdjcm9zc3JvYWRzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzTm9uRW1wdHlBcnJheSwgbm9vcCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFNjcmVlbiB7XG5cdG9Dcm9zcyA9IG51bGw7XG5cdHNTY3JlZW5OYW1lO1xuXHRhVmlld01vZGVscztcblxuXHRjb25zdHJ1Y3RvcihzY3JlZW5OYW1lLCB2aWV3TW9kZWxzID0gW10pIHtcblx0XHR0aGlzLnNTY3JlZW5OYW1lID0gc2NyZWVuTmFtZTtcblx0XHR0aGlzLmFWaWV3TW9kZWxzID0gaXNBcnJheSh2aWV3TW9kZWxzKSA/IHZpZXdNb2RlbHMgOiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHR2aWV3TW9kZWxzKCkge1xuXHRcdHJldHVybiB0aGlzLmFWaWV3TW9kZWxzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzY3JlZW5OYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLnNTY3JlZW5OYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHs/QXJyYXkpfVxuXHQgKi9cblx0cm91dGVzKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHs/T2JqZWN0fVxuXHQgKi9cblx0X19jcm9zcygpIHtcblx0XHRyZXR1cm4gdGhpcy5vQ3Jvc3M7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRfX3N0YXJ0KCkge1xuXHRcdGxldCByb3V0ZSA9IG51bGwsXG5cdFx0XHRmTWF0Y2hlciA9IG51bGw7XG5cdFx0Y29uc3Qgcm91dGVzID0gdGhpcy5yb3V0ZXMoKTtcblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocm91dGVzKSkge1xuXHRcdFx0Zk1hdGNoZXIgPSBfLmJpbmQodGhpcy5vblJvdXRlIHx8IG5vb3AsIHRoaXMpO1xuXHRcdFx0cm91dGUgPSBjcm9zc3JvYWRzLmNyZWF0ZSgpO1xuXG5cdFx0XHRyb3V0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoaXRlbSAmJiByb3V0ZSkge1xuXHRcdFx0XHRcdHJvdXRlLmFkZFJvdXRlKGl0ZW1bMF0sIGZNYXRjaGVyKS5ydWxlcyA9IGl0ZW1bMV07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm9Dcm9zcyA9IHJvdXRlO1xuXHRcdH1cblx0fVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS90cmltXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LnNzbTsiLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIGl0ZXJhdGUgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZm4sIHRoYXQsIEFTX0VOVFJJRVMsIElTX0lURVJBVE9SKSB7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChmbiwgdGhhdCwgQVNfRU5UUklFUyA/IDIgOiAxKTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoJ1RhcmdldCBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IEFTX0VOVFJJRVNcbiAgICAgICAgICA/IGJvdW5kRnVuY3Rpb24oYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pXG4gICAgICAgICAgOiBib3VuZEZ1bmN0aW9uKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0IGluc3RhbmNlb2YgUmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpO1xuICB9XG5cbiAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBuZXh0LmNhbGwoaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgYm91bmRGdW5jdGlvbiwgc3RlcC52YWx1ZSwgQVNfRU5UUklFUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuXG5pdGVyYXRlLnN0b3AgPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIHJlc3VsdCk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhbWV0aG9kIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCxuby10aHJvdy1saXRlcmFsXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyB0aHJvdyAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5jbGFzcyBEb21haW5BZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5kb21haW5zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmRvbWFpbnMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICd0aHJvdHRsZSc6IDEwMCB9KTtcblx0XHR0aGlzLmRvbWFpbnNXaXRob3V0QWxpYXNlcyA9IGtvLmNvbXB1dGVkKCgpID0+IF8uZmlsdGVyKHRoaXMuZG9tYWlucygpLCAoaXRlbSkgPT4gaXRlbSAmJiAhaXRlbS5hbGlhcykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBEb21haW5BZG1pblN0b3JlKCk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAqL1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IGRvY3VtZW50LmRvbWFpbiAmJiBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gYWN0aXZlWERvY3VtZW50ID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKCk7XG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xuXG4vLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY2xhc3NvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNilcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5jcm9zc3JvYWRzOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0Q2hlY2tib3ggZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zID0ge31cblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudmFsdWUgPSBwYXJhbXMudmFsdWU7XG5cdFx0aWYgKGlzVW5kKHRoaXMudmFsdWUpIHx8ICF0aGlzLnZhbHVlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IGtvLm9ic2VydmFibGUoaXNVbmQodGhpcy52YWx1ZSkgPyBmYWxzZSA6ICEhdGhpcy52YWx1ZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5lbmFibGUgPSBwYXJhbXMuZW5hYmxlO1xuXHRcdGlmIChpc1VuZCh0aGlzLmVuYWJsZSkgfHwgIXRoaXMuZW5hYmxlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy5lbmFibGUgPSBrby5vYnNlcnZhYmxlKGlzVW5kKHRoaXMuZW5hYmxlKSA/IHRydWUgOiAhIXRoaXMuZW5hYmxlKTtcblx0XHR9XG5cblx0XHR0aGlzLmRpc2FibGUgPSBwYXJhbXMuZGlzYWJsZTtcblx0XHRpZiAoaXNVbmQodGhpcy5kaXNhYmxlKSB8fCAhdGhpcy5kaXNhYmxlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy5kaXNhYmxlID0ga28ub2JzZXJ2YWJsZShpc1VuZCh0aGlzLmRpc2FibGUpID8gZmFsc2UgOiAhIXRoaXMuZGlzYWJsZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5sYWJlbCA9IHBhcmFtcy5sYWJlbCB8fCAnJztcblx0XHR0aGlzLmlubGluZSA9IGlzVW5kKHBhcmFtcy5pbmxpbmUpID8gZmFsc2UgOiBwYXJhbXMuaW5saW5lO1xuXG5cdFx0dGhpcy5yZWFkT25seSA9IGlzVW5kKHBhcmFtcy5yZWFkT25seSkgPyBmYWxzZSA6ICEhcGFyYW1zLnJlYWRPbmx5O1xuXHRcdHRoaXMuaW52ZXJ0ZWQgPSBpc1VuZChwYXJhbXMuaW52ZXJ0ZWQpID8gZmFsc2UgOiAhIXBhcmFtcy5pbnZlcnRlZDtcblxuXHRcdHRoaXMubGFiZWxlZCA9ICFpc1VuZChwYXJhbXMubGFiZWwpO1xuXHRcdHRoaXMubGFiZWxBbmltYXRlZCA9ICEhcGFyYW1zLmxhYmVsQW5pbWF0ZWQ7XG5cdH1cblxuXHRjbGljaygpIHtcblx0XHRpZiAoIXRoaXMucmVhZE9ubHkgJiYgdGhpcy5lbmFibGUoKSAmJiAhdGhpcy5kaXNhYmxlKCkpIHtcblx0XHRcdHRoaXMudmFsdWUoIXRoaXMudmFsdWUoKSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0Q2hlY2tib3gsIEFic3RyYWN0Q2hlY2tib3ggYXMgZGVmYXVsdCB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBwYXJzZTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiBQYXJzZXMgc3RydWN0dXJlZCBlLW1haWwgYWRkcmVzc2VzIGZyb20gYW4gYWRkcmVzcyBmaWVsZFxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgXCJOYW1lIDxhZGRyZXNzQGRvbWFpbj5cIlxuICpcbiAqIHdpbGwgYmUgY29udmVydGVkIHRvXG4gKlxuICogICAgIFt7bmFtZTogXCJOYW1lXCIsIGFkZHJlc3M6IFwiYWRkcmVzc0Bkb21haW5cIn1dXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgYWRkcmVzcyBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICB2YXIgdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihzdHIpO1xuICB2YXIgdG9rZW5zID0gdG9rZW5pemVyLnRva2VuaXplKCk7XG5cbiAgdmFyIGFkZHJlc3NlcyA9IFtdO1xuICB2YXIgYWRkcmVzcyA9IFtdO1xuICB2YXIgcGFyc2VkQWRkcmVzc2VzID0gW107XG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicgJiYgKHRva2VuLnZhbHVlID09PSAnLCcgfHwgdG9rZW4udmFsdWUgPT09ICc7JykpIHtcbiAgICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICAgIH1cbiAgICAgIGFkZHJlc3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkcmVzcy5wdXNoKHRva2VuKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgIGFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICB9XG5cbiAgYWRkcmVzc2VzLmZvckVhY2goZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICBhZGRyZXNzID0gX2hhbmRsZUFkZHJlc3MoYWRkcmVzcyk7XG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICBwYXJzZWRBZGRyZXNzZXMgPSBwYXJzZWRBZGRyZXNzZXMuY29uY2F0KGFkZHJlc3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZEFkZHJlc3Nlcztcbn07XG5cbi8qKlxuICogQ29udmVydHMgdG9rZW5zIGZvciBhIHNpbmdsZSBhZGRyZXNzIGludG8gYW4gYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB0b2tlbnMgVG9rZW5zIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSBBZGRyZXNzIG9iamVjdFxuICovXG5mdW5jdGlvbiBfaGFuZGxlQWRkcmVzcyh0b2tlbnMpIHtcbiAgdmFyIGlzR3JvdXAgPSBmYWxzZTtcbiAgdmFyIHN0YXRlID0gJ3RleHQnO1xuICB2YXIgYWRkcmVzcyA9IHZvaWQgMDtcbiAgdmFyIGFkZHJlc3NlcyA9IFtdO1xuICB2YXIgZGF0YSA9IHtcbiAgICBhZGRyZXNzOiBbXSxcbiAgICBjb21tZW50OiBbXSxcbiAgICBncm91cDogW10sXG4gICAgdGV4dDogW11cblxuICAgIC8vIEZpbHRlciBvdXQgPGFkZHJlc3Nlcz4sIChjb21tZW50cykgYW5kIHJlZ3VsYXIgdGV4dFxuICB9O2ZvciAodmFyIGkgPSAwLCBsZW4gPSB0b2tlbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ29wZXJhdG9yJykge1xuICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBzdGF0ZSA9ICdhZGRyZXNzJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKCc6XG4gICAgICAgICAgc3RhdGUgPSAnY29tbWVudCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzonOlxuICAgICAgICAgIHN0YXRlID0gJ2dyb3VwJztcbiAgICAgICAgICBpc0dyb3VwID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzdGF0ZSA9ICd0ZXh0JztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRva2VuLnZhbHVlKSB7XG4gICAgICAgIGRhdGFbc3RhdGVdLnB1c2godG9rZW4udmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCwgcmVwbGFjZSB0aGUgdHdvXG4gIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50O1xuICAgIGRhdGEuY29tbWVudCA9IFtdO1xuICB9XG5cbiAgaWYgKGlzR3JvdXApIHtcbiAgICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI2FwcGVuZGl4LUEuMS4zXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKTtcbiAgICBhZGRyZXNzZXMucHVzaCh7XG4gICAgICBuYW1lOiBkYXRhLnRleHQgfHwgYWRkcmVzcyAmJiBhZGRyZXNzLm5hbWUsXG4gICAgICBncm91cDogZGF0YS5ncm91cC5sZW5ndGggPyBwYXJzZShkYXRhLmdyb3VwLmpvaW4oJywnKSkgOiBbXVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIG5vIGFkZHJlc3Mgd2FzIGZvdW5kLCB0cnkgdG8gZGV0ZWN0IG9uZSBmcm9tIHJlZ3VsYXIgdGV4dFxuICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCAmJiBkYXRhLnRleHQubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBfaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBfaSA+PSAwOyBfaS0tKSB7XG4gICAgICAgIGlmIChkYXRhLnRleHRbX2ldLm1hdGNoKC9eW15AXFxzXStAW15AXFxzXSskLykpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLnRleHQuc3BsaWNlKF9pLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgX3JlZ2V4SGFuZGxlciA9IGZ1bmN0aW9uIF9yZWdleEhhbmRsZXIoYWRkcmVzcykge1xuICAgICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBbYWRkcmVzcy50cmltKCldO1xuICAgICAgICAgIHJldHVybiAnICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIHN0aWxsIG5vIGFkZHJlc3NcbiAgICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKHZhciBfaTIgPSBkYXRhLnRleHQubGVuZ3RoIC0gMTsgX2kyID49IDA7IF9pMi0tKSB7XG4gICAgICAgICAgZGF0YS50ZXh0W19pMl0gPSBkYXRhLnRleHRbX2kyXS5yZXBsYWNlKC9cXHMqXFxiW15AXFxzXStAW15AXFxzXStcXGJcXHMqLywgX3JlZ2V4SGFuZGxlcikudHJpbSgpO1xuICAgICAgICAgIGlmIChkYXRhLmFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCBleGl4dHMsIHJlcGxhY2UgdGhlIHR3b1xuICAgIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgICBkYXRhLnRleHQgPSBkYXRhLmNvbW1lbnQ7XG4gICAgICBkYXRhLmNvbW1lbnQgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIG9ubHkgdGhlIGZpcnN0IGFkZHJlc3Mgb2NjdXJlbmNlLCBwdXNoIG90aGVycyB0byByZWd1bGFyIHRleHRcbiAgICBpZiAoZGF0YS5hZGRyZXNzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5jb25jYXQoZGF0YS5hZGRyZXNzLnNwbGljZSgxKSk7XG4gICAgfVxuXG4gICAgLy8gSm9pbiB2YWx1ZXMgd2l0aCBzcGFjZXNcbiAgICBkYXRhLnRleHQgPSBkYXRhLnRleHQuam9pbignICcpO1xuICAgIGRhdGEuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcy5qb2luKCcgJyk7XG5cbiAgICBpZiAoIWRhdGEuYWRkcmVzcyAmJiBpc0dyb3VwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MgPSB7XG4gICAgICAgIGFkZHJlc3M6IGRhdGEuYWRkcmVzcyB8fCBkYXRhLnRleHQgfHwgJycsXG4gICAgICAgIG5hbWU6IGRhdGEudGV4dCB8fCBkYXRhLmFkZHJlc3MgfHwgJydcbiAgICAgIH07XG5cbiAgICAgIGlmIChhZGRyZXNzLmFkZHJlc3MgPT09IGFkZHJlc3MubmFtZSkge1xuICAgICAgICBpZiAoKGFkZHJlc3MuYWRkcmVzcyB8fCAnJykubWF0Y2goL0AvKSkge1xuICAgICAgICAgIGFkZHJlc3MubmFtZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZHJlc3MuYWRkcmVzcyA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhZGRyZXNzZXM7XG59O1xuXG4vKlxuICogT3BlcmF0b3IgdG9rZW5zIGFuZCB3aGljaCB0b2tlbnMgYXJlIGV4cGVjdGVkIHRvIGVuZCB0aGUgc2VxdWVuY2VcbiAqL1xudmFyIE9QRVJBVE9SUyA9IHtcbiAgJ1wiJzogJ1wiJyxcbiAgJygnOiAnKScsXG4gICc8JzogJz4nLFxuICAnLCc6ICcnLFxuICAvLyBHcm91cHMgYXJlIGVuZGVkIGJ5IHNlbWljb2xvbnNcbiAgJzonOiAnOycsXG4gIC8vIFNlbWljb2xvbnMgYXJlIG5vdCBhIGxlZ2FsIGRlbGltaXRlciBwZXIgdGhlIFJGQzI4MjIgZ3JhbW1hciBvdGhlclxuICAvLyB0aGFuIGZvciB0ZXJtaW5hdGluZyBhIGdyb3VwLCBidXQgdGhleSBhcmUgYWxzbyBub3QgdmFsaWQgZm9yIGFueVxuICAvLyBvdGhlciB1c2UgaW4gdGhpcyBjb250ZXh0LiAgR2l2ZW4gdGhhdCBzb21lIG1haWwgY2xpZW50cyBoYXZlXG4gIC8vIGhpc3RvcmljYWxseSBhbGxvd2VkIHRoZSBzZW1pY29sb24gYXMgYSBkZWxpbWl0ZXIgZXF1aXZhbGVudCB0byB0aGVcbiAgLy8gY29tbWEgaW4gdGhlaXIgVUksIGl0IG1ha2VzIHNlbnNlIHRvIHRyZWF0IHRoZW0gdGhlIHNhbWUgYXMgYSBjb21tYVxuICAvLyB3aGVuIHVzZWQgb3V0c2lkZSBvZiBhIGdyb3VwLlxuICAnOyc6ICcnXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBUb2tlbml6ZXIgb2JqZWN0IGZvciB0b2tlbml6aW5nIGFkZHJlc3MgZmllbGQgc3RyaW5nc1xuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkIHN0cmluZ1xuICAgKi9cbn07XG52YXIgVG9rZW5pemVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUb2tlbml6ZXIoc3RyKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRva2VuaXplcik7XG5cbiAgICB0aGlzLnN0ciA9IChzdHIgfHwgJycpLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5vcGVyYXRvckN1cnJlbnQgPSAnJztcbiAgICB0aGlzLm9wZXJhdG9yRXhwZWN0aW5nID0gJyc7XG4gICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxpc3QgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2tlbml6ZXMgdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2Ygb3BlcmF0b3J8dGV4dCB0b2tlbnNcbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoVG9rZW5pemVyLCBbe1xuICAgIGtleTogJ3Rva2VuaXplJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9rZW5pemUoKSB7XG4gICAgICB2YXIgY2hyID0gdm9pZCAwO1xuICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLnN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjaHIgPSB0aGlzLnN0ci5jaGFyQXQoaSk7XG4gICAgICAgIHRoaXMuY2hlY2tDaGFyKGNocik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSAobm9kZS52YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgICAgbGlzdC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgY2hhcmFjdGVyIGlzIGFuIG9wZXJhdG9yIG9yIHRleHQgYW5kIGFjdHMgYWNjb3JkaW5nbHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjaHIgQ2hhcmFjdGVyIGZyb20gdGhlIGFkZHJlc3MgZmllbGRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY2hlY2tDaGFyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hlY2tDaGFyKGNocikge1xuICAgICAgaWYgKChjaHIgaW4gT1BFUkFUT1JTIHx8IGNociA9PT0gJ1xcXFwnKSAmJiB0aGlzLmVzY2FwZWQpIHtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgJiYgY2hyID09PSB0aGlzLm9wZXJhdG9yRXhwZWN0aW5nKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAnb3BlcmF0b3InLFxuICAgICAgICAgIHZhbHVlOiBjaHJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKTtcbiAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnO1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgaW4gT1BFUkFUT1JTKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAnb3BlcmF0b3InLFxuICAgICAgICAgIHZhbHVlOiBjaHJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKTtcbiAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9IE9QRVJBVE9SU1tjaHJdO1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZXNjYXBlZCAmJiBjaHIgPT09ICdcXFxcJykge1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5ub2RlKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVzY2FwZWQgJiYgY2hyICE9PSAnXFxcXCcpIHtcbiAgICAgICAgdGhpcy5ub2RlLnZhbHVlICs9ICdcXFxcJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub2RlLnZhbHVlICs9IGNocjtcbiAgICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb2tlbml6ZXI7XG59KCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OWhaR1J5WlhOemNHRnljMlZ5TG1weklsMHNJbTVoYldWeklqcGJJbkJoY25ObElpd2ljM1J5SWl3aWRHOXJaVzVwZW1WeUlpd2lWRzlyWlc1cGVtVnlJaXdpZEc5clpXNXpJaXdpZEc5clpXNXBlbVVpTENKaFpHUnlaWE56WlhNaUxDSmhaR1J5WlhOeklpd2ljR0Z5YzJWa1FXUmtjbVZ6YzJWeklpd2labTl5UldGamFDSXNJblJ2YTJWdUlpd2lkSGx3WlNJc0luWmhiSFZsSWl3aWJHVnVaM1JvSWl3aWNIVnphQ0lzSWw5b1lXNWtiR1ZCWkdSeVpYTnpJaXdpWTI5dVkyRjBJaXdpYVhOSGNtOTFjQ0lzSW5OMFlYUmxJaXdpWkdGMFlTSXNJbU52YlcxbGJuUWlMQ0puY205MWNDSXNJblJsZUhRaUxDSnBJaXdpYkdWdUlpd2lhbTlwYmlJc0ltNWhiV1VpTENKdFlYUmphQ0lzSW5Od2JHbGpaU0lzSWw5eVpXZGxlRWhoYm1Sc1pYSWlMQ0owY21sdElpd2ljbVZ3YkdGalpTSXNJazlRUlZKQlZFOVNVeUlzSW5SdlUzUnlhVzVuSWl3aWIzQmxjbUYwYjNKRGRYSnlaVzUwSWl3aWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jaUxDSnViMlJsSWl3aVpYTmpZWEJsWkNJc0lteHBjM1FpTENKamFISWlMQ0pqYUdGeVFYUWlMQ0pqYUdWamEwTm9ZWElpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN08ydENRV04zUWtFc1N6czdPenRCUVdSNFFqczdPenM3T3pzN096czdPenM3UVVGalpTeFRRVUZUUVN4TFFVRlVMRU5CUVdkQ1F5eEhRVUZvUWl4RlFVRnhRanRCUVVOc1F5eE5RVUZOUXl4WlFVRlpMRWxCUVVsRExGTkJRVW9zUTBGQlkwWXNSMEZCWkN4RFFVRnNRanRCUVVOQkxFMUJRVTFITEZOQlFWTkdMRlZCUVZWSExGRkJRVllzUlVGQlpqczdRVUZGUVN4TlFVRk5ReXhaUVVGWkxFVkJRV3hDTzBGQlEwRXNUVUZCU1VNc1ZVRkJWU3hGUVVGa08wRkJRMEVzVFVGQlNVTXNhMEpCUVd0Q0xFVkJRWFJDT3p0QlFVVkJTaXhUUVVGUFN5eFBRVUZRTEVOQlFXVXNWVUZCVlVNc1MwRkJWaXhGUVVGcFFqdEJRVU01UWl4UlFVRkpRU3hOUVVGTlF5eEpRVUZPTEV0QlFXVXNWVUZCWml4TFFVRTRRa1FzVFVGQlRVVXNTMEZCVGl4TFFVRm5RaXhIUVVGb1FpeEpRVUYxUWtZc1RVRkJUVVVzUzBGQlRpeExRVUZuUWl4SFFVRnlSU3hEUVVGS0xFVkJRU3RGTzBGQlF6ZEZMRlZCUVVsTUxGRkJRVkZOTEUxQlFWb3NSVUZCYjBJN1FVRkRiRUpRTEd0Q1FVRlZVU3hKUVVGV0xFTkJRV1ZRTEU5QlFXWTdRVUZEUkR0QlFVTkVRU3huUWtGQlZTeEZRVUZXTzBGQlEwUXNTMEZNUkN4TlFVdFBPMEZCUTB4QkxHTkJRVkZQTEVsQlFWSXNRMEZCWVVvc1MwRkJZanRCUVVORU8wRkJRMFlzUjBGVVJEczdRVUZYUVN4TlFVRkpTQ3hSUVVGUlRTeE5RVUZhTEVWQlFXOUNPMEZCUTJ4Q1VDeGpRVUZWVVN4SlFVRldMRU5CUVdWUUxFOUJRV1k3UVVGRFJEczdRVUZGUkVRc1dVRkJWVWNzVDBGQlZpeERRVUZyUWl4VlFVRlZSaXhQUVVGV0xFVkJRVzFDTzBGQlEyNURRU3hqUVVGVlVTeGxRVUZsVWl4UFFVRm1MRU5CUVZZN1FVRkRRU3hSUVVGSlFTeFJRVUZSVFN4TlFVRmFMRVZCUVc5Q08wRkJRMnhDVEN4M1FrRkJhMEpCTEdkQ1FVRm5RbEVzVFVGQmFFSXNRMEZCZFVKVUxFOUJRWFpDTEVOQlFXeENPMEZCUTBRN1FVRkRSaXhIUVV4RU96dEJRVTlCTEZOQlFVOURMR1ZCUVZBN1FVRkRSRHM3UVVGRlJEczdPenM3TzBGQlRVRXNVMEZCVTA4c1kwRkJWQ3hEUVVGNVFsZ3NUVUZCZWtJc1JVRkJhVU03UVVGREwwSXNUVUZCU1dFc1ZVRkJWU3hMUVVGa08wRkJRMEVzVFVGQlNVTXNVVUZCVVN4TlFVRmFPMEZCUTBFc1RVRkJTVmdzWjBKQlFVbzdRVUZEUVN4TlFVRk5SQ3haUVVGWkxFVkJRV3hDTzBGQlEwRXNUVUZCVFdFc1QwRkJUenRCUVVOWVdpeGhRVUZUTEVWQlJFVTdRVUZGV0dFc1lVRkJVeXhGUVVaRk8wRkJSMWhETEZkQlFVOHNSVUZJU1R0QlFVbFlReXhWUVVGTk96dEJRVWRTTzBGQlVHRXNSMEZCWWl4RFFWRkJMRXRCUVVzc1NVRkJTVU1zU1VGQlNTeERRVUZTTEVWQlFWZERMRTFCUVUxd1FpeFBRVUZQVXl4TlFVRTNRaXhGUVVGeFExVXNTVUZCU1VNc1IwRkJla01zUlVGQk9FTkVMRWRCUVRsRExFVkJRVzFFTzBGQlEycEVMRkZCUVUxaUxGRkJRVkZPTEU5QlFVOXRRaXhEUVVGUUxFTkJRV1E3TzBGQlJVRXNVVUZCU1dJc1RVRkJUVU1zU1VGQlRpeExRVUZsTEZWQlFXNUNMRVZCUVN0Q08wRkJRemRDTEdOQlFWRkVMRTFCUVUxRkxFdEJRV1E3UVVGRFJTeGhRVUZMTEVkQlFVdzdRVUZEUlUwc2EwSkJRVkVzVTBGQlVqdEJRVU5CTzBGQlEwWXNZVUZCU3l4SFFVRk1PMEZCUTBWQkxHdENRVUZSTEZOQlFWSTdRVUZEUVR0QlFVTkdMR0ZCUVVzc1IwRkJURHRCUVVORlFTeHJRa0ZCVVN4UFFVRlNPMEZCUTBGRUxHOUNRVUZWTEVsQlFWWTdRVUZEUVR0QlFVTkdPMEZCUTBWRExHdENRVUZSTEUxQlFWSTdRVUZhU2p0QlFXTkVMRXRCWmtRc1RVRmxUenRCUVVOTUxGVkJRVWxTTEUxQlFVMUZMRXRCUVZZc1JVRkJhVUk3UVVGRFprOHNZVUZCUzBRc1MwRkJUQ3hGUVVGWlNpeEpRVUZhTEVOQlFXbENTaXhOUVVGTlJTeExRVUYyUWp0QlFVTkVPMEZCUTBZN1FVRkRSanM3UVVGRlJEdEJRVU5CTEUxQlFVa3NRMEZCUTA4c1MwRkJTMGNzU1VGQlRDeERRVUZWVkN4TlFVRllMRWxCUVhGQ1RTeExRVUZMUXl4UFFVRk1MRU5CUVdGUUxFMUJRWFJETEVWQlFUaERPMEZCUXpWRFRTeFRRVUZMUnl4SlFVRk1MRWRCUVZsSUxFdEJRVXRETEU5QlFXcENPMEZCUTBGRUxGTkJRVXRETEU5QlFVd3NSMEZCWlN4RlFVRm1PMEZCUTBRN08wRkJSVVFzVFVGQlNVZ3NUMEZCU2l4RlFVRmhPMEZCUTFnN1FVRkRRVVVzVTBGQlMwY3NTVUZCVEN4SFFVRlpTQ3hMUVVGTFJ5eEpRVUZNTEVOQlFWVkhMRWxCUVZZc1EwRkJaU3hIUVVGbUxFTkJRVm83UVVGRFFXNUNMR05CUVZWUkxFbEJRVllzUTBGQlpUdEJRVU5pV1N4WlFVRk5VQ3hMUVVGTFJ5eEpRVUZNTEVsQlFXTm1MRmRCUVZkQkxGRkJRVkZ0UWl4SlFVUXhRanRCUVVWaVRDeGhRVUZQUml4TFFVRkxSU3hMUVVGTUxFTkJRVmRTTEUxQlFWZ3NSMEZCYjBKaUxFMUJRVTF0UWl4TFFVRkxSU3hMUVVGTUxFTkJRVmRKTEVsQlFWZ3NRMEZCWjBJc1IwRkJhRUlzUTBGQlRpeERRVUZ3UWl4SFFVRnJSRHRCUVVZMVF5eExRVUZtTzBGQlNVUXNSMEZRUkN4TlFVOVBPMEZCUTB3N1FVRkRRU3hSUVVGSkxFTkJRVU5PTEV0QlFVdGFMRTlCUVV3c1EwRkJZVTBzVFVGQlpDeEpRVUYzUWswc1MwRkJTMGNzU1VGQlRDeERRVUZWVkN4TlFVRjBReXhGUVVFNFF6dEJRVU0xUXl4WFFVRkxMRWxCUVVsVkxFdEJRVWxLTEV0QlFVdEhMRWxCUVV3c1EwRkJWVlFzVFVGQlZpeEhRVUZ0UWl4RFFVRm9ReXhGUVVGdFExVXNUVUZCU3l4RFFVRjRReXhGUVVFeVEwRXNTVUZCTTBNc1JVRkJaMFE3UVVGRE9VTXNXVUZCU1Vvc1MwRkJTMGNzU1VGQlRDeERRVUZWUXl4RlFVRldMRVZCUVdGSkxFdEJRV0lzUTBGQmJVSXNiVUpCUVc1Q0xFTkJRVW9zUlVGQk5rTTdRVUZETTBOU0xHVkJRVXRhTEU5QlFVd3NSMEZCWlZrc1MwRkJTMGNzU1VGQlRDeERRVUZWVFN4TlFVRldMRU5CUVdsQ1RDeEZRVUZxUWl4RlFVRnZRaXhEUVVGd1FpeERRVUZtTzBGQlEwRTdRVUZEUkR0QlFVTkdPenRCUVVWRUxGVkJRVWxOTEdkQ1FVRm5RaXhUUVVGb1FrRXNZVUZCWjBJc1EwRkJWWFJDTEU5QlFWWXNSVUZCYlVJN1FVRkRja01zV1VGQlNTeERRVUZEV1N4TFFVRkxXaXhQUVVGTUxFTkJRV0ZOTEUxQlFXeENMRVZCUVRCQ08wRkJRM2hDVFN4bFFVRkxXaXhQUVVGTUxFZEJRV1VzUTBGQlEwRXNVVUZCVVhWQ0xFbEJRVklzUlVGQlJDeERRVUZtTzBGQlEwRXNhVUpCUVU4c1IwRkJVRHRCUVVORUxGTkJTRVFzVFVGSFR6dEJRVU5NTEdsQ1FVRlBka0lzVDBGQlVEdEJRVU5FTzBGQlEwWXNUMEZRUkRzN1FVRlRRVHRCUVVOQkxGVkJRVWtzUTBGQlExa3NTMEZCUzFvc1QwRkJUQ3hEUVVGaFRTeE5RVUZzUWl4RlFVRXdRanRCUVVONFFpeGhRVUZMTEVsQlFVbFZMRTFCUVVsS0xFdEJRVXRITEVsQlFVd3NRMEZCVlZRc1RVRkJWaXhIUVVGdFFpeERRVUZvUXl4RlFVRnRRMVVzVDBGQlN5eERRVUY0UXl4RlFVRXlRMEVzUzBGQk0wTXNSVUZCWjBRN1FVRkRPVU5LTEdWQlFVdEhMRWxCUVV3c1EwRkJWVU1zUjBGQlZpeEpRVUZsU2l4TFFVRkxSeXhKUVVGTUxFTkJRVlZETEVkQlFWWXNSVUZCWVZFc1QwRkJZaXhEUVVGeFFpd3lRa0ZCY2tJc1JVRkJhMFJHTEdGQlFXeEVMRVZCUVdsRlF5eEpRVUZxUlN4RlFVRm1PMEZCUTBFc1kwRkJTVmdzUzBGQlMxb3NUMEZCVEN4RFFVRmhUU3hOUVVGcVFpeEZRVUY1UWp0QlFVTjJRanRCUVVORU8wRkJRMFk3UVVGRFJqdEJRVU5HT3p0QlFVVkVPMEZCUTBFc1VVRkJTU3hEUVVGRFRTeExRVUZMUnl4SlFVRk1MRU5CUVZWVUxFMUJRVmdzU1VGQmNVSk5MRXRCUVV0RExFOUJRVXdzUTBGQllWQXNUVUZCZEVNc1JVRkJPRU03UVVGRE5VTk5MRmRCUVV0SExFbEJRVXdzUjBGQldVZ3NTMEZCUzBNc1QwRkJha0k3UVVGRFFVUXNWMEZCUzBNc1QwRkJUQ3hIUVVGbExFVkJRV1k3UVVGRFJEczdRVUZGUkR0QlFVTkJMRkZCUVVsRUxFdEJRVXRhTEU5QlFVd3NRMEZCWVUwc1RVRkJZaXhIUVVGelFpeERRVUV4UWl4RlFVRTJRanRCUVVNelFrMHNWMEZCUzBjc1NVRkJUQ3hIUVVGWlNDeExRVUZMUnl4SlFVRk1MRU5CUVZWT0xFMUJRVllzUTBGQmFVSkhMRXRCUVV0YUxFOUJRVXdzUTBGQllYRkNMRTFCUVdJc1EwRkJiMElzUTBGQmNFSXNRMEZCYWtJc1EwRkJXanRCUVVORU96dEJRVVZFTzBGQlEwRlVMRk5CUVV0SExFbEJRVXdzUjBGQldVZ3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlJ5eEpRVUZXTEVOQlFXVXNSMEZCWml4RFFVRmFPMEZCUTBGT0xGTkJRVXRhTEU5QlFVd3NSMEZCWlZrc1MwRkJTMW9zVDBGQlRDeERRVUZoYTBJc1NVRkJZaXhEUVVGclFpeEhRVUZzUWl4RFFVRm1PenRCUVVWQkxGRkJRVWtzUTBGQlEwNHNTMEZCUzFvc1QwRkJUaXhKUVVGcFFsVXNUMEZCY2tJc1JVRkJPRUk3UVVGRE5VSXNZVUZCVHl4RlFVRlFPMEZCUTBRc1MwRkdSQ3hOUVVWUE8wRkJRMHhXTEdkQ1FVRlZPMEZCUTFKQkxHbENRVUZUV1N4TFFVRkxXaXhQUVVGTUxFbEJRV2RDV1N4TFFVRkxSeXhKUVVGeVFpeEpRVUUyUWl4RlFVUTVRanRCUVVWU1NTeGpRVUZOVUN4TFFVRkxSeXhKUVVGTUxFbEJRV0ZJTEV0QlFVdGFMRTlCUVd4Q0xFbEJRVFpDTzBGQlJqTkNMRTlCUVZZN08wRkJTMEVzVlVGQlNVRXNVVUZCVVVFc1QwRkJVaXhMUVVGdlFrRXNVVUZCVVcxQ0xFbEJRV2hETEVWQlFYTkRPMEZCUTNCRExGbEJRVWtzUTBGQlEyNUNMRkZCUVZGQkxFOUJRVklzU1VGQmJVSXNSVUZCY0VJc1JVRkJkMEp2UWl4TFFVRjRRaXhEUVVFNFFpeEhRVUU1UWl4RFFVRktMRVZCUVhkRE8wRkJRM1JEY0VJc2EwSkJRVkZ0UWl4SlFVRlNMRWRCUVdVc1JVRkJaanRCUVVORUxGTkJSa1FzVFVGRlR6dEJRVU5NYmtJc2EwSkJRVkZCTEU5QlFWSXNSMEZCYTBJc1JVRkJiRUk3UVVGRFJEdEJRVU5HT3p0QlFVVkVSQ3huUWtGQlZWRXNTVUZCVml4RFFVRmxVQ3hQUVVGbU8wRkJRMFE3UVVGRFJqczdRVUZGUkN4VFFVRlBSQ3hUUVVGUU8wRkJRMFE3TzBGQlJVUTdPenRCUVVkQkxFbEJRVTB3UWl4WlFVRlpPMEZCUTJoQ0xFOUJRVXNzUjBGRVZ6dEJRVVZvUWl4UFFVRkxMRWRCUmxjN1FVRkhhRUlzVDBGQlN5eEhRVWhYTzBGQlNXaENMRTlCUVVzc1JVRktWenRCUVV0b1FqdEJRVU5CTEU5QlFVc3NSMEZPVnp0QlFVOW9RanRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4UFFVRkxPenRCUVVkUU96czdPenM3UVVGb1FtdENMRU5CUVd4Q08wbEJjMEpOTjBJc1V6dEJRVU5LTEhGQ1FVRmhSaXhIUVVGaUxFVkJRV3RDTzBGQlFVRTdPMEZCUTJoQ0xGTkJRVXRCTEVkQlFVd3NSMEZCVnl4RFFVRkRRU3hQUVVGUExFVkJRVklzUlVGQldXZERMRkZCUVZvc1JVRkJXRHRCUVVOQkxGTkJRVXRETEdWQlFVd3NSMEZCZFVJc1JVRkJka0k3UVVGRFFTeFRRVUZMUXl4cFFrRkJUQ3hIUVVGNVFpeEZRVUY2UWp0QlFVTkJMRk5CUVV0RExFbEJRVXdzUjBGQldTeEpRVUZhTzBGQlEwRXNVMEZCUzBNc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFTeFRRVUZMUXl4SlFVRk1MRWRCUVZrc1JVRkJXanRCUVVORU96dEJRVVZFT3pzN096czdPenM3SzBKQlMxazdRVUZEVml4VlFVRkpReXhaUVVGS08wRkJRMEVzVlVGQlNVUXNUMEZCVHl4RlFVRllPMEZCUTBFc1YwRkJTeXhKUVVGSlppeEpRVUZKTEVOQlFWSXNSVUZCVjBNc1RVRkJUU3hMUVVGTGRrSXNSMEZCVEN4RFFVRlRXU3hOUVVFdlFpeEZRVUYxUTFVc1NVRkJTVU1zUjBGQk0wTXNSVUZCWjBSRUxFZEJRV2hFTEVWQlFYRkVPMEZCUTI1RVowSXNZMEZCVFN4TFFVRkxkRU1zUjBGQlRDeERRVUZUZFVNc1RVRkJWQ3hEUVVGblFtcENMRU5CUVdoQ0xFTkJRVTQ3UVVGRFFTeGhRVUZMYTBJc1UwRkJUQ3hEUVVGbFJpeEhRVUZtTzBGQlEwUTdPMEZCUlVRc1YwRkJTMFFzU1VGQlRDeERRVUZWTjBJc1QwRkJWaXhEUVVGclFpeFZRVUZWTWtJc1NVRkJWaXhGUVVGblFqdEJRVU5vUTBFc1lVRkJTM2hDTEV0QlFVd3NSMEZCWVN4RFFVRkRkMElzUzBGQlMzaENMRXRCUVV3c1NVRkJZeXhGUVVGbUxFVkJRVzFDY1VJc1VVRkJia0lzUjBGQk9FSklMRWxCUVRsQ0xFVkJRV0k3UVVGRFFTeFpRVUZKVFN4TFFVRkxlRUlzUzBGQlZDeEZRVUZuUWp0QlFVTmtNRUlzWlVGQlMzaENMRWxCUVV3c1EwRkJWWE5DTEVsQlFWWTdRVUZEUkR0QlFVTkdMRTlCVEVRN08wRkJUMEVzWVVGQlQwVXNTVUZCVUR0QlFVTkVPenRCUVVWRU96czdPenM3T3pzNFFrRkxWME1zUnl4RlFVRkxPMEZCUTJRc1ZVRkJTU3hEUVVGRFFTeFBRVUZQVUN4VFFVRlFMRWxCUVc5Q1R5eFJRVUZSTEVsQlFUZENMRXRCUVhORExFdEJRVXRHTEU5QlFTOURMRVZCUVhkRU8wRkJRM1JFTEdGQlFVdEJMRTlCUVV3c1IwRkJaU3hMUVVGbU8wRkJRMFFzVDBGR1JDeE5RVVZQTEVsQlFVa3NTMEZCUzBZc2FVSkJRVXdzU1VGQk1FSkpMRkZCUVZFc1MwRkJTMG9zYVVKQlFUTkRMRVZCUVRoRU8wRkJRMjVGTEdGQlFVdERMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1ZVRkVTVHRCUVVWV1F5eHBRa0ZCVHpKQ08wRkJSa2NzVTBGQldqdEJRVWxCTEdGQlFVdEVMRWxCUVV3c1EwRkJWWGhDTEVsQlFWWXNRMEZCWlN4TFFVRkxjMElzU1VGQmNFSTdRVUZEUVN4aFFVRkxRU3hKUVVGTUxFZEJRVmtzU1VGQldqdEJRVU5CTEdGQlFVdEVMR2xDUVVGTUxFZEJRWGxDTEVWQlFYcENPMEZCUTBFc1lVRkJTMFVzVDBGQlRDeEhRVUZsTEV0QlFXWTdRVUZEUVR0QlFVTkVMRTlCVmswc1RVRlZRU3hKUVVGSkxFTkJRVU1zUzBGQlMwWXNhVUpCUVU0c1NVRkJNa0pKTEU5QlFVOVFMRk5CUVhSRExFVkJRV2xFTzBGQlEzUkVMR0ZCUVV0SkxFbEJRVXdzUjBGQldUdEJRVU5XZWtJc1owSkJRVTBzVlVGRVNUdEJRVVZXUXl4cFFrRkJUekpDTzBGQlJrY3NVMEZCV2p0QlFVbEJMR0ZCUVV0RUxFbEJRVXdzUTBGQlZYaENMRWxCUVZZc1EwRkJaU3hMUVVGTGMwSXNTVUZCY0VJN1FVRkRRU3hoUVVGTFFTeEpRVUZNTEVkQlFWa3NTVUZCV2p0QlFVTkJMR0ZCUVV0RUxHbENRVUZNTEVkQlFYbENTQ3hWUVVGVlR5eEhRVUZXTEVOQlFYcENPMEZCUTBFc1lVRkJTMFlzVDBGQlRDeEhRVUZsTEV0QlFXWTdRVUZEUVR0QlFVTkVPenRCUVVWRUxGVkJRVWtzUTBGQlF5eExRVUZMUVN4UFFVRk9MRWxCUVdsQ1JTeFJRVUZSTEVsQlFUZENMRVZCUVcxRE8wRkJRMnBETEdGQlFVdEdMRTlCUVV3c1IwRkJaU3hKUVVGbU8wRkJRMEU3UVVGRFJEczdRVUZGUkN4VlFVRkpMRU5CUVVNc1MwRkJTMFFzU1VGQlZpeEZRVUZuUWp0QlFVTmtMR0ZCUVV0QkxFbEJRVXdzUjBGQldUdEJRVU5XZWtJc1owSkJRVTBzVFVGRVNUdEJRVVZXUXl4cFFrRkJUenRCUVVaSExGTkJRVm83UVVGSlFTeGhRVUZMTUVJc1NVRkJUQ3hEUVVGVmVFSXNTVUZCVml4RFFVRmxMRXRCUVV0elFpeEpRVUZ3UWp0QlFVTkVPenRCUVVWRUxGVkJRVWtzUzBGQlMwTXNUMEZCVEN4SlFVRm5Ra1VzVVVGQlVTeEpRVUUxUWl4RlFVRnJRenRCUVVOb1F5eGhRVUZMU0N4SlFVRk1MRU5CUVZWNFFpeExRVUZXTEVsQlFXMUNMRWxCUVc1Q08wRkJRMFE3TzBGQlJVUXNWMEZCUzNkQ0xFbEJRVXdzUTBGQlZYaENMRXRCUVZZc1NVRkJiVUl5UWl4SFFVRnVRanRCUVVOQkxGZEJRVXRHTEU5QlFVd3NSMEZCWlN4TFFVRm1PMEZCUTBRaUxDSm1hV3hsSWpvaVlXUmtjbVZ6YzNCaGNuTmxjaTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1VHRnljMlZ6SUhOMGNuVmpkSFZ5WldRZ1pTMXRZV2xzSUdGa1pISmxjM05sY3lCbWNtOXRJR0Z1SUdGa1pISmxjM01nWm1sbGJHUmNiaUFxWEc0Z0tpQkZlR0Z0Y0d4bE9seHVJQ3BjYmlBcUlDQWdJRndpVG1GdFpTQThZV1JrY21WemMwQmtiMjFoYVc0K1hDSmNiaUFxWEc0Z0tpQjNhV3hzSUdKbElHTnZiblpsY25SbFpDQjBiMXh1SUNwY2JpQXFJQ0FnSUNCYmUyNWhiV1U2SUZ3aVRtRnRaVndpTENCaFpHUnlaWE56T2lCY0ltRmtaSEpsYzNOQVpHOXRZV2x1WENKOVhWeHVJQ3BjYmlBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCemRISWdRV1JrY21WemN5Qm1hV1ZzWkZ4dUlDb2dRSEpsZEhWeWJpQjdRWEp5WVhsOUlFRnVJR0Z5Y21GNUlHOW1JR0ZrWkhKbGMzTWdiMkpxWldOMGMxeHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JtZFc1amRHbHZiaUJ3WVhKelpTQW9jM1J5S1NCN1hHNGdJR052Ym5OMElIUnZhMlZ1YVhwbGNpQTlJRzVsZHlCVWIydGxibWw2WlhJb2MzUnlLVnh1SUNCamIyNXpkQ0IwYjJ0bGJuTWdQU0IwYjJ0bGJtbDZaWEl1ZEc5clpXNXBlbVVvS1Z4dVhHNGdJR052Ym5OMElHRmtaSEpsYzNObGN5QTlJRnRkWEc0Z0lHeGxkQ0JoWkdSeVpYTnpJRDBnVzExY2JpQWdiR1YwSUhCaGNuTmxaRUZrWkhKbGMzTmxjeUE5SUZ0ZFhHNWNiaUFnZEc5clpXNXpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNGdLSFJ2YTJWdUtTQjdYRzRnSUNBZ2FXWWdLSFJ2YTJWdUxuUjVjR1VnUFQwOUlDZHZjR1Z5WVhSdmNpY2dKaVlnS0hSdmEyVnVMblpoYkhWbElEMDlQU0FuTENjZ2ZId2dkRzlyWlc0dWRtRnNkV1VnUFQwOUlDYzdKeWtwSUh0Y2JpQWdJQ0FnSUdsbUlDaGhaR1J5WlhOekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQmhaR1J5WlhOelpYTXVjSFZ6YUNoaFpHUnlaWE56S1Z4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWVdSa2NtVnpjeUE5SUZ0ZFhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR0ZrWkhKbGMzTXVjSFZ6YUNoMGIydGxiaWxjYmlBZ0lDQjlYRzRnSUgwcFhHNWNiaUFnYVdZZ0tHRmtaSEpsYzNNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnWVdSa2NtVnpjMlZ6TG5CMWMyZ29ZV1JrY21WemN5bGNiaUFnZlZ4dVhHNGdJR0ZrWkhKbGMzTmxjeTVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2hoWkdSeVpYTnpLU0I3WEc0Z0lDQWdZV1JrY21WemN5QTlJRjlvWVc1a2JHVkJaR1J5WlhOektHRmtaSEpsYzNNcFhHNGdJQ0FnYVdZZ0tHRmtaSEpsYzNNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCd1lYSnpaV1JCWkdSeVpYTnpaWE1nUFNCd1lYSnpaV1JCWkdSeVpYTnpaWE11WTI5dVkyRjBLR0ZrWkhKbGMzTXBYRzRnSUNBZ2ZWeHVJQ0I5S1Z4dVhHNGdJSEpsZEhWeWJpQndZWEp6WldSQlpHUnlaWE56WlhOY2JuMDdYRzVjYmk4cUtseHVJQ29nUTI5dWRtVnlkSE1nZEc5clpXNXpJR1p2Y2lCaElITnBibWRzWlNCaFpHUnlaWE56SUdsdWRHOGdZVzRnWVdSa2NtVnpjeUJ2WW1wbFkzUmNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1ZlNCMGIydGxibk1nVkc5clpXNXpJRzlpYW1WamRGeHVJQ29nUUhKbGRIVnliaUI3VDJKcVpXTjBmU0JCWkdSeVpYTnpJRzlpYW1WamRGeHVJQ292WEc1bWRXNWpkR2x2YmlCZmFHRnVaR3hsUVdSa2NtVnpjeUFvZEc5clpXNXpLU0I3WEc0Z0lHeGxkQ0JwYzBkeWIzVndJRDBnWm1Gc2MyVmNiaUFnYkdWMElITjBZWFJsSUQwZ0ozUmxlSFFuWEc0Z0lHeGxkQ0JoWkdSeVpYTnpYRzRnSUdOdmJuTjBJR0ZrWkhKbGMzTmxjeUE5SUZ0ZFhHNGdJR052Ym5OMElHUmhkR0VnUFNCN1hHNGdJQ0FnWVdSa2NtVnpjem9nVzEwc1hHNGdJQ0FnWTI5dGJXVnVkRG9nVzEwc1hHNGdJQ0FnWjNKdmRYQTZJRnRkTEZ4dUlDQWdJSFJsZUhRNklGdGRYRzRnSUgxY2JseHVJQ0F2THlCR2FXeDBaWElnYjNWMElEeGhaR1J5WlhOelpYTStMQ0FvWTI5dGJXVnVkSE1wSUdGdVpDQnlaV2QxYkdGeUlIUmxlSFJjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREFzSUd4bGJpQTlJSFJ2YTJWdWN5NXNaVzVuZEdnN0lHa2dQQ0JzWlc0N0lHa3JLeWtnZTF4dUlDQWdJR052Ym5OMElIUnZhMlZ1SUQwZ2RHOXJaVzV6VzJsZFhHNWNiaUFnSUNCcFppQW9kRzlyWlc0dWRIbHdaU0E5UFQwZ0oyOXdaWEpoZEc5eUp5a2dlMXh1SUNBZ0lDQWdjM2RwZEdOb0lDaDBiMnRsYmk1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCallYTmxJQ2M4SnpwY2JpQWdJQ0FnSUNBZ0lDQnpkR0YwWlNBOUlDZGhaR1J5WlhOekoxeHVJQ0FnSUNBZ0lDQWdJR0p5WldGclhHNGdJQ0FnSUNBZ0lHTmhjMlVnSnlnbk9seHVJQ0FnSUNBZ0lDQWdJSE4wWVhSbElEMGdKMk52YlcxbGJuUW5YRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbk9pYzZYRzRnSUNBZ0lDQWdJQ0FnYzNSaGRHVWdQU0FuWjNKdmRYQW5YRzRnSUNBZ0lDQWdJQ0FnYVhOSGNtOTFjQ0E5SUhSeWRXVmNiaUFnSUNBZ0lDQWdJQ0JpY21WaGExeHVJQ0FnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQWdJSE4wWVhSbElEMGdKM1JsZUhRblhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR2xtSUNoMGIydGxiaTUyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0JrWVhSaFczTjBZWFJsWFM1d2RYTm9LSFJ2YTJWdUxuWmhiSFZsS1Z4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4dklFbG1JSFJvWlhKbElHbHpJRzV2SUhSbGVIUWdZblYwSUdFZ1kyOXRiV1Z1ZEN3Z2NtVndiR0ZqWlNCMGFHVWdkSGR2WEc0Z0lHbG1JQ2doWkdGMFlTNTBaWGgwTG14bGJtZDBhQ0FtSmlCa1lYUmhMbU52YlcxbGJuUXViR1Z1WjNSb0tTQjdYRzRnSUNBZ1pHRjBZUzUwWlhoMElEMGdaR0YwWVM1amIyMXRaVzUwWEc0Z0lDQWdaR0YwWVM1amIyMXRaVzUwSUQwZ1cxMWNiaUFnZlZ4dVhHNGdJR2xtSUNocGMwZHliM1Z3S1NCN1hHNGdJQ0FnTHk4Z2FIUjBjRG92TDNSdmIyeHpMbWxsZEdZdWIzSm5MMmgwYld3dmNtWmpNamd5TWlOaGNIQmxibVJwZUMxQkxqRXVNMXh1SUNBZ0lHUmhkR0V1ZEdWNGRDQTlJR1JoZEdFdWRHVjRkQzVxYjJsdUtDY2dKeWxjYmlBZ0lDQmhaR1J5WlhOelpYTXVjSFZ6YUNoN1hHNGdJQ0FnSUNCdVlXMWxPaUJrWVhSaExuUmxlSFFnZkh3Z0tHRmtaSEpsYzNNZ0ppWWdZV1JrY21WemN5NXVZVzFsS1N4Y2JpQWdJQ0FnSUdkeWIzVndPaUJrWVhSaExtZHliM1Z3TG14bGJtZDBhQ0EvSUhCaGNuTmxLR1JoZEdFdVozSnZkWEF1YW05cGJpZ25MQ2NwS1NBNklGdGRYRzRnSUNBZ2ZTbGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQXZMeUJKWmlCdWJ5QmhaR1J5WlhOeklIZGhjeUJtYjNWdVpDd2dkSEo1SUhSdklHUmxkR1ZqZENCdmJtVWdabkp2YlNCeVpXZDFiR0Z5SUhSbGVIUmNiaUFnSUNCcFppQW9JV1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dnSmlZZ1pHRjBZUzUwWlhoMExteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJR1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pHRjBZUzUwWlhoMFcybGRMbTFoZEdOb0tDOWVXMTVBWEZ4elhTdEFXMTVBWEZ4elhTc2tMeWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmtZWFJoTG1Ga1pISmxjM01nUFNCa1lYUmhMblJsZUhRdWMzQnNhV05sS0drc0lERXBYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ1gzSmxaMlY0U0dGdVpHeGxjaUE5SUdaMWJtTjBhVzl1SUNoaFpHUnlaWE56S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doWkdGMFlTNWhaR1J5WlhOekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1JoZEdFdVlXUmtjbVZ6Y3lBOUlGdGhaR1J5WlhOekxuUnlhVzBvS1YxY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5QW5YRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0ZrWkhKbGMzTmNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0F2THlCemRHbHNiQ0J1YnlCaFpHUnlaWE56WEc0Z0lDQWdJQ0JwWmlBb0lXUmhkR0V1WVdSa2NtVnpjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlHUmhkR0V1ZEdWNGRDNXNaVzVuZEdnZ0xTQXhPeUJwSUQ0OUlEQTdJR2t0TFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1JoZEdFdWRHVjRkRnRwWFNBOUlHUmhkR0V1ZEdWNGRGdHBYUzV5WlhCc1lXTmxLQzljWEhNcVhGeGlXMTVBWEZ4elhTdEFXMTVBWEZ4elhTdGNYR0pjWEhNcUx5d2dYM0psWjJWNFNHRnVaR3hsY2lrdWRISnBiU2dwWEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0p5WldGclhHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnU1dZZ2RHaGxjbVVuY3lCemRHbHNiQ0JwY3lCdWJ5QjBaWGgwSUdKMWRDQmhJR052YlcxbGJuUWdaWGhwZUhSekxDQnlaWEJzWVdObElIUm9aU0IwZDI5Y2JpQWdJQ0JwWmlBb0lXUmhkR0V1ZEdWNGRDNXNaVzVuZEdnZ0ppWWdaR0YwWVM1amIyMXRaVzUwTG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzVqYjIxdFpXNTBYRzRnSUNBZ0lDQmtZWFJoTG1OdmJXMWxiblFnUFNCYlhWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFdGxaWEFnYjI1c2VTQjBhR1VnWm1seWMzUWdZV1JrY21WemN5QnZZMk4xY21WdVkyVXNJSEIxYzJnZ2IzUm9aWEp6SUhSdklISmxaM1ZzWVhJZ2RHVjRkRnh1SUNBZ0lHbG1JQ2hrWVhSaExtRmtaSEpsYzNNdWJHVnVaM1JvSUQ0Z01Ta2dlMXh1SUNBZ0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNTBaWGgwTG1OdmJtTmhkQ2hrWVhSaExtRmtaSEpsYzNNdWMzQnNhV05sS0RFcEtWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFcHZhVzRnZG1Gc2RXVnpJSGRwZEdnZ2MzQmhZMlZ6WEc0Z0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNTBaWGgwTG1wdmFXNG9KeUFuS1Z4dUlDQWdJR1JoZEdFdVlXUmtjbVZ6Y3lBOUlHUmhkR0V1WVdSa2NtVnpjeTVxYjJsdUtDY2dKeWxjYmx4dUlDQWdJR2xtSUNnaFpHRjBZUzVoWkdSeVpYTnpJQ1ltSUdselIzSnZkWEFwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJiWFZ4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmhaR1J5WlhOeklEMGdlMXh1SUNBZ0lDQWdJQ0JoWkdSeVpYTnpPaUJrWVhSaExtRmtaSEpsYzNNZ2ZId2daR0YwWVM1MFpYaDBJSHg4SUNjbkxGeHVJQ0FnSUNBZ0lDQnVZVzFsT2lCa1lYUmhMblJsZUhRZ2ZId2daR0YwWVM1aFpHUnlaWE56SUh4OElDY25YRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR2xtSUNoaFpHUnlaWE56TG1Ga1pISmxjM01nUFQwOUlHRmtaSEpsYzNNdWJtRnRaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9LR0ZrWkhKbGMzTXVZV1JrY21WemN5QjhmQ0FuSnlrdWJXRjBZMmdvTDBBdktTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdGa1pISmxjM011Ym1GdFpTQTlJQ2NuWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lXUmtjbVZ6Y3k1aFpHUnlaWE56SUQwZ0p5ZGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaGhaR1J5WlhOektWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCaFpHUnlaWE56WlhOY2JuMDdYRzVjYmk4cVhHNGdLaUJQY0dWeVlYUnZjaUIwYjJ0bGJuTWdZVzVrSUhkb2FXTm9JSFJ2YTJWdWN5QmhjbVVnWlhod1pXTjBaV1FnZEc4Z1pXNWtJSFJvWlNCelpYRjFaVzVqWlZ4dUlDb3ZYRzVqYjI1emRDQlBVRVZTUVZSUFVsTWdQU0I3WEc0Z0lDZGNJaWM2SUNkY0lpY3NYRzRnSUNjb0p6b2dKeWtuTEZ4dUlDQW5QQ2M2SUNjK0p5eGNiaUFnSnl3bk9pQW5KeXhjYmlBZ0x5OGdSM0p2ZFhCeklHRnlaU0JsYm1SbFpDQmllU0J6WlcxcFkyOXNiMjV6WEc0Z0lDYzZKem9nSnpzbkxGeHVJQ0F2THlCVFpXMXBZMjlzYjI1eklHRnlaU0J1YjNRZ1lTQnNaV2RoYkNCa1pXeHBiV2wwWlhJZ2NHVnlJSFJvWlNCU1JrTXlPREl5SUdkeVlXMXRZWElnYjNSb1pYSmNiaUFnTHk4Z2RHaGhiaUJtYjNJZ2RHVnliV2x1WVhScGJtY2dZU0JuY205MWNDd2dZblYwSUhSb1pYa2dZWEpsSUdGc2MyOGdibTkwSUhaaGJHbGtJR1p2Y2lCaGJubGNiaUFnTHk4Z2IzUm9aWElnZFhObElHbHVJSFJvYVhNZ1kyOXVkR1Y0ZEM0Z0lFZHBkbVZ1SUhSb1lYUWdjMjl0WlNCdFlXbHNJR05zYVdWdWRITWdhR0YyWlZ4dUlDQXZMeUJvYVhOMGIzSnBZMkZzYkhrZ1lXeHNiM2RsWkNCMGFHVWdjMlZ0YVdOdmJHOXVJR0Z6SUdFZ1pHVnNhVzFwZEdWeUlHVnhkV2wyWVd4bGJuUWdkRzhnZEdobFhHNGdJQzh2SUdOdmJXMWhJR2x1SUhSb1pXbHlJRlZKTENCcGRDQnRZV3RsY3lCelpXNXpaU0IwYnlCMGNtVmhkQ0IwYUdWdElIUm9aU0J6WVcxbElHRnpJR0VnWTI5dGJXRmNiaUFnTHk4Z2QyaGxiaUIxYzJWa0lHOTFkSE5wWkdVZ2IyWWdZU0JuY205MWNDNWNiaUFnSnpzbk9pQW5KMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQlViMnRsYm1sNlpYSWdiMkpxWldOMElHWnZjaUIwYjJ0bGJtbDZhVzVuSUdGa1pISmxjM01nWm1sbGJHUWdjM1J5YVc1bmMxeHVJQ3BjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvZ1FIQmhjbUZ0SUh0VGRISnBibWQ5SUhOMGNpQkJaR1J5WlhOeklHWnBaV3hrSUhOMGNtbHVaMXh1SUNvdlhHNWpiR0Z6Y3lCVWIydGxibWw2WlhJZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2lBb2MzUnlLU0I3WEc0Z0lDQWdkR2hwY3k1emRISWdQU0FvYzNSeUlIeDhJQ2NuS1M1MGIxTjBjbWx1WnlncFhHNGdJQ0FnZEdocGN5NXZjR1Z5WVhSdmNrTjFjbkpsYm5RZ1BTQW5KMXh1SUNBZ0lIUm9hWE11YjNCbGNtRjBiM0pGZUhCbFkzUnBibWNnUFNBbkoxeHVJQ0FnSUhSb2FYTXVibTlrWlNBOUlHNTFiR3hjYmlBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCbVlXeHpaVnh1SUNBZ0lIUm9hWE11YkdsemRDQTlJRnRkWEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1ZHOXJaVzVwZW1WeklIUm9aU0J2Y21sbmFXNWhiQ0JwYm5CMWRDQnpkSEpwYm1kY2JpQWdJQ3BjYmlBZ0lDb2dRSEpsZEhWeWJpQjdRWEp5WVhsOUlFRnVJR0Z5Y21GNUlHOW1JRzl3WlhKaGRHOXlmSFJsZUhRZ2RHOXJaVzV6WEc0Z0lDQXFMMXh1SUNCMGIydGxibWw2WlNBb0tTQjdYRzRnSUNBZ2JHVjBJR05vY2x4dUlDQWdJR3hsZENCc2FYTjBJRDBnVzExY2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Dd2diR1Z1SUQwZ2RHaHBjeTV6ZEhJdWJHVnVaM1JvT3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJR05vY2lBOUlIUm9hWE11YzNSeUxtTm9ZWEpCZENocEtWeHVJQ0FnSUNBZ2RHaHBjeTVqYUdWamEwTm9ZWElvWTJoeUtWeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXViR2x6ZEM1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNodWIyUmxLU0I3WEc0Z0lDQWdJQ0J1YjJSbExuWmhiSFZsSUQwZ0tHNXZaR1V1ZG1Gc2RXVWdmSHdnSnljcExuUnZVM1J5YVc1bktDa3VkSEpwYlNncFhHNGdJQ0FnSUNCcFppQW9ibTlrWlM1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCc2FYTjBMbkIxYzJnb2JtOWtaU2xjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlLVnh1WEc0Z0lDQWdjbVYwZFhKdUlHeHBjM1JjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGFHVmphM01nYVdZZ1lTQmphR0Z5WVdOMFpYSWdhWE1nWVc0Z2IzQmxjbUYwYjNJZ2IzSWdkR1Y0ZENCaGJtUWdZV04wY3lCaFkyTnZjbVJwYm1kc2VWeHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMU4wY21sdVozMGdZMmh5SUVOb1lYSmhZM1JsY2lCbWNtOXRJSFJvWlNCaFpHUnlaWE56SUdacFpXeGtYRzRnSUNBcUwxeHVJQ0JqYUdWamEwTm9ZWElnS0dOb2Npa2dlMXh1SUNBZ0lHbG1JQ2dvWTJoeUlHbHVJRTlRUlZKQlZFOVNVeUI4ZkNCamFISWdQVDA5SUNkY1hGeGNKeWtnSmlZZ2RHaHBjeTVsYzJOaGNHVmtLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQm1ZV3h6WlZ4dUlDQWdJSDBnWld4elpTQnBaaUFvZEdocGN5NXZjR1Z5WVhSdmNrVjRjR1ZqZEdsdVp5QW1KaUJqYUhJZ1BUMDlJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jcElIdGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTQTlJSHRjYmlBZ0lDQWdJQ0FnZEhsd1pUb2dKMjl3WlhKaGRHOXlKeXhjYmlBZ0lDQWdJQ0FnZG1Gc2RXVTZJR05vY2x4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NXNhWE4wTG5CMWMyZ29kR2hwY3k1dWIyUmxLVnh1SUNBZ0lDQWdkR2hwY3k1dWIyUmxJRDBnYm5Wc2JGeHVJQ0FnSUNBZ2RHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUE5SUNjblhHNGdJQ0FnSUNCMGFHbHpMbVZ6WTJGd1pXUWdQU0JtWVd4elpWeHVJQ0FnSUNBZ2NtVjBkWEp1WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2doZEdocGN5NXZjR1Z5WVhSdmNrVjRjR1ZqZEdsdVp5QW1KaUJqYUhJZ2FXNGdUMUJGVWtGVVQxSlRLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtNXZaR1VnUFNCN1hHNGdJQ0FnSUNBZ0lIUjVjR1U2SUNkdmNHVnlZWFJ2Y2ljc1hHNGdJQ0FnSUNBZ0lIWmhiSFZsT2lCamFISmNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIUm9hWE11YkdsemRDNXdkWE5vS0hSb2FYTXVibTlrWlNsY2JpQWdJQ0FnSUhSb2FYTXVibTlrWlNBOUlHNTFiR3hjYmlBZ0lDQWdJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jZ1BTQlBVRVZTUVZSUFVsTmJZMmh5WFZ4dUlDQWdJQ0FnZEdocGN5NWxjMk5oY0dWa0lEMGdabUZzYzJWY2JpQWdJQ0FnSUhKbGRIVnlibHh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doZEdocGN5NWxjMk5oY0dWa0lDWW1JR05vY2lBOVBUMGdKMXhjWEZ3bktTQjdYRzRnSUNBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCMGNuVmxYRzRnSUNBZ0lDQnlaWFIxY201Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb0lYUm9hWE11Ym05a1pTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1dWIyUmxJRDBnZTF4dUlDQWdJQ0FnSUNCMGVYQmxPaUFuZEdWNGRDY3NYRzRnSUNBZ0lDQWdJSFpoYkhWbE9pQW5KMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkR2hwY3k1c2FYTjBMbkIxYzJnb2RHaHBjeTV1YjJSbEtWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1WelkyRndaV1FnSmlZZ1kyaHlJQ0U5UFNBblhGeGNYQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVibTlrWlM1MllXeDFaU0FyUFNBblhGeGNYQ2RjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG01dlpHVXVkbUZzZFdVZ0t6MGdZMmh5WEc0Z0lDQWdkR2hwY3k1bGMyTmhjR1ZrSUQwZ1ptRnNjMlZjYmlBZ2ZWeHVmVnh1SWwxOSIsIid1c2Ugc3RyaWN0JztcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICFuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsInZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxuaWYgKEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbmlmICghSVNfUFVSRSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpIHtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgYXJyYXlQdXNoID0gW10ucHVzaDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBNQVhfVUlOVDMyID0gMHhGRkZGRkZGRjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChTUExJVCwgbmF0aXZlU3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJy5zcGxpdCgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0Jy5zcGxpdCgvKD86KS8sIC0xKS5sZW5ndGggIT0gNCB8fFxuICAgICdhYicuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT0gMiB8fFxuICAgICcuJy5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGggIT0gNCB8fFxuICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDEgfHxcbiAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGhcbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHJldHVybiBbc3RyaW5nXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbSk7XG4gICAgICB9XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHkubGFzdEluZGV4O1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkgYXJyYXlQdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW0pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHkubGFzdEluZGV4Kys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXQubGVuZ3RoID4gbGltID8gb3V0cHV0LnNsaWNlKDAsIGxpbSkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJy5zcGxpdCh1bmRlZmluZWQsIDApLmxlbmd0aCkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiBuYXRpdmVTcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSBpbnRlcm5hbFNwbGl0ID0gbmF0aXZlU3BsaXQ7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09IG5hdGl2ZVNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0sICFTVVBQT1JUU19ZKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5saW5rYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubGlua1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2xpbmsnKSB9LCB7XG4gIGxpbms6IGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXModGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCJ2YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgIVN5bWJvbC5zaGFtXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBjb2RlUG9pbnRBdCwgYXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HID8gUy5jaGFyQXQocG9zaXRpb24pIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklORyA/IFMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMikgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCAnICsgKG5hbWUgPyBuYW1lICsgJyAnIDogJycpICsgJ2ludm9jYXRpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHZhciByZXR1cm5NZXRob2QgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldHVybk1ldGhvZCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXR1cm5NZXRob2QuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbi8vIE5vZGUuanMgMTEgc2hvd3MgRXhwZXJpbWVudGFsV2FybmluZyBvbiBnZXR0aW5nIGBxdWV1ZU1pY3JvdGFza2BcbnZhciBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAncXVldWVNaWNyb3Rhc2snKTtcbnZhciBxdWV1ZU1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG5cbnZhciBmbHVzaCwgaGVhZCwgbGFzdCwgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIXF1ZXVlTWljcm90YXNrKSB7XG4gIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE11dGF0aW9uT2JzZXJ2ZXIgJiYgIUlTX0lPUykge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgdGhlbiA9IHByb21pc2UudGhlbjtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuLmNhbGwocHJvbWlzZSwgZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVldWVNaWNyb3Rhc2sgfHwgZnVuY3Rpb24gKGZuKSB7XG4gIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYgKCFoZWFkKSB7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgY29uc29sZSA9IGdsb2JhbC5jb25zb2xlO1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgMSwgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBtYXRjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gbWF0Y2hlciAhPT0gdW5kZWZpbmVkID8gbWF0Y2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuXG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuXG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIHNwbGl0ID0gJycuc3BsaXQ7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIFBSRUZFUlJFRF9TVFJJTkcpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGlucHV0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgVG9JbnRlZ2VyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBzZXRHbG9iYWwoU0hBUkVELCB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4xLjMnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDaGVja2JveCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94JztcblxuY2xhc3MgQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihDaGVja2JveENvbXBvbmVudCwgJ0NoZWNrYm94Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IHsgaHRtbEVkaXRvckRlZmF1bHRDb25maWcsIGh0bWxFZGl0b3JMYW5nc01hcCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IEV2ZW50S2V5Q29kZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBIdG1sRWRpdG9yIHtcblx0ZWRpdG9yO1xuXHRibHVyVGltZXIgPSAwO1xuXG5cdF9fcmVzaXphYmxlID0gZmFsc2U7XG5cdF9faW5pdGVkID0gZmFsc2U7XG5cblx0b25CbHVyID0gbnVsbDtcblx0b25SZWFkeSA9IG51bGw7XG5cdG9uTW9kZUNoYW5nZSA9IG51bGw7XG5cblx0ZWxlbWVudDtcblx0JGVsZW1lbnQ7XG5cblx0cmVzaXplO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25CbHVyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlYWR5XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk1vZGVDaGFuZ2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9uQmx1ciA9IG51bGwsIG9uUmVhZHkgPSBudWxsLCBvbk1vZGVDaGFuZ2UgPSBudWxsKSB7XG5cdFx0dGhpcy5vbkJsdXIgPSBvbkJsdXI7XG5cdFx0dGhpcy5vblJlYWR5ID0gb25SZWFkeTtcblx0XHR0aGlzLm9uTW9kZUNoYW5nZSA9IG9uTW9kZUNoYW5nZTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cdFx0dGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7XG5cblx0XHR0aGlzLnJlc2l6ZSA9IF8udGhyb3R0bGUoXy5iaW5kKHRoaXMucmVzaXplRWRpdG9yLCB0aGlzKSwgMTAwKTtcblxuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cblx0cnVuT25CbHVyKCkge1xuXHRcdGlmICh0aGlzLm9uQmx1cikge1xuXHRcdFx0dGhpcy5vbkJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHRibHVyVHJpZ2dlcigpIHtcblx0XHRpZiAodGhpcy5vbkJsdXIpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpO1xuXHRcdFx0dGhpcy5ibHVyVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVuT25CbHVyKCk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTIwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRmb2N1c1RyaWdnZXIoKSB7XG5cdFx0aWYgKHRoaXMub25CbHVyKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0h0bWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdG9yID8gJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhckNhY2hlZFNpZ25hdHVyZSgpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCdpbnNlcnRTaWduYXR1cmUnLCB7XG5cdFx0XHRcdGNsZWFyQ2FjaGU6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlXG5cdCAqIEBwYXJhbSB7Ym9vbH0gaHRtbFxuXHQgKiBAcGFyYW0ge2Jvb2x9IGluc2VydEJlZm9yZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNldFNpZ25hdHVyZShzaWduYXR1cmUsIGh0bWwsIGluc2VydEJlZm9yZSA9IGZhbHNlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnaW5zZXJ0U2lnbmF0dXJlJywge1xuXHRcdFx0XHRpc0h0bWw6IGh0bWwsXG5cdFx0XHRcdGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuXHRcdFx0XHRzaWduYXR1cmU6IHNpZ25hdHVyZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y2hlY2tEaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0b3IgPyB0aGlzLmVkaXRvci5jaGVja0RpcnR5KCkgOiBmYWxzZTtcblx0fVxuXG5cdHJlc2V0RGlydHkoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5yZXNldERpcnR5KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBJc0h0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0RGF0YSh3cmFwSXNIdG1sID0gZmFsc2UpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSAmJiB0aGlzLmVkaXRvci5wbHVnaW5zLnBsYWluICYmIHRoaXMuZWRpdG9yLl9fcGxhaW4pIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLmVkaXRvci5fX3BsYWluLmdldFJhd0RhdGEoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB3cmFwSXNIdG1sXG5cdFx0XHRcdFx0XHQ/ICc8ZGl2IGRhdGEtaHRtbC1lZGl0b3ItZm9udC13cmFwcGVyPVwidHJ1ZVwiIHN0eWxlPVwiZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzcHg7XCI+JyArXG5cdFx0XHRcdFx0XHQgIHRoaXMuZWRpdG9yLmdldERhdGEoKSArXG5cdFx0XHRcdFx0XHQgICc8L2Rpdj4nXG5cdFx0XHRcdFx0XHQ6IHRoaXMuZWRpdG9yLmdldERhdGEoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcElzSHRtbCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXREYXRhV2l0aEh0bWxNYXJrKHdyYXBJc0h0bWwgPSBmYWxzZSkge1xuXHRcdHJldHVybiAodGhpcy5pc0h0bWwoKSA/ICc6SFRNTDonIDogJycpICsgdGhpcy5nZXREYXRhKHdyYXBJc0h0bWwpO1xuXHR9XG5cblx0bW9kZVRvZ2dsZShwbGFpbiwgcmVzaXplKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAocGxhaW4pIHtcblx0XHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0TW9kZSgnd3lzaXd5ZycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICgnd3lzaXd5ZycgPT09IHRoaXMuZWRpdG9yLm1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXRNb2RlKCdwbGFpbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRcdGlmIChyZXNpemUpIHtcblx0XHRcdFx0dGhpcy5yZXNpemUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sT3JQbGFpbih0ZXh0LCBmb2N1cykge1xuXHRcdGlmICgnOkhUTUw6JyA9PT0gdGV4dC5zdWJzdHIoMCwgNikpIHtcblx0XHRcdHRoaXMuc2V0SHRtbCh0ZXh0LnN1YnN0cig2KSwgZm9jdXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldFBsYWluKHRleHQsIGZvY3VzKTtcblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sKGh0bWwsIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKHRydWUpO1xuXG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC88cFtePl0qPjxcXC9wPi9naSwgJycpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKGh0bWwpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlcGxhY2VIdG1sKGZpbmQsIHJlcGxhY2VIdG1sKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQgJiYgJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHRoaXMuZWRpdG9yLmdldERhdGEoKS5yZXBsYWNlKGZpbmQsIHJlcGxhY2VIdG1sKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0c2V0UGxhaW4ocGxhaW4sIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKGZhbHNlKTtcblx0XHRcdGlmICgncGxhaW4nID09PSB0aGlzLmVkaXRvci5tb2RlICYmIHRoaXMuZWRpdG9yLnBsdWdpbnMucGxhaW4gJiYgdGhpcy5lZGl0b3IuX19wbGFpbikge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5fX3BsYWluLnNldFJhd0RhdGEocGxhaW4pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHBsYWluKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0aWYgKHRoaXMuZWxlbWVudCAmJiAhdGhpcy5lZGl0b3IpIHtcblx0XHRcdGNvbnN0IGluaXRGdW5jID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjb25maWcgPSBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyxcblx0XHRcdFx0XHRsYW5ndWFnZSA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZScpLFxuXHRcdFx0XHRcdGFsbG93U291cmNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWxsb3dIdG1sRWRpdG9yU291cmNlQnV0dG9uJyksXG5cdFx0XHRcdFx0Yml0aSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93SHRtbEVkaXRvckJpdGlCdXR0b25zJyk7XG5cblx0XHRcdFx0aWYgKChhbGxvd1NvdXJjZSB8fCAhYml0aSkgJiYgIWNvbmZpZy50b29sYmFyR3JvdXBzLl9fY2ZnSW5pdGVkKSB7XG5cdFx0XHRcdFx0Y29uZmlnLnRvb2xiYXJHcm91cHMuX19jZmdJbml0ZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKGFsbG93U291cmNlKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlQnV0dG9ucyA9IGNvbmZpZy5yZW1vdmVCdXR0b25zLnJlcGxhY2UoJyxTb3VyY2UnLCAnJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFiaXRpKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlUGx1Z2lucyArPSAoY29uZmlnLnJlbW92ZVBsdWdpbnMgPyAnLCcgOiAnJykgKyAnYmlkaSc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uZmlnLmVudGVyTW9kZSA9IHdpbmRvdy5DS0VESVRPUi5FTlRFUl9CUjtcblx0XHRcdFx0Y29uZmlnLnNoaWZ0RW50ZXJNb2RlID0gd2luZG93LkNLRURJVE9SLkVOVEVSX1A7XG5cblx0XHRcdFx0Y29uZmlnLmxhbmd1YWdlID0gaHRtbEVkaXRvckxhbmdzTWFwWyhsYW5ndWFnZSB8fCAnZW4nKS50b0xvd2VyQ2FzZSgpXSB8fCAnZW4nO1xuXHRcdFx0XHRpZiAod2luZG93LkNLRURJVE9SLmVudikge1xuXHRcdFx0XHRcdHdpbmRvdy5DS0VESVRPUi5lbnYuaXNDb21wYXRpYmxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZWRpdG9yID0gd2luZG93LkNLRURJVE9SLmFwcGVuZFRvKHRoaXMuZWxlbWVudCwgY29uZmlnKTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbigna2V5JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmRhdGEgJiYgRXZlbnRLZXlDb2RlLlRhYiA9PT0gZXZlbnQuZGF0YS5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdibHVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmx1clRyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ21vZGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ibHVyVHJpZ2dlcigpO1xuXHRcdFx0XHRcdGlmICh0aGlzLm9uTW9kZUNoYW5nZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vbk1vZGVDaGFuZ2UoJ3BsYWluJyAhPT0gdGhpcy5lZGl0b3IubW9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignZm9jdXMnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c1RyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKHdpbmRvdy5GaWxlUmVhZGVyKSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2Ryb3AnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGlmICgwIDwgZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuZ2V0RmlsZXNDb3VudCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGZpbGUgPSBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5nZXRGaWxlKDApO1xuXHRcdFx0XHRcdFx0XHRpZiAoZmlsZSAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5pZCAmJiBmaWxlLnR5cGUgJiYgZmlsZS50eXBlLm1hdGNoKC9eaW1hZ2UvaSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpZCA9IGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1hZ2VJZCA9IGBbaW1nPSR7aWR9XWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZWFkZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcblxuXHRcdFx0XHRcdFx0XHRcdHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVhZGVyLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlcGxhY2VIdG1sKGltYWdlSWQsIGA8aW1nIHNyYz1cIiR7cmVhZGVyLnJlc3VsdH1cIiAvPmApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvaHRtbCcsIGltYWdlSWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignaW5zdGFuY2VSZWFkeScsICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5lZGl0b3IucmVtb3ZlTWVudUl0ZW0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjdXQnKTtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjb3B5Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgncGFzdGUnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9fcmVzaXphYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLl9faW5pdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHRoaXMucmVzaXplKCk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5vblJlYWR5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uUmVhZHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHdpbmRvdy5DS0VESVRPUikge1xuXHRcdFx0XHRpbml0RnVuYygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93Ll9faW5pdEVkaXRvciA9IGluaXRGdW5jO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvY3VzKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXMoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRoYXNGb2N1cygpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiAhIXRoaXMuZWRpdG9yLmZvY3VzTWFuYWdlci5oYXNGb2N1cztcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRibHVyKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXNNYW5hZ2VyLmJsdXIodHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0cmVzaXplRWRpdG9yKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9fcmVzaXphYmxlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5yZXNpemUodGhpcy4kZWxlbWVudC53aWR0aCgpLCB0aGlzLiRlbGVtZW50LmlubmVySGVpZ2h0KCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHNldFJlYWRPbmx5KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXRSZWFkT25seSghIXZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRjbGVhcihmb2N1cykge1xuXHRcdHRoaXMuc2V0SHRtbCgnJywgZm9jdXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEh0bWxFZGl0b3IsIEh0bWxFZGl0b3IgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mXCIpOyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuY29uc3QgT3BlbnRpcCA9IHdpbmRvdy5PcGVudGlwIHx8IHt9O1xuXG5PcGVudGlwLnN0eWxlcyA9IE9wZW50aXAuc3R5bGVzIHx8IHt9O1xuXG5PcGVudGlwLnN0eWxlcy5yYWlubG9vcCA9IHtcblx0J2V4dGVuZHMnOiAnc3RhbmRhcmQnLFxuXG5cdCdmaXhlZCc6IHRydWUsXG5cdCd0YXJnZXQnOiB0cnVlLFxuXG5cdCdkZWxheSc6IDAuMixcblx0J2hpZGVEZWxheSc6IDAsXG5cblx0J2hpZGVFZmZlY3QnOiAnZmFkZScsXG5cdCdoaWRlRWZmZWN0RHVyYXRpb24nOiAwLjIsXG5cblx0J3Nob3dFZmZlY3QnOiAnZmFkZScsXG5cdCdzaG93RWZmZWN0RHVyYXRpb24nOiAwLjIsXG5cblx0J3Nob3dPbic6ICdtb3VzZW92ZXIgY2xpY2snLFxuXHQncmVtb3ZlRWxlbWVudHNPbkhpZGUnOiB0cnVlLFxuXG5cdCdiYWNrZ3JvdW5kJzogJyNmZmYnLFxuXHQnc2hhZG93JzogZmFsc2UsXG5cblx0J2JvcmRlckNvbG9yJzogJyM5OTknLFxuXHQnYm9yZGVyUmFkaXVzJzogMixcblx0J2JvcmRlcldpZHRoJzogMVxufTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3BUaXAgPSB7XG5cdCdleHRlbmRzJzogJ3JhaW5sb29wJyxcblx0J2RlbGF5JzogMC40LFxuXHQnZ3JvdXAnOiAncmFpbmxvb3BUaXBzJ1xufTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3BFcnJvclRpcCA9IHtcblx0J2V4dGVuZHMnOiAncmFpbmxvb3AnLFxuXHQnY2xhc3NOYW1lJzogJ3JhaW5sb29wRXJyb3JUaXAnXG59O1xuXG5leHBvcnQgeyBPcGVudGlwLCBPcGVudGlwIGFzIGRlZmF1bHQgfTtcbiIsIi8qIVxuICogUGlrYWRheVxuICpcbiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9QaWthZGF5L1Bpa2FkYXlcbiAqL1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpXG57XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIG1vbWVudDtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIENvbW1vbkpTIG1vZHVsZVxuICAgICAgICAvLyBMb2FkIG1vbWVudC5qcyBhcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5XG4gICAgICAgIHRyeSB7IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkobW9tZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShmdW5jdGlvbiAocmVxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBMb2FkIG1vbWVudC5qcyBhcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5XG4gICAgICAgICAgICB2YXIgaWQgPSAnbW9tZW50JztcbiAgICAgICAgICAgIHRyeSB7IG1vbWVudCA9IHJlcShpZCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeShtb21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlBpa2FkYXkgPSBmYWN0b3J5KHJvb3QubW9tZW50KTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIChtb21lbnQpXG57XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogZmVhdHVyZSBkZXRlY3Rpb24gYW5kIGhlbHBlciBmdW5jdGlvbnNcbiAgICAgKi9cbiAgICB2YXIgaGFzTW9tZW50ID0gdHlwZW9mIG1vbWVudCA9PT0gJ2Z1bmN0aW9uJyxcblxuICAgIGhhc0V2ZW50TGlzdGVuZXJzID0gISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcixcblxuICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LFxuXG4gICAgc3RvID0gd2luZG93LnNldFRpbWVvdXQsXG5cbiAgICBhZGRFdmVudCA9IGZ1bmN0aW9uKGVsLCBlLCBjYWxsYmFjaywgY2FwdHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChoYXNFdmVudExpc3RlbmVycykge1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihlLCBjYWxsYmFjaywgISFjYXB0dXJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsLmF0dGFjaEV2ZW50KCdvbicgKyBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRXZlbnQgPSBmdW5jdGlvbihlbCwgZSwgY2FsbGJhY2ssIGNhcHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSwgY2FsbGJhY2ssICEhY2FwdHVyZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbC5kZXRhY2hFdmVudCgnb24nICsgZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHRyaW0gPSBmdW5jdGlvbihzdHIpXG4gICAge1xuICAgICAgICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csJycpO1xuICAgIH0sXG5cbiAgICBoYXNDbGFzcyA9IGZ1bmN0aW9uKGVsLCBjbilcbiAgICB7XG4gICAgICAgIHJldHVybiAoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5pbmRleE9mKCcgJyArIGNuICsgJyAnKSAhPT0gLTE7XG4gICAgfSxcblxuICAgIGFkZENsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgaWYgKCFoYXNDbGFzcyhlbCwgY24pKSB7XG4gICAgICAgICAgICBlbC5jbGFzc05hbWUgPSAoZWwuY2xhc3NOYW1lID09PSAnJykgPyBjbiA6IGVsLmNsYXNzTmFtZSArICcgJyArIGNuO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgZWwuY2xhc3NOYW1lID0gdHJpbSgoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5yZXBsYWNlKCcgJyArIGNuICsgJyAnLCAnICcpKTtcbiAgICB9LFxuXG4gICAgaXNBcnJheSA9IGZ1bmN0aW9uKG9iailcbiAgICB7XG4gICAgICAgIHJldHVybiAoL0FycmF5LykudGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSk7XG4gICAgfSxcblxuICAgIGlzRGF0ZSA9IGZ1bmN0aW9uKG9iailcbiAgICB7XG4gICAgICAgIHJldHVybiAoL0RhdGUvKS50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSAmJiAhaXNOYU4ob2JqLmdldFRpbWUoKSk7XG4gICAgfSxcblxuICAgIGlzV2Vla2VuZCA9IGZ1bmN0aW9uKGRhdGUpXG4gICAge1xuICAgICAgICB2YXIgZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgcmV0dXJuIGRheSA9PT0gMCB8fCBkYXkgPT09IDY7XG4gICAgfSxcblxuICAgIGlzTGVhcFllYXIgPSBmdW5jdGlvbih5ZWFyKVxuICAgIHtcbiAgICAgICAgLy8gc29sdXRpb24gYnkgTWF0dGkgVmlya2t1bmVuOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80ODgxOTUxXG4gICAgICAgIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoID0gZnVuY3Rpb24oeWVhciwgbW9udGgpXG4gICAge1xuICAgICAgICByZXR1cm4gWzMxLCBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vbnRoXTtcbiAgICB9LFxuXG4gICAgc2V0VG9TdGFydE9mRGF5ID0gZnVuY3Rpb24oZGF0ZSlcbiAgICB7XG4gICAgICAgIGlmIChpc0RhdGUoZGF0ZSkpIGRhdGUuc2V0SG91cnMoMCwwLDAsMCk7XG4gICAgfSxcblxuICAgIGNvbXBhcmVEYXRlcyA9IGZ1bmN0aW9uKGEsYilcbiAgICB7XG4gICAgICAgIC8vIHdlYWsgZGF0ZSBjb21wYXJpc29uICh1c2Ugc2V0VG9TdGFydE9mRGF5KGRhdGUpIHRvIGVuc3VyZSBjb3JyZWN0IHJlc3VsdClcbiAgICAgICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgICB9LFxuXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24odG8sIGZyb20sIG92ZXJ3cml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBwcm9wLCBoYXNQcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gZnJvbSkge1xuICAgICAgICAgICAgaGFzUHJvcCA9IHRvW3Byb3BdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoaGFzUHJvcCAmJiB0eXBlb2YgZnJvbVtwcm9wXSA9PT0gJ29iamVjdCcgJiYgZnJvbVtwcm9wXSAhPT0gbnVsbCAmJiBmcm9tW3Byb3BdLm5vZGVOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlKGZyb21bcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gbmV3IERhdGUoZnJvbVtwcm9wXS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkoZnJvbVtwcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBmcm9tW3Byb3BdLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBleHRlbmQoe30sIGZyb21bcHJvcF0sIG92ZXJ3cml0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChvdmVyd3JpdGUgfHwgIWhhc1Byb3ApIHtcbiAgICAgICAgICAgICAgICB0b1twcm9wXSA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH0sXG5cbiAgICBmaXJlRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZlbnROYW1lLCBkYXRhKVxuICAgIHtcbiAgICAgICAgdmFyIGV2O1xuXG4gICAgICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgICAgICAgICAgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xuICAgICAgICAgICAgZXYuaW5pdEV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgZXYgPSBleHRlbmQoZXYsIGRhdGEpO1xuICAgICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldik7XG4gICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QpIHtcbiAgICAgICAgICAgIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcbiAgICAgICAgICAgIGV2ID0gZXh0ZW5kKGV2LCBkYXRhKTtcbiAgICAgICAgICAgIGVsLmZpcmVFdmVudCgnb24nICsgZXZlbnROYW1lLCBldik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRqdXN0Q2FsZW5kYXIgPSBmdW5jdGlvbihjYWxlbmRhcikge1xuICAgICAgICBpZiAoY2FsZW5kYXIubW9udGggPCAwKSB7XG4gICAgICAgICAgICBjYWxlbmRhci55ZWFyIC09IE1hdGguY2VpbChNYXRoLmFicyhjYWxlbmRhci5tb250aCkvMTIpO1xuICAgICAgICAgICAgY2FsZW5kYXIubW9udGggKz0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGVuZGFyLm1vbnRoID4gMTEpIHtcbiAgICAgICAgICAgIGNhbGVuZGFyLnllYXIgKz0gTWF0aC5mbG9vcihNYXRoLmFicyhjYWxlbmRhci5tb250aCkvMTIpO1xuICAgICAgICAgICAgY2FsZW5kYXIubW9udGggLT0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZWZhdWx0cyBhbmQgbG9jYWxpc2F0aW9uXG4gICAgICovXG4gICAgZGVmYXVsdHMgPSB7XG5cbiAgICAgICAgLy8gYmluZCB0aGUgcGlja2VyIHRvIGEgZm9ybSBmaWVsZFxuICAgICAgICBmaWVsZDogbnVsbCxcblxuICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHNob3cvaGlkZSB0aGUgcGlja2VyIG9uIGBmaWVsZGAgZm9jdXMgKGRlZmF1bHQgYHRydWVgIGlmIGBmaWVsZGAgaXMgc2V0KVxuICAgICAgICBib3VuZDogdW5kZWZpbmVkLFxuXG4gICAgICAgIC8vIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGFuIGFyaWEgYXNzaXN0YW5jZSB0ZWtzdCAob25seSBhcHBsaWVkIHdoZW4gYGJvdW5kYCBpcyBzZXQpXG4gICAgICAgIGFyaWFMYWJlbDogJ1VzZSB0aGUgYXJyb3cga2V5cyB0byBwaWNrIGEgZGF0ZScsXG5cbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGRhdGVwaWNrZXIsIHJlbGF0aXZlIHRvIHRoZSBmaWVsZCAoZGVmYXVsdCB0byBib3R0b20gJiBsZWZ0KVxuICAgICAgICAvLyAoJ2JvdHRvbScgJiAnbGVmdCcga2V5d29yZHMgYXJlIG5vdCB1c2VkLCAndG9wJyAmICdyaWdodCcgYXJlIG1vZGlmaWVyIG9uIHRoZSBib3R0b20vbGVmdCBwb3NpdGlvbilcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20gbGVmdCcsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBmaXQgaW4gdGhlIHZpZXdwb3J0IGV2ZW4gaWYgaXQgbWVhbnMgcmVwb3NpdGlvbmluZyBmcm9tIHRoZSBwb3NpdGlvbiBvcHRpb25cbiAgICAgICAgcmVwb3NpdGlvbjogdHJ1ZSxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IGZvciBgLnRvU3RyaW5nKClgIGFuZCBgZmllbGRgIHZhbHVlXG4gICAgICAgIGZvcm1hdDogJ1lZWVktTU0tREQnLFxuXG4gICAgICAgIC8vIHRoZSB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZXRzIHBhc3NlZCBhIGN1cnJlbnQgZGF0ZSBvYmplY3QgYW5kIGZvcm1hdFxuICAgICAgICAvLyBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICAgICAgICB0b1N0cmluZzogbnVsbCxcblxuICAgICAgICAvLyB1c2VkIHRvIGNyZWF0ZSBkYXRlIG9iamVjdCBmcm9tIGN1cnJlbnQgaW5wdXQgc3RyaW5nXG4gICAgICAgIHBhcnNlOiBudWxsLFxuXG4gICAgICAgIC8vIHRoZSBpbml0aWFsIGRhdGUgdG8gdmlldyB3aGVuIGZpcnN0IG9wZW5lZFxuICAgICAgICBkZWZhdWx0RGF0ZTogbnVsbCxcblxuICAgICAgICAvLyBtYWtlIHRoZSBgZGVmYXVsdERhdGVgIHRoZSBpbml0aWFsIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgIHNldERlZmF1bHREYXRlOiBmYWxzZSxcblxuICAgICAgICAvLyBmaXJzdCBkYXkgb2Ygd2VlayAoMDogU3VuZGF5LCAxOiBNb25kYXkgZXRjKVxuICAgICAgICBmaXJzdERheTogMCxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBmbGFnIGZvciBtb21lbnQncyBzdHJpY3QgZGF0ZSBwYXJzaW5nXG4gICAgICAgIGZvcm1hdFN0cmljdDogZmFsc2UsXG5cbiAgICAgICAgLy8gdGhlIG1pbmltdW0vZWFybGllc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtaW5EYXRlOiBudWxsLFxuICAgICAgICAvLyB0aGUgbWF4aW11bS9sYXRlc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtYXhEYXRlOiBudWxsLFxuXG4gICAgICAgIC8vIG51bWJlciBvZiB5ZWFycyBlaXRoZXIgc2lkZSwgb3IgYXJyYXkgb2YgdXBwZXIvbG93ZXIgcmFuZ2VcbiAgICAgICAgeWVhclJhbmdlOiAxMCxcblxuICAgICAgICAvLyBzaG93IHdlZWsgbnVtYmVycyBhdCBoZWFkIG9mIHJvd1xuICAgICAgICBzaG93V2Vla051bWJlcjogZmFsc2UsXG5cbiAgICAgICAgLy8gV2VlayBwaWNrZXIgbW9kZVxuICAgICAgICBwaWNrV2hvbGVXZWVrOiBmYWxzZSxcblxuICAgICAgICAvLyB1c2VkIGludGVybmFsbHkgKGRvbid0IGNvbmZpZyBvdXRzaWRlKVxuICAgICAgICBtaW5ZZWFyOiAwLFxuICAgICAgICBtYXhZZWFyOiA5OTk5LFxuICAgICAgICBtaW5Nb250aDogdW5kZWZpbmVkLFxuICAgICAgICBtYXhNb250aDogdW5kZWZpbmVkLFxuXG4gICAgICAgIHN0YXJ0UmFuZ2U6IG51bGwsXG4gICAgICAgIGVuZFJhbmdlOiBudWxsLFxuXG4gICAgICAgIGlzUlRMOiBmYWxzZSxcblxuICAgICAgICAvLyBBZGRpdGlvbmFsIHRleHQgdG8gYXBwZW5kIHRvIHRoZSB5ZWFyIGluIHRoZSBjYWxlbmRhciB0aXRsZVxuICAgICAgICB5ZWFyU3VmZml4OiAnJyxcblxuICAgICAgICAvLyBSZW5kZXIgdGhlIG1vbnRoIGFmdGVyIHllYXIgaW4gdGhlIGNhbGVuZGFyIHRpdGxlXG4gICAgICAgIHNob3dNb250aEFmdGVyWWVhcjogZmFsc2UsXG5cbiAgICAgICAgLy8gUmVuZGVyIGRheXMgb2YgdGhlIGNhbGVuZGFyIGdyaWQgdGhhdCBmYWxsIGluIHRoZSBuZXh0IG9yIHByZXZpb3VzIG1vbnRoXG4gICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIEFsbG93cyB1c2VyIHRvIHNlbGVjdCBkYXlzIHRoYXQgZmFsbCBpbiB0aGUgbmV4dCBvciBwcmV2aW91cyBtb250aFxuICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIGhvdyBtYW55IG1vbnRocyBhcmUgdmlzaWJsZVxuICAgICAgICBudW1iZXJPZk1vbnRoczogMSxcblxuICAgICAgICAvLyB3aGVuIG51bWJlck9mTW9udGhzIGlzIHVzZWQsIHRoaXMgd2lsbCBoZWxwIHlvdSB0byBjaG9vc2Ugd2hlcmUgdGhlIG1haW4gY2FsZW5kYXIgd2lsbCBiZSAoZGVmYXVsdCBgbGVmdGAsIGNhbiBiZSBzZXQgdG8gYHJpZ2h0YClcbiAgICAgICAgLy8gb25seSB1c2VkIGZvciB0aGUgZmlyc3QgZGlzcGxheSBvciB3aGVuIGEgc2VsZWN0ZWQgZGF0ZSBpcyBub3QgdmlzaWJsZVxuICAgICAgICBtYWluQ2FsZW5kYXI6ICdsZWZ0JyxcblxuICAgICAgICAvLyBTcGVjaWZ5IGEgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBjYWxlbmRhciBpblxuICAgICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBCbHVyIGZpZWxkIHdoZW4gZGF0ZSBpcyBzZWxlY3RlZFxuICAgICAgICBibHVyRmllbGRPblNlbGVjdCA6IHRydWUsXG5cbiAgICAgICAgLy8gaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgcHJldmlvdXNNb250aCA6ICdQcmV2aW91cyBNb250aCcsXG4gICAgICAgICAgICBuZXh0TW9udGggICAgIDogJ05leHQgTW9udGgnLFxuICAgICAgICAgICAgbW9udGhzICAgICAgICA6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcbiAgICAgICAgICAgIHdlZWtkYXlzICAgICAgOiBbJ1N1bmRheScsJ01vbmRheScsJ1R1ZXNkYXknLCdXZWRuZXNkYXknLCdUaHVyc2RheScsJ0ZyaWRheScsJ1NhdHVyZGF5J10sXG4gICAgICAgICAgICB3ZWVrZGF5c1Nob3J0IDogWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRoZW1lIENsYXNzbmFtZVxuICAgICAgICB0aGVtZTogbnVsbCxcblxuICAgICAgICAvLyBldmVudHMgYXJyYXlcbiAgICAgICAgZXZlbnRzOiBbXSxcblxuICAgICAgICAvLyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBvblNlbGVjdDogbnVsbCxcbiAgICAgICAgb25PcGVuOiBudWxsLFxuICAgICAgICBvbkNsb3NlOiBudWxsLFxuICAgICAgICBvbkRyYXc6IG51bGwsXG5cbiAgICAgICAgLy8gRW5hYmxlIGtleWJvYXJkIGlucHV0XG4gICAgICAgIGtleWJvYXJkSW5wdXQ6IHRydWVcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiB0ZW1wbGF0aW5nIGZ1bmN0aW9ucyB0byBhYnN0cmFjdCBIVE1MIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHJlbmRlckRheU5hbWUgPSBmdW5jdGlvbihvcHRzLCBkYXksIGFiYnIpXG4gICAge1xuICAgICAgICBkYXkgKz0gb3B0cy5maXJzdERheTtcbiAgICAgICAgd2hpbGUgKGRheSA+PSA3KSB7XG4gICAgICAgICAgICBkYXkgLT0gNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJiciA/IG9wdHMuaTE4bi53ZWVrZGF5c1Nob3J0W2RheV0gOiBvcHRzLmkxOG4ud2Vla2RheXNbZGF5XTtcbiAgICB9LFxuXG4gICAgcmVuZGVyRGF5ID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgICAgdmFyIGFyaWFTZWxlY3RlZCA9ICdmYWxzZSc7XG4gICAgICAgIGlmIChvcHRzLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCgnaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoJyk7XG5cbiAgICAgICAgICAgICAgICBpZighb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXNlbGVjdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cImlzLWVtcHR5XCI+PC90ZD4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzVG9kYXkpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy10b2RheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgYXJpYVNlbGVjdGVkID0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmhhc0V2ZW50KSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaGFzLWV2ZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuaXNJblJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtaW5yYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU3RhcnRSYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXN0YXJ0cmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc0VuZFJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtZW5kcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0ZCBkYXRhLWRheT1cIicgKyBvcHRzLmRheSArICdcIiBjbGFzcz1cIicgKyBhcnIuam9pbignICcpICsgJ1wiIGFyaWEtc2VsZWN0ZWQ9XCInICsgYXJpYVNlbGVjdGVkICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtYnV0dG9uIHBpa2EtZGF5XCIgdHlwZT1cImJ1dHRvblwiICcgK1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1waWthLXllYXI9XCInICsgb3B0cy55ZWFyICsgJ1wiIGRhdGEtcGlrYS1tb250aD1cIicgKyBvcHRzLm1vbnRoICsgJ1wiIGRhdGEtcGlrYS1kYXk9XCInICsgb3B0cy5kYXkgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmRheSArXG4gICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICc8L3RkPic7XG4gICAgfSxcblxuICAgIHJlbmRlcldlZWsgPSBmdW5jdGlvbiAoZCwgbSwgeSkge1xuICAgICAgICAvLyBMaWZ0ZWQgZnJvbSBodHRwOi8vamF2YXNjcmlwdC5hYm91dC5jb20vbGlicmFyeS9ibHdlZWt5ZWFyLmh0bSwgbGlnaHRseSBtb2RpZmllZC5cbiAgICAgICAgdmFyIG9uZWphbiA9IG5ldyBEYXRlKHksIDAsIDEpLFxuICAgICAgICAgICAgd2Vla051bSA9IE1hdGguY2VpbCgoKChuZXcgRGF0ZSh5LCBtLCBkKSAtIG9uZWphbikgLyA4NjQwMDAwMCkgKyBvbmVqYW4uZ2V0RGF5KCkrMSkvNyk7XG4gICAgICAgIHJldHVybiAnPHRkIGNsYXNzPVwicGlrYS13ZWVrXCI+JyArIHdlZWtOdW0gKyAnPC90ZD4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJSb3cgPSBmdW5jdGlvbihkYXlzLCBpc1JUTCwgcGlja1dob2xlV2VlaywgaXNSb3dTZWxlY3RlZClcbiAgICB7XG4gICAgICAgIHJldHVybiAnPHRyIGNsYXNzPVwicGlrYS1yb3cnICsgKHBpY2tXaG9sZVdlZWsgPyAnIHBpY2std2hvbGUtd2VlaycgOiAnJykgKyAoaXNSb3dTZWxlY3RlZCA/ICcgaXMtc2VsZWN0ZWQnIDogJycpICsgJ1wiPicgKyAoaXNSVEwgPyBkYXlzLnJldmVyc2UoKSA6IGRheXMpLmpvaW4oJycpICsgJzwvdHI+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyQm9keSA9IGZ1bmN0aW9uKHJvd3MpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0Ym9keT4nICsgcm93cy5qb2luKCcnKSArICc8L3Rib2R5Pic7XG4gICAgfSxcblxuICAgIHJlbmRlckhlYWQgPSBmdW5jdGlvbihvcHRzKVxuICAgIHtcbiAgICAgICAgdmFyIGksIGFyciA9IFtdO1xuICAgICAgICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgICAgICAgICAgYXJyLnB1c2goJzx0aD48L3RoPicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8dGggc2NvcGU9XCJjb2xcIj48YWJiciB0aXRsZT1cIicgKyByZW5kZXJEYXlOYW1lKG9wdHMsIGkpICsgJ1wiPicgKyByZW5kZXJEYXlOYW1lKG9wdHMsIGksIHRydWUpICsgJzwvYWJicj48L3RoPicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnPHRoZWFkPjx0cj4nICsgKG9wdHMuaXNSVEwgPyBhcnIucmV2ZXJzZSgpIDogYXJyKS5qb2luKCcnKSArICc8L3RyPjwvdGhlYWQ+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyVGl0bGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgYywgeWVhciwgbW9udGgsIHJlZlllYXIsIHJhbmRJZClcbiAgICB7XG4gICAgICAgIHZhciBpLCBqLCBhcnIsXG4gICAgICAgICAgICBvcHRzID0gaW5zdGFuY2UuX28sXG4gICAgICAgICAgICBpc01pblllYXIgPSB5ZWFyID09PSBvcHRzLm1pblllYXIsXG4gICAgICAgICAgICBpc01heFllYXIgPSB5ZWFyID09PSBvcHRzLm1heFllYXIsXG4gICAgICAgICAgICBodG1sID0gJzxkaXYgaWQ9XCInICsgcmFuZElkICsgJ1wiIGNsYXNzPVwicGlrYS10aXRsZVwiIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+JyxcbiAgICAgICAgICAgIG1vbnRoSHRtbCxcbiAgICAgICAgICAgIHllYXJIdG1sLFxuICAgICAgICAgICAgcHJldiA9IHRydWUsXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKGFyciA9IFtdLCBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArICh5ZWFyID09PSByZWZZZWFyID8gaSAtIGMgOiAxMiArIGkgLSBjKSArICdcIicgK1xuICAgICAgICAgICAgICAgIChpID09PSBtb250aCA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJzogJycpICtcbiAgICAgICAgICAgICAgICAoKGlzTWluWWVhciAmJiBpIDwgb3B0cy5taW5Nb250aCkgfHwgKGlzTWF4WWVhciAmJiBpID4gb3B0cy5tYXhNb250aCkgPyAnZGlzYWJsZWQ9XCJkaXNhYmxlZFwiJyA6ICcnKSArICc+JyArXG4gICAgICAgICAgICAgICAgb3B0cy5pMThuLm1vbnRoc1tpXSArICc8L29wdGlvbj4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vbnRoSHRtbCA9ICc8ZGl2IGNsYXNzPVwicGlrYS1sYWJlbFwiPicgKyBvcHRzLmkxOG4ubW9udGhzW21vbnRoXSArICc8c2VsZWN0IGNsYXNzPVwicGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9udGhcIiB0YWJpbmRleD1cIi0xXCI+JyArIGFyci5qb2luKCcnKSArICc8L3NlbGVjdD48L2Rpdj4nO1xuXG4gICAgICAgIGlmIChpc0FycmF5KG9wdHMueWVhclJhbmdlKSkge1xuICAgICAgICAgICAgaSA9IG9wdHMueWVhclJhbmdlWzBdO1xuICAgICAgICAgICAgaiA9IG9wdHMueWVhclJhbmdlWzFdICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkgPSB5ZWFyIC0gb3B0cy55ZWFyUmFuZ2U7XG4gICAgICAgICAgICBqID0gMSArIHllYXIgKyBvcHRzLnllYXJSYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoYXJyID0gW107IGkgPCBqICYmIGkgPD0gb3B0cy5tYXhZZWFyOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID49IG9wdHMubWluWWVhcikge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCInICsgKGkgPT09IHllYXIgPyAnIHNlbGVjdGVkPVwic2VsZWN0ZWRcIic6ICcnKSArICc+JyArIChpKSArICc8L29wdGlvbj4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5ZWFySHRtbCA9ICc8ZGl2IGNsYXNzPVwicGlrYS1sYWJlbFwiPicgKyB5ZWFyICsgb3B0cy55ZWFyU3VmZml4ICsgJzxzZWxlY3QgY2xhc3M9XCJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyXCIgdGFiaW5kZXg9XCItMVwiPicgKyBhcnIuam9pbignJykgKyAnPC9zZWxlY3Q+PC9kaXY+JztcblxuICAgICAgICBpZiAob3B0cy5zaG93TW9udGhBZnRlclllYXIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0geWVhckh0bWwgKyBtb250aEh0bWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodG1sICs9IG1vbnRoSHRtbCArIHllYXJIdG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTWluWWVhciAmJiAobW9udGggPT09IDAgfHwgb3B0cy5taW5Nb250aCA+PSBtb250aCkpIHtcbiAgICAgICAgICAgIHByZXYgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01heFllYXIgJiYgKG1vbnRoID09PSAxMSB8fCBvcHRzLm1heE1vbnRoIDw9IG1vbnRoKSkge1xuICAgICAgICAgICAgbmV4dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9XCJwaWthLXByZXYnICsgKHByZXYgPyAnJyA6ICcgaXMtZGlzYWJsZWQnKSArICdcIiB0eXBlPVwiYnV0dG9uXCI+JyArIG9wdHMuaTE4bi5wcmV2aW91c01vbnRoICsgJzwvYnV0dG9uPic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09IChpbnN0YW5jZS5fby5udW1iZXJPZk1vbnRocyAtIDEpICkge1xuICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtbmV4dCcgKyAobmV4dCA/ICcnIDogJyBpcy1kaXNhYmxlZCcpICsgJ1wiIHR5cGU9XCJidXR0b25cIj4nICsgb3B0cy5pMThuLm5leHRNb250aCArICc8L2J1dHRvbj4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGh0bWwgKz0gJzwvZGl2Pic7XG4gICAgfSxcblxuICAgIHJlbmRlclRhYmxlID0gZnVuY3Rpb24ob3B0cywgZGF0YSwgcmFuZElkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICc8dGFibGUgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2xhc3M9XCJwaWthLXRhYmxlXCIgcm9sZT1cImdyaWRcIiBhcmlhLWxhYmVsbGVkYnk9XCInICsgcmFuZElkICsgJ1wiPicgKyByZW5kZXJIZWFkKG9wdHMpICsgcmVuZGVyQm9keShkYXRhKSArICc8L3RhYmxlPic7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUGlrYWRheSBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIFBpa2FkYXkgPSBmdW5jdGlvbihvcHRpb25zKVxuICAgIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgb3B0cyA9IHNlbGYuY29uZmlnKG9wdGlvbnMpO1xuXG4gICAgICAgIHNlbGYuX29uTW91c2VEb3duID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl92KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWhhc0NsYXNzKHRhcmdldCwgJ2lzLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1idXR0b24nKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LCAnaXMtZW1wdHknKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LnBhcmVudE5vZGUsICdpcy1kaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShuZXcgRGF0ZSh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EteWVhcicpLCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EtbW9udGgnKSwgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1waWthLWRheScpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG8oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuYmx1ckZpZWxkT25TZWxlY3QgJiYgb3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtcHJldicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucHJldk1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtbmV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyB0b3VjaCBldmVudCBwcmV2ZW50IG1vdXNlIGV2ZW50cyBlbXVsYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9jID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdC1tb250aCcpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5nb3RvTW9udGgodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0LXllYXInKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b1llYXIodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbktleUNoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcblxuICAgICAgICAgICAgaWYgKHNlbGYuaXNWaXNpYmxlKCkpIHtcblxuICAgICAgICAgICAgICAgIHN3aXRjaChlLmtleUNvZGUpe1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdzdWJ0cmFjdCcsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ3N1YnRyYWN0JywgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnYWRkJywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnYWRkJywgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRlO1xuXG4gICAgICAgICAgICBpZiAoZS5maXJlZEJ5ID09PSBzZWxmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdHMucGFyc2UpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gb3B0cy5wYXJzZShvcHRzLmZpZWxkLnZhbHVlLCBvcHRzLmZvcm1hdCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc01vbWVudCkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQsIG9wdHMuZm9ybWF0U3RyaWN0KTtcbiAgICAgICAgICAgICAgICBkYXRlID0gKGRhdGUgJiYgZGF0ZS5pc1ZhbGlkKCkpID8gZGF0ZS50b0RhdGUoKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShvcHRzLmZpZWxkLnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5fdikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgc2VsZi5zaG93KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENsaWNrID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBzZWxmLnNob3coKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Qmx1ciA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSUUgYWxsb3dzIHBpa2EgZGl2IHRvIGdhaW4gZm9jdXM7IGNhdGNoIGJsdXIgdGhlIGlucHV0IGZpZWxkXG4gICAgICAgICAgICB2YXIgcEVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3MocEVsLCAncGlrYS1zaW5nbGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKChwRWwgPSBwRWwucGFyZW50Tm9kZSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNlbGYuX2MpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9iID0gc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9jID0gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgcEVsID0gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc0V2ZW50TGlzdGVuZXJzICYmIGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5vbmNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsICdyZXR1cm47Jyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHRhcmdldCwgJ2NoYW5nZScsIHNlbGYuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHBFbCwgJ3Bpa2Etc2luZ2xlJykgfHwgcEVsID09PSBvcHRzLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICgocEVsID0gcEVsLnBhcmVudE5vZGUpKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl92ICYmIHRhcmdldCAhPT0gb3B0cy50cmlnZ2VyICYmIHBFbCAhPT0gb3B0cy50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxmLmVsLmNsYXNzTmFtZSA9ICdwaWthLXNpbmdsZScgKyAob3B0cy5pc1JUTCA/ICcgaXMtcnRsJyA6ICcnKSArIChvcHRzLnRoZW1lID8gJyAnICsgb3B0cy50aGVtZSA6ICcnKTtcblxuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAnbW91c2Vkb3duJywgc2VsZi5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAndG91Y2hlbmQnLCBzZWxmLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgIGFkZEV2ZW50KHNlbGYuZWwsICdjaGFuZ2UnLCBzZWxmLl9vbkNoYW5nZSk7XG5cbiAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJywgc2VsZi5fb25LZXlDaGFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIG9wdHMuY29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxmLmVsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmVsLCBvcHRzLmZpZWxkLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCBzZWxmLl9vbklucHV0Q2hhbmdlKTtcblxuICAgICAgICAgICAgaWYgKCFvcHRzLmRlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc01vbWVudCAmJiBvcHRzLmZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGVmYXVsdERhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGVmYXVsdERhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKG9wdHMuZmllbGQudmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0cy5zZXREZWZhdWx0RGF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGVmRGF0ZSA9IG9wdHMuZGVmYXVsdERhdGU7XG5cbiAgICAgICAgaWYgKGlzRGF0ZShkZWZEYXRlKSkge1xuICAgICAgICAgICAgaWYgKG9wdHMuc2V0RGVmYXVsdERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoZGVmRGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b0RhdGUoZGVmRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLmdvdG9EYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgc2VsZi5lbC5jbGFzc05hbWUgKz0gJyBpcy1ib3VuZCc7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdjbGljaycsIHNlbGYuX29uSW5wdXRDbGljayk7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdmb2N1cycsIHNlbGYuX29uSW5wdXRGb2N1cyk7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdibHVyJywgc2VsZi5fb25JbnB1dEJsdXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBwdWJsaWMgUGlrYWRheSBBUElcbiAgICAgKi9cbiAgICBQaWthZGF5LnByb3RvdHlwZSA9IHtcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjb25maWd1cmUgZnVuY3Rpb25hbGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgY29uZmlnOiBmdW5jdGlvbihvcHRpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX28pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvcHRzID0gZXh0ZW5kKHRoaXMuX28sIG9wdGlvbnMsIHRydWUpO1xuXG4gICAgICAgICAgICBvcHRzLmlzUlRMID0gISFvcHRzLmlzUlRMO1xuXG4gICAgICAgICAgICBvcHRzLmZpZWxkID0gKG9wdHMuZmllbGQgJiYgb3B0cy5maWVsZC5ub2RlTmFtZSkgPyBvcHRzLmZpZWxkIDogbnVsbDtcblxuICAgICAgICAgICAgb3B0cy50aGVtZSA9ICh0eXBlb2Ygb3B0cy50aGVtZSkgPT09ICdzdHJpbmcnICYmIG9wdHMudGhlbWUgPyBvcHRzLnRoZW1lIDogbnVsbDtcblxuICAgICAgICAgICAgb3B0cy5ib3VuZCA9ICEhKG9wdHMuYm91bmQgIT09IHVuZGVmaW5lZCA/IG9wdHMuZmllbGQgJiYgb3B0cy5ib3VuZCA6IG9wdHMuZmllbGQpO1xuXG4gICAgICAgICAgICBvcHRzLnRyaWdnZXIgPSAob3B0cy50cmlnZ2VyICYmIG9wdHMudHJpZ2dlci5ub2RlTmFtZSkgPyBvcHRzLnRyaWdnZXIgOiBvcHRzLmZpZWxkO1xuXG4gICAgICAgICAgICBvcHRzLmRpc2FibGVXZWVrZW5kcyA9ICEhb3B0cy5kaXNhYmxlV2Vla2VuZHM7XG5cbiAgICAgICAgICAgIG9wdHMuZGlzYWJsZURheUZuID0gKHR5cGVvZiBvcHRzLmRpc2FibGVEYXlGbikgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRpc2FibGVEYXlGbiA6IG51bGw7XG5cbiAgICAgICAgICAgIHZhciBub20gPSBwYXJzZUludChvcHRzLm51bWJlck9mTW9udGhzLCAxMCkgfHwgMTtcbiAgICAgICAgICAgIG9wdHMubnVtYmVyT2ZNb250aHMgPSBub20gPiA0ID8gNCA6IG5vbTtcblxuICAgICAgICAgICAgaWYgKCFpc0RhdGUob3B0cy5taW5EYXRlKSkge1xuICAgICAgICAgICAgICAgIG9wdHMubWluRGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0RhdGUob3B0cy5tYXhEYXRlKSkge1xuICAgICAgICAgICAgICAgIG9wdHMubWF4RGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChvcHRzLm1pbkRhdGUgJiYgb3B0cy5tYXhEYXRlKSAmJiBvcHRzLm1heERhdGUgPCBvcHRzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1heERhdGUgPSBvcHRzLm1pbkRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1pbkRhdGUob3B0cy5taW5EYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heERhdGUob3B0cy5tYXhEYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzQXJyYXkob3B0cy55ZWFyUmFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpIC0gMTA7XG4gICAgICAgICAgICAgICAgb3B0cy55ZWFyUmFuZ2VbMF0gPSBwYXJzZUludChvcHRzLnllYXJSYW5nZVswXSwgMTApIHx8IGZhbGxiYWNrO1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlWzFdID0gcGFyc2VJbnQob3B0cy55ZWFyUmFuZ2VbMV0sIDEwKSB8fCBmYWxsYmFjaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy55ZWFyUmFuZ2UgPSBNYXRoLmFicyhwYXJzZUludChvcHRzLnllYXJSYW5nZSwgMTApKSB8fCBkZWZhdWx0cy55ZWFyUmFuZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMueWVhclJhbmdlID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlID0gMTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmcgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uICh1c2luZyBNb21lbnQuanMgaWYgYXZhaWxhYmxlKVxuICAgICAgICAgKi9cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKGZvcm1hdClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8IHRoaXMuX28uZm9ybWF0O1xuICAgICAgICAgICAgaWYgKCFpc0RhdGUodGhpcy5fZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fby50b1N0cmluZykge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fby50b1N0cmluZyh0aGlzLl9kLCBmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc01vbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KHRoaXMuX2QpLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2QudG9EYXRlU3RyaW5nKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJldHVybiBhIE1vbWVudC5qcyBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIChpZiBhdmFpbGFibGUpXG4gICAgICAgICAqL1xuICAgICAgICBnZXRNb21lbnQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGhhc01vbWVudCA/IG1vbWVudCh0aGlzLl9kKSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgY3VycmVudCBzZWxlY3Rpb24gZnJvbSBhIE1vbWVudC5qcyBvYmplY3QgKGlmIGF2YWlsYWJsZSlcbiAgICAgICAgICovXG4gICAgICAgIHNldE1vbWVudDogZnVuY3Rpb24oZGF0ZSwgcHJldmVudE9uU2VsZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoaGFzTW9tZW50ICYmIG1vbWVudC5pc01vbWVudChkYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZShkYXRlLnRvRGF0ZSgpLCBwcmV2ZW50T25TZWxlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBEYXRlIG9iamVjdCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGdldERhdGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGlzRGF0ZSh0aGlzLl9kKSA/IG5ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHNldERhdGU6IGZ1bmN0aW9uKGRhdGUsIHByZXZlbnRPblNlbGVjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLmZpZWxkLnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVFdmVudCh0aGlzLl9vLmZpZWxkLCAnY2hhbmdlJywgeyBmaXJlZEJ5OiB0aGlzIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMuX28ubWluRGF0ZSxcbiAgICAgICAgICAgICAgICBtYXggPSB0aGlzLl9vLm1heERhdGU7XG5cbiAgICAgICAgICAgIGlmIChpc0RhdGUobWluKSAmJiBkYXRlIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG1pbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKG1heCkgJiYgZGF0ZSA+IG1heCkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtYXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodGhpcy5fZCk7XG4gICAgICAgICAgICB0aGlzLmdvdG9EYXRlKHRoaXMuX2QpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fby5maWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX28uZmllbGQudmFsdWUgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50KHRoaXMuX28uZmllbGQsICdjaGFuZ2UnLCB7IGZpcmVkQnk6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZXZlbnRPblNlbGVjdCAmJiB0eXBlb2YgdGhpcy5fby5vblNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ub25TZWxlY3QuY2FsbCh0aGlzLCB0aGlzLmdldERhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB2aWV3IHRvIGEgc3BlY2lmaWMgZGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b0RhdGU6IGZ1bmN0aW9uKGRhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXdDYWxlbmRhciA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxlbmRhcnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3RWaXNpYmxlRGF0ZSA9IG5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlID0gbmV3IERhdGUodGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLnllYXIsIHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS5tb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGVEYXRlID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBlbmQgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlLnNldE1vbnRoKGxhc3RWaXNpYmxlRGF0ZS5nZXRNb250aCgpKzEpO1xuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlRGF0ZS5zZXREYXRlKGxhc3RWaXNpYmxlRGF0ZS5nZXREYXRlKCktMSk7XG4gICAgICAgICAgICAgICAgbmV3Q2FsZW5kYXIgPSAodmlzaWJsZURhdGUgPCBmaXJzdFZpc2libGVEYXRlLmdldFRpbWUoKSB8fCBsYXN0VmlzaWJsZURhdGUuZ2V0VGltZSgpIDwgdmlzaWJsZURhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3Q2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFycyA9IFt7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vLm1haW5DYWxlbmRhciA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCArPSAxIC0gdGhpcy5fby5udW1iZXJPZk1vbnRocztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0RGF0ZTogZnVuY3Rpb24oc2lnbiwgZGF5cykge1xuXG4gICAgICAgICAgICB2YXIgZGF5ID0gdGhpcy5nZXREYXRlKCkgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHZhciBkaWZmZXJlbmNlID0gcGFyc2VJbnQoZGF5cykqMjQqNjAqNjAqMTAwMDtcblxuICAgICAgICAgICAgdmFyIG5ld0RheTtcblxuICAgICAgICAgICAgaWYgKHNpZ24gPT09ICdhZGQnKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF5ID0gbmV3IERhdGUoZGF5LnZhbHVlT2YoKSArIGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaWduID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF5ID0gbmV3IERhdGUoZGF5LnZhbHVlT2YoKSAtIGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldERhdGUobmV3RGF5KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3RDYWxlbmRhcnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0gPSBhZGp1c3RDYWxlbmRhcih0aGlzLmNhbGVuZGFyc1swXSk7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMTsgYyA8IHRoaXMuX28ubnVtYmVyT2ZNb250aHM7IGMrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzW2NdID0gYWRqdXN0Q2FsZW5kYXIoe1xuICAgICAgICAgICAgICAgICAgICBtb250aDogdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggKyBjLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLmNhbGVuZGFyc1swXS55ZWFyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnb3RvVG9kYXk6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5nb3RvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHZpZXcgdG8gYSBzcGVjaWZpYyBtb250aCAoemVyby1pbmRleCwgZS5nLiAwOiBKYW51YXJ5KVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b01vbnRoOiBmdW5jdGlvbihtb250aClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCA9IHBhcnNlSW50KG1vbnRoLCAxMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBuZXh0TW9udGg6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrKztcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcHJldk1vbnRoOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLS07XG4gICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIGZ1bGwgeWVhciAoZS5nLiBcIjIwMTJcIilcbiAgICAgICAgICovXG4gICAgICAgIGdvdG9ZZWFyOiBmdW5jdGlvbih5ZWFyKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciA9IHBhcnNlSW50KHllYXIsIDEwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdGhlIG1pbkRhdGVcbiAgICAgICAgICovXG4gICAgICAgIHNldE1pbkRhdGU6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluRGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluWWVhciAgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluTW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbkRhdGUgPSBkZWZhdWx0cy5taW5EYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluWWVhciAgPSBkZWZhdWx0cy5taW5ZZWFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluTW9udGggPSBkZWZhdWx0cy5taW5Nb250aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLnN0YXJ0UmFuZ2UgPSBkZWZhdWx0cy5zdGFydFJhbmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHRoZSBtYXhEYXRlXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNYXhEYXRlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heERhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heFllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4TW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heERhdGUgPSBkZWZhdWx0cy5tYXhEYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4WWVhciA9IGRlZmF1bHRzLm1heFllYXI7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhNb250aCA9IGRlZmF1bHRzLm1heE1vbnRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX28uZW5kUmFuZ2UgPSBkZWZhdWx0cy5lbmRSYW5nZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0U3RhcnRSYW5nZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX28uc3RhcnRSYW5nZSA9IHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldEVuZFJhbmdlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fby5lbmRSYW5nZSA9IHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZWZyZXNoIHRoZSBIVE1MXG4gICAgICAgICAqL1xuICAgICAgICBkcmF3OiBmdW5jdGlvbihmb3JjZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl92ICYmICFmb3JjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5fbyxcbiAgICAgICAgICAgICAgICBtaW5ZZWFyID0gb3B0cy5taW5ZZWFyLFxuICAgICAgICAgICAgICAgIG1heFllYXIgPSBvcHRzLm1heFllYXIsXG4gICAgICAgICAgICAgICAgbWluTW9udGggPSBvcHRzLm1pbk1vbnRoLFxuICAgICAgICAgICAgICAgIG1heE1vbnRoID0gb3B0cy5tYXhNb250aCxcbiAgICAgICAgICAgICAgICBodG1sID0gJycsXG4gICAgICAgICAgICAgICAgcmFuZElkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5feSA8PSBtaW5ZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feSA9IG1pblllYXI7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtaW5Nb250aCkgJiYgdGhpcy5fbSA8IG1pbk1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX20gPSBtaW5Nb250aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5feSA+PSBtYXhZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feSA9IG1heFllYXI7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtYXhNb250aCkgJiYgdGhpcy5fbSA+IG1heE1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX20gPSBtYXhNb250aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmRJZCA9ICdwaWthLXRpdGxlLScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKS5zdWJzdHIoMCwgMik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgb3B0cy5udW1iZXJPZk1vbnRoczsgYysrKSB7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInBpa2EtbGVuZGFyXCI+JyArIHJlbmRlclRpdGxlKHRoaXMsIGMsIHRoaXMuY2FsZW5kYXJzW2NdLnllYXIsIHRoaXMuY2FsZW5kYXJzW2NdLm1vbnRoLCB0aGlzLmNhbGVuZGFyc1swXS55ZWFyLCByYW5kSWQpICsgdGhpcy5yZW5kZXIodGhpcy5jYWxlbmRhcnNbY10ueWVhciwgdGhpcy5jYWxlbmRhcnNbY10ubW9udGgsIHJhbmRJZCkgKyAnPC9kaXY+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lbC5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIGlmKG9wdHMuZmllbGQudHlwZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy50cmlnZ2VyLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9vLm9uRHJhdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ub25EcmF3KHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgc2NyZWVuIHJlYWRlciB1c2VyIGtub3cgdG8gdXNlIGFycm93IGtleXNcbiAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIG9wdHMuYXJpYUxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3RQb3NpdGlvbjogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZmllbGQsIHBFbCwgd2lkdGgsIGhlaWdodCwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsIHNjcm9sbFRvcCwgbGVmdCwgdG9wLCBjbGllbnRSZWN0LCBsZWZ0QWxpZ25lZCwgYm90dG9tQWxpZ25lZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX28uY29udGFpbmVyKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXG4gICAgICAgICAgICBmaWVsZCA9IHRoaXMuX28udHJpZ2dlcjtcbiAgICAgICAgICAgIHBFbCA9IGZpZWxkO1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLmVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5lbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgbGVmdEFsaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgYm90dG9tQWxpZ25lZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2xpZW50UmVjdCA9IGZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGxlZnQgPSBjbGllbnRSZWN0LmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgdG9wID0gY2xpZW50UmVjdC5ib3R0b20gKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBwRWwub2Zmc2V0TGVmdDtcbiAgICAgICAgICAgICAgICB0b3AgID0gcEVsLm9mZnNldFRvcCArIHBFbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgd2hpbGUoKHBFbCA9IHBFbC5vZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gcEVsLm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgICAgIHRvcCAgKz0gcEVsLm9mZnNldFRvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRlZmF1bHQgcG9zaXRpb24gaXMgYm90dG9tICYgbGVmdFxuICAgICAgICAgICAgaWYgKCh0aGlzLl9vLnJlcG9zaXRpb24gJiYgbGVmdCArIHdpZHRoID4gdmlld3BvcnRXaWR0aCkgfHxcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigncmlnaHQnKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIGxlZnQgLSB3aWR0aCArIGZpZWxkLm9mZnNldFdpZHRoID4gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICBsZWZ0QWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0aGlzLl9vLnJlcG9zaXRpb24gJiYgdG9wICsgaGVpZ2h0ID4gdmlld3BvcnRIZWlnaHQgKyBzY3JvbGxUb3ApIHx8XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoJ3RvcCcpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgdG9wIC0gaGVpZ2h0IC0gZmllbGQub2Zmc2V0SGVpZ2h0ID4gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRvcCA9IHRvcCAtIGhlaWdodCAtIGZpZWxkLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgICAgICBib3R0b21BbGlnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xuICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSB0b3AgKyAncHgnO1xuXG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmVsLCBsZWZ0QWxpZ25lZCA/ICdsZWZ0LWFsaWduZWQnIDogJ3JpZ2h0LWFsaWduZWQnKTtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuZWwsIGJvdHRvbUFsaWduZWQgPyAnYm90dG9tLWFsaWduZWQnIDogJ3RvcC1hbGlnbmVkJyk7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhbGVmdEFsaWduZWQgPyAnbGVmdC1hbGlnbmVkJyA6ICdyaWdodC1hbGlnbmVkJyk7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhYm90dG9tQWxpZ25lZCA/ICdib3R0b20tYWxpZ25lZCcgOiAndG9wLWFsaWduZWQnKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmVuZGVyIEhUTUwgZm9yIGEgcGFydGljdWxhciBtb250aFxuICAgICAgICAgKi9cbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgcmFuZElkKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgb3B0cyAgID0gdGhpcy5fbyxcbiAgICAgICAgICAgICAgICBub3cgICAgPSBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIGRheXMgICA9IGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICAgICAgICBiZWZvcmUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCksXG4gICAgICAgICAgICAgICAgZGF0YSAgID0gW10sXG4gICAgICAgICAgICAgICAgcm93ICAgID0gW107XG4gICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkobm93KTtcbiAgICAgICAgICAgIGlmIChvcHRzLmZpcnN0RGF5ID4gMCkge1xuICAgICAgICAgICAgICAgIGJlZm9yZSAtPSBvcHRzLmZpcnN0RGF5O1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZSArPSA3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2aW91c01vbnRoID0gbW9udGggPT09IDAgPyAxMSA6IG1vbnRoIC0gMSxcbiAgICAgICAgICAgICAgICBuZXh0TW9udGggPSBtb250aCA9PT0gMTEgPyAwIDogbW9udGggKyAxLFxuICAgICAgICAgICAgICAgIHllYXJPZlByZXZpb3VzTW9udGggPSBtb250aCA9PT0gMCA/IHllYXIgLSAxIDogeWVhcixcbiAgICAgICAgICAgICAgICB5ZWFyT2ZOZXh0TW9udGggPSBtb250aCA9PT0gMTEgPyB5ZWFyICsgMSA6IHllYXIsXG4gICAgICAgICAgICAgICAgZGF5c0luUHJldmlvdXNNb250aCA9IGdldERheXNJbk1vbnRoKHllYXJPZlByZXZpb3VzTW9udGgsIHByZXZpb3VzTW9udGgpO1xuICAgICAgICAgICAgdmFyIGNlbGxzID0gZGF5cyArIGJlZm9yZSxcbiAgICAgICAgICAgICAgICBhZnRlciA9IGNlbGxzO1xuICAgICAgICAgICAgd2hpbGUoYWZ0ZXIgPiA3KSB7XG4gICAgICAgICAgICAgICAgYWZ0ZXIgLT0gNztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbGxzICs9IDcgLSBhZnRlcjtcbiAgICAgICAgICAgIHZhciBpc1dlZWtTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHIgPSAwOyBpIDwgY2VsbHM7IGkrKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEgKyAoaSAtIGJlZm9yZSkpLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkID0gaXNEYXRlKHRoaXMuX2QpID8gY29tcGFyZURhdGVzKGRheSwgdGhpcy5fZCkgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNUb2RheSA9IGNvbXBhcmVEYXRlcyhkYXksIG5vdyksXG4gICAgICAgICAgICAgICAgICAgIGhhc0V2ZW50ID0gb3B0cy5ldmVudHMuaW5kZXhPZihkYXkudG9EYXRlU3RyaW5nKCkpICE9PSAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNFbXB0eSA9IGkgPCBiZWZvcmUgfHwgaSA+PSAoZGF5cyArIGJlZm9yZSksXG4gICAgICAgICAgICAgICAgICAgIGRheU51bWJlciA9IDEgKyAoaSAtIGJlZm9yZSksXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gbW9udGgsXG4gICAgICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0UmFuZ2UgPSBvcHRzLnN0YXJ0UmFuZ2UgJiYgY29tcGFyZURhdGVzKG9wdHMuc3RhcnRSYW5nZSwgZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgaXNFbmRSYW5nZSA9IG9wdHMuZW5kUmFuZ2UgJiYgY29tcGFyZURhdGVzKG9wdHMuZW5kUmFuZ2UsIGRheSksXG4gICAgICAgICAgICAgICAgICAgIGlzSW5SYW5nZSA9IG9wdHMuc3RhcnRSYW5nZSAmJiBvcHRzLmVuZFJhbmdlICYmIG9wdHMuc3RhcnRSYW5nZSA8IGRheSAmJiBkYXkgPCBvcHRzLmVuZFJhbmdlLFxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkID0gKG9wdHMubWluRGF0ZSAmJiBkYXkgPCBvcHRzLm1pbkRhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5tYXhEYXRlICYmIGRheSA+IG9wdHMubWF4RGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRzLmRpc2FibGVXZWVrZW5kcyAmJiBpc1dlZWtlbmQoZGF5KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRzLmRpc2FibGVEYXlGbiAmJiBvcHRzLmRpc2FibGVEYXlGbihkYXkpKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSBkYXlzSW5QcmV2aW91c01vbnRoICsgZGF5TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOdW1iZXIgPSBwcmV2aW91c01vbnRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJPZlByZXZpb3VzTW9udGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSBkYXlOdW1iZXIgLSBkYXlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOdW1iZXIgPSBuZXh0TW9udGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhck9mTmV4dE1vbnRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRheUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheTogZGF5TnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg6IG1vbnRoTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhcjogeWVhck51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0V2ZW50OiBoYXNFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvZGF5OiBpc1RvZGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW1wdHk6IGlzRW1wdHksXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0UmFuZ2U6IGlzU3RhcnRSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5kUmFuZ2U6IGlzRW5kUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2U6IGlzSW5SYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IG9wdHMuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczogb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHNcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRzLnBpY2tXaG9sZVdlZWsgJiYgaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBpc1dlZWtTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcm93LnB1c2gocmVuZGVyRGF5KGRheUNvbmZpZykpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCsrciA9PT0gNykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LnVuc2hpZnQocmVuZGVyV2VlayhpIC0gYmVmb3JlLCBtb250aCwgeWVhcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZW5kZXJSb3cocm93LCBvcHRzLmlzUlRMLCBvcHRzLnBpY2tXaG9sZVdlZWssIGlzV2Vla1NlbGVjdGVkKSk7XG4gICAgICAgICAgICAgICAgICAgIHJvdyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyVGFibGUob3B0cywgZGF0YSwgcmFuZElkKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpc1Zpc2libGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Y7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2hvdzogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAnaXMtaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbk9wZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGlkZTogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuX3Y7XG4gICAgICAgICAgICBpZiAodiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5fb25DbGljayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSAnc3RhdGljJzsgLy8gcmVzZXRcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5lbCwgJ2lzLWhpZGRlbicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3YgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0aGlzLl9vLm9uQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbkNsb3NlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHQU1FIE9WRVJcbiAgICAgICAgICovXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLl9vO1xuXG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50KHRoaXMuZWwsICdtb3VzZWRvd24nLCB0aGlzLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAndG91Y2hlbmQnLCB0aGlzLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAnY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX29uS2V5Q2hhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy5maWVsZCwgJ2NoYW5nZScsIHRoaXMuX29uSW5wdXRDaGFuZ2UpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMudHJpZ2dlciwgJ2NsaWNrJywgdGhpcy5fb25JbnB1dENsaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy50cmlnZ2VyLCAnZm9jdXMnLCB0aGlzLl9vbklucHV0Rm9jdXMpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChvcHRzLnRyaWdnZXIsICdibHVyJywgdGhpcy5fb25JbnB1dEJsdXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICByZXR1cm4gUGlrYWRheTtcbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LkF1dG9saW5rZXI7IiwiLyogZXNsaW50IGtleS1zcGFjaW5nOiAwICovXG4vKiBlc2xpbnQgcXVvdGUtcHJvcHM6IDAgKi9cblxuY29uc3QgTWltZSA9IHtcblx0J2VtbCc6ICdtZXNzYWdlL3JmYzgyMicsXG5cdCdtaW1lJzogJ21lc3NhZ2UvcmZjODIyJyxcblx0J3R4dCc6ICd0ZXh0L3BsYWluJyxcblx0J3RleHQnOiAndGV4dC9wbGFpbicsXG5cdCdkZWYnOiAndGV4dC9wbGFpbicsXG5cdCdsaXN0JzogJ3RleHQvcGxhaW4nLFxuXHQnaW4nOiAndGV4dC9wbGFpbicsXG5cdCdpbmknOiAndGV4dC9wbGFpbicsXG5cdCdsb2cnOiAndGV4dC9wbGFpbicsXG5cdCdzcWwnOiAndGV4dC9wbGFpbicsXG5cdCdjZmcnOiAndGV4dC9wbGFpbicsXG5cdCdjb25mJzogJ3RleHQvcGxhaW4nLFxuXHQnYXNjJzogJ3RleHQvcGxhaW4nLFxuXHQncnR4JzogJ3RleHQvcmljaHRleHQnLFxuXHQndmNhcmQnOiAndGV4dC92Y2FyZCcsXG5cdCd2Y2YnOiAndGV4dC92Y2FyZCcsXG5cdCdodG0nOiAndGV4dC9odG1sJyxcblx0J2h0bWwnOiAndGV4dC9odG1sJyxcblx0J2Nzdic6ICd0ZXh0L2NzdicsXG5cdCdpY3MnOiAndGV4dC9jYWxlbmRhcicsXG5cdCdpZmInOiAndGV4dC9jYWxlbmRhcicsXG5cdCd4bWwnOiAndGV4dC94bWwnLFxuXHQnanNvbic6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0J3N3Zic6ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsXG5cdCdobHAnOiAnYXBwbGljYXRpb24vd2luaGxwJyxcblx0J3dndCc6ICdhcHBsaWNhdGlvbi93aWRnZXQnLFxuXHQnY2htJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1odG1saGVscCcsXG5cdCdwMTAnOiAnYXBwbGljYXRpb24vcGtjczEwJyxcblx0J3A3Yyc6ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJyxcblx0J3A3bSc6ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJyxcblx0J3A3cyc6ICdhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmUnLFxuXHQndG9ycmVudCc6ICdhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQnLFxuXG5cdC8vIHNjcmlwdHNcblx0J2pzJzogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLFxuXHQncGwnOiAndGV4dC9wZXJsJyxcblx0J2Nzcyc6ICd0ZXh0L2NzcycsXG5cdCdhc3AnOiAndGV4dC9hc3AnLFxuXHQncGhwJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BocDMnOiAnYXBwbGljYXRpb24veC1odHRwZC1waHAnLFxuXHQncGhwNCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHA1JzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BodG1sJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblxuXHQvLyBpbWFnZXNcblx0J3BuZyc6ICdpbWFnZS9wbmcnLFxuXHQnanBnJzogJ2ltYWdlL2pwZWcnLFxuXHQnanBlZyc6ICdpbWFnZS9qcGVnJyxcblx0J2pwZSc6ICdpbWFnZS9qcGVnJyxcblx0J2pmaWYnOiAnaW1hZ2UvanBlZycsXG5cdCdnaWYnOiAnaW1hZ2UvZ2lmJyxcblx0J2JtcCc6ICdpbWFnZS9ibXAnLFxuXHQnY2dtJzogJ2ltYWdlL2NnbScsXG5cdCdpZWYnOiAnaW1hZ2UvaWVmJyxcblx0J2ljbyc6ICdpbWFnZS94LWljb24nLFxuXHQndGlmJzogJ2ltYWdlL3RpZmYnLFxuXHQndGlmZic6ICdpbWFnZS90aWZmJyxcblx0J3N2Zyc6ICdpbWFnZS9zdmcreG1sJyxcblx0J3N2Z3onOiAnaW1hZ2Uvc3ZnK3htbCcsXG5cdCdkanYnOiAnaW1hZ2Uvdm5kLmRqdnUnLFxuXHQnZGp2dSc6ICdpbWFnZS92bmQuZGp2dScsXG5cdCd3ZWJwJzogJ2ltYWdlL3dlYnAnLFxuXG5cdC8vIGFyY2hpdmVzXG5cdCd6aXAnOiAnYXBwbGljYXRpb24vemlwJyxcblx0Jzd6JzogJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCcsXG5cdCdyYXInOiAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCcsXG5cdCdleGUnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J2RsbCc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnc2NyJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdjb20nOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J2JhdCc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnbXNpJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdjYWInOiAnYXBwbGljYXRpb24vdm5kLm1zLWNhYi1jb21wcmVzc2VkJyxcblx0J2d6JzogJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsXG5cdCd0Z3onOiAnYXBwbGljYXRpb24veC1nemlwJyxcblx0J2J6JzogJ2FwcGxpY2F0aW9uL3gtYnppcCcsXG5cdCdiejInOiAnYXBwbGljYXRpb24veC1iemlwMicsXG5cdCdkZWInOiAnYXBwbGljYXRpb24veC1kZWJpYW4tcGFja2FnZScsXG5cblx0Ly8gZm9udHNcblx0J3BzZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtbGludXgtcHNmJyxcblx0J290Zic6ICdhcHBsaWNhdGlvbi94LWZvbnQtb3RmJyxcblx0J3BjZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtcGNmJyxcblx0J3NuZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtc25mJyxcblx0J3R0Zic6ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJyxcblx0J3R0Yyc6ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJyxcblxuXHQvLyBhdWRpb1xuXHQnbXAzJzogJ2F1ZGlvL21wZWcnLFxuXHQnYW1yJzogJ2F1ZGlvL2FtcicsXG5cdCdhYWMnOiAnYXVkaW8veC1hYWMnLFxuXHQnYWlmJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCdhaWZjJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCdhaWZmJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCd3YXYnOiAnYXVkaW8veC13YXYnLFxuXHQnd21hJzogJ2F1ZGlvL3gtbXMtd21hJyxcblx0J3dheCc6ICdhdWRpby94LW1zLXdheCcsXG5cdCdtaWRpJzogJ2F1ZGlvL21pZGknLFxuXHQnbXA0YSc6ICdhdWRpby9tcDQnLFxuXHQnb2dnJzogJ2F1ZGlvL29nZycsXG5cdCd3ZWJhJzogJ2F1ZGlvL3dlYm0nLFxuXHQncmEnOiAnYXVkaW8veC1wbi1yZWFsYXVkaW8nLFxuXHQncmFtJzogJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJyxcblx0J3JtcCc6ICdhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4nLFxuXHQnbTN1JzogJ2F1ZGlvL3gtbXBlZ3VybCcsXG5cblx0Ly8gdmlkZW9cblx0J2Zsdic6ICd2aWRlby94LWZsdicsXG5cdCdxdCc6ICd2aWRlby9xdWlja3RpbWUnLFxuXHQnbW92JzogJ3ZpZGVvL3F1aWNrdGltZScsXG5cdCd3bXYnOiAndmlkZW8vd2luZG93cy1tZWRpYScsXG5cdCdhdmknOiAndmlkZW8veC1tc3ZpZGVvJyxcblx0J21wZyc6ICd2aWRlby9tcGVnJyxcblx0J21wZWcnOiAndmlkZW8vbXBlZycsXG5cdCdtcGUnOiAndmlkZW8vbXBlZycsXG5cdCdtMXYnOiAndmlkZW8vbXBlZycsXG5cdCdtMnYnOiAndmlkZW8vbXBlZycsXG5cdCczZ3AnOiAndmlkZW8vM2dwcCcsXG5cdCczZzInOiAndmlkZW8vM2dwcDInLFxuXHQnaDI2MSc6ICd2aWRlby9oMjYxJyxcblx0J2gyNjMnOiAndmlkZW8vaDI2MycsXG5cdCdoMjY0JzogJ3ZpZGVvL2gyNjQnLFxuXHQnanBndic6ICd2aWRlby9qcGd2Jyxcblx0J21wNCc6ICd2aWRlby9tcDQnLFxuXHQnbXA0dic6ICd2aWRlby9tcDQnLFxuXHQnbXBnNCc6ICd2aWRlby9tcDQnLFxuXHQnb2d2JzogJ3ZpZGVvL29nZycsXG5cdCd3ZWJtJzogJ3ZpZGVvL3dlYm0nLFxuXHQnbTR2JzogJ3ZpZGVvL3gtbTR2Jyxcblx0J2FzZic6ICd2aWRlby94LW1zLWFzZicsXG5cdCdhc3gnOiAndmlkZW8veC1tcy1hc2YnLFxuXHQnd20nOiAndmlkZW8veC1tcy13bScsXG5cdCd3bXgnOiAndmlkZW8veC1tcy13bXgnLFxuXHQnd3Z4JzogJ3ZpZGVvL3gtbXMtd3Z4Jyxcblx0J21vdmllJzogJ3ZpZGVvL3gtc2dpLW1vdmllJyxcblxuXHQvLyBhZG9iZVxuXHQncGRmJzogJ2FwcGxpY2F0aW9uL3BkZicsXG5cdCdwc2QnOiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCcsXG5cdCdhaSc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0Jyxcblx0J2Vwcyc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0Jyxcblx0J3BzJzogJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLFxuXG5cdC8vIG1zIG9mZmljZVxuXHQnZG9jJzogJ2FwcGxpY2F0aW9uL21zd29yZCcsXG5cdCdkb3QnOiAnYXBwbGljYXRpb24vbXN3b3JkJyxcblx0J3J0Zic6ICdhcHBsaWNhdGlvbi9ydGYnLFxuXHQneGxzJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG5cdCdwcHQnOiAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnLFxuXHQnZG9jeCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG5cdCd4bHN4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Jyxcblx0J2RvdHgnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUnLFxuXHQncHB0eCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJyxcblxuXHQvLyBvcGVuIG9mZmljZVxuXHQnb2R0JzogJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCcsXG5cdCdvZHMnOiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCdcbn07XG5cbmV4cG9ydCB7IE1pbWUsIE1pbWUgYXMgZGVmYXVsdCB9O1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZBVUxUID09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5hdGl2ZUl0ZXJhdG9yLmNhbGwodGhpcyk7IH07XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yKTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInJlcXVpcmUoJy4vZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgIUNvbGxlY3Rpb25Qcm90b3R5cGVbVE9fU1RSSU5HX1RBR10pIHtcbiAgICBoaWRlKENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gIH1cbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4geyB2YWx1ZTogaW5kZXgsIGRvbmU6IGZhbHNlIH07XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4geyB2YWx1ZTogdGFyZ2V0W2luZGV4XSwgZG9uZTogZmFsc2UgfTtcbiAgcmV0dXJuIHsgdmFsdWU6IFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGRvbmU6IGZhbHNlIH07XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaXNGdW5jIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCB7IHBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Bc2snLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzQXNrJ1xufSlcbmNsYXNzIEFza1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5hc2tEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy55ZXNCdXR0b24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5vQnV0dG9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnllc0ZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5ub0ZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZZZXNBY3Rpb24gPSBudWxsO1xuXHRcdHRoaXMuZk5vQWN0aW9uID0gbnVsbDtcblxuXHRcdHRoaXMuYkZvY3VzWWVzT25TaG93ID0gdHJ1ZTtcblx0XHR0aGlzLmJEaXNhYmVDbG9zZU9uRXNjID0gdHJ1ZTtcblx0XHR0aGlzLnNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Qb3B1cEFzaztcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5hc2tEZXNjKCcnKTtcblx0XHR0aGlzLnllc0J1dHRvbihpMThuKCdQT1BVUFNfQVNLL0JVVFRPTl9ZRVMnKSk7XG5cdFx0dGhpcy5ub0J1dHRvbihpMThuKCdQT1BVUFNfQVNLL0JVVFRPTl9OTycpKTtcblxuXHRcdHRoaXMueWVzRm9jdXMoZmFsc2UpO1xuXHRcdHRoaXMubm9Gb2N1cyhmYWxzZSk7XG5cblx0XHR0aGlzLmZZZXNBY3Rpb24gPSBudWxsO1xuXHRcdHRoaXMuZk5vQWN0aW9uID0gbnVsbDtcblx0fVxuXG5cdHllc0NsaWNrKCkge1xuXHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXG5cdFx0aWYgKGlzRnVuYyh0aGlzLmZZZXNBY3Rpb24pKSB7XG5cdFx0XHR0aGlzLmZZZXNBY3Rpb24uY2FsbChudWxsKTtcblx0XHR9XG5cdH1cblxuXHRub0NsaWNrKCkge1xuXHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXG5cdFx0aWYgKGlzRnVuYyh0aGlzLmZOb0FjdGlvbikpIHtcblx0XHRcdHRoaXMuZk5vQWN0aW9uLmNhbGwobnVsbCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQXNrRGVzY1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZlllc0Z1bmNcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGZOb0Z1bmNcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzWWVzQnV0dG9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc05vQnV0dG9uXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJGb2N1c1llc09uU2hvdyA9IHRydWVcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRvblNob3coYXNrRGVzYywgZlllc0Z1bmMgPSBudWxsLCBmTm9GdW5jID0gbnVsbCwgeWVzQnV0dG9uID0gJycsIG5vQnV0dG9uID0gJycsIGlzRm9jdXNZZXNPblNob3cgPSB0cnVlKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHR0aGlzLmZZZXNBY3Rpb24gPSBmWWVzRnVuYyB8fCBudWxsO1xuXHRcdHRoaXMuZk5vQWN0aW9uID0gZk5vRnVuYyB8fCBudWxsO1xuXG5cdFx0dGhpcy5hc2tEZXNjKGFza0Rlc2MgfHwgJycpO1xuXG5cdFx0aWYgKHllc0J1dHRvbikge1xuXHRcdFx0dGhpcy55ZXNCdXR0b24oeWVzQnV0dG9uKTtcblx0XHR9XG5cblx0XHRpZiAobm9CdXR0b24pIHtcblx0XHRcdHRoaXMubm9CdXR0b24obm9CdXR0b24pO1xuXHRcdH1cblxuXHRcdHRoaXMuYkZvY3VzWWVzT25TaG93ID0gISFpc0ZvY3VzWWVzT25TaG93O1xuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICh0aGlzLmJGb2N1c1llc09uU2hvdykge1xuXHRcdFx0dGhpcy55ZXNGb2N1cyh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGtleSgndGFiLCBzaGlmdCt0YWIsIHJpZ2h0LCBsZWZ0JywgS2V5U3RhdGUuUG9wdXBBc2ssICgpID0+IHtcblx0XHRcdGlmICh0aGlzLnllc0ZvY3VzKCkpIHtcblx0XHRcdFx0dGhpcy5ub0ZvY3VzKHRydWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy55ZXNGb2N1cyh0cnVlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGtleSgnZXNjJywgS2V5U3RhdGUuUG9wdXBBc2ssICgpID0+IHtcblx0XHRcdHRoaXMubm9DbGljaygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFza1BvcHVwVmlldywgQXNrUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIFByb3BlcnRpZXNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY2FjaGUgPSB7fTtcblxudmFyIHRocm93ZXIgPSBmdW5jdGlvbiAoaXQpIHsgdGhyb3cgaXQ7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBvcHRpb25zKSB7XG4gIGlmIChoYXMoY2FjaGUsIE1FVEhPRF9OQU1FKSkgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXTtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHZhciBBQ0NFU1NPUlMgPSBoYXMob3B0aW9ucywgJ0FDQ0VTU09SUycpID8gb3B0aW9ucy5BQ0NFU1NPUlMgOiBmYWxzZTtcbiAgdmFyIGFyZ3VtZW50MCA9IGhhcyhvcHRpb25zLCAwKSA/IG9wdGlvbnNbMF0gOiB0aHJvd2VyO1xuICB2YXIgYXJndW1lbnQxID0gaGFzKG9wdGlvbnMsIDEpID8gb3B0aW9uc1sxXSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gY2FjaGVbTUVUSE9EX05BTUVdID0gISFtZXRob2QgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoQUNDRVNTT1JTICYmICFERVNDUklQVE9SUykgcmV0dXJuIHRydWU7XG4gICAgdmFyIE8gPSB7IGxlbmd0aDogLTEgfTtcblxuICAgIGlmIChBQ0NFU1NPUlMpIGRlZmluZVByb3BlcnR5KE8sIDEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiB0aHJvd2VyIH0pO1xuICAgIGVsc2UgT1sxXSA9IDE7XG5cbiAgICBtZXRob2QuY2FsbChPLCBhcmd1bWVudDAsIGFyZ3VtZW50MSk7XG4gIH0pO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpICYmIGl0ICE9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgU3RyaW5nKGl0KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSkge1xuICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gQXJyYXlWYWx1ZXMpIHRyeSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gPSBBcnJheVZhbHVlcztcbiAgICB9XG4gICAgaWYgKCFDb2xsZWN0aW9uUHJvdG90eXBlW1RPX1NUUklOR19UQUddKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgICB9XG4gICAgaWYgKERPTUl0ZXJhYmxlc1tDT0xMRUNUSU9OX05BTUVdKSBmb3IgKHZhciBNRVRIT0RfTkFNRSBpbiBBcnJheUl0ZXJhdG9yTWV0aG9kcykge1xuICAgICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gIT09IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSkgdHJ5IHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIE1FVEhPRF9OQU1FLCBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gPSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9mYWlscycpO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvcixcbi8vIHNvIHdlIHVzZSBhbiBpbnRlcm1lZGlhdGUgZnVuY3Rpb24uXG5mdW5jdGlvbiBSRShzLCBmKSB7XG4gIHJldHVybiBSZWdFeHAocywgZik7XG59XG5cbmV4cG9ydHMuVU5TVVBQT1JURURfWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbiAgdmFyIHJlID0gUkUoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9IG51bGw7XG59KTtcblxuZXhwb3J0cy5CUk9LRU5fQ0FSRVQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzY4N1xuICB2YXIgcmUgPSBSRSgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9IG51bGw7XG59KTtcbiIsInZhciByZWR1Y2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JlZHVjZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZWR1Y2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZWR1Y2UpID8gcmVkdWNlIDogb3duO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0KTtcbiAgICB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG5pZiAoSXRlcmF0b3JQcm90b3R5cGUgPT0gdW5kZWZpbmVkKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxuaWYgKCFJU19QVVJFICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSkgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIHNjcmlwdCA9ICdzY3JpcHQnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBqcyA9ICdqYXZhJyArIHNjcmlwdCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gU3RyaW5nKGpzKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArIHNjcmlwdCArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy8nICsgc2NyaXB0ICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4obGVuZ3RoLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIE1FVEhPRF9SRVFVSVJFRCA9IHRvU3RyaW5nICE9PSAoe30pLnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmIE1FVEhPRF9SRVFVSVJFRCkgaGlkZSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIG5ldyAoQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCIvLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNhcnJheVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjbGFzc29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyBmb3JFYWNoIDogb3duO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgY29udmVydExhbmdOYW1lIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuLy8gaW1wb3J0IHt2aWV3LCBWaWV3VHlwZX0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0xhbmd1YWdlcycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNMYW5ndWFnZXMnXG59KVxuY2xhc3MgTGFuZ3VhZ2VzUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmZMYW5nID0gbnVsbDtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5sYW5ncyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHVzZXJMYW5ndWFnZSA9IHRoaXMudXNlckxhbmd1YWdlKCk7XG5cdFx0XHRyZXR1cm4gXy5tYXAodGhpcy5sYW5ncygpLCAobGFuZ3VhZ2UpID0+ICh7XG5cdFx0XHRcdGtleTogbGFuZ3VhZ2UsXG5cdFx0XHRcdHVzZXI6IGxhbmd1YWdlID09PSB1c2VyTGFuZ3VhZ2UsXG5cdFx0XHRcdHNlbGVjdGVkOiBrby5vYnNlcnZhYmxlKGZhbHNlKSxcblx0XHRcdFx0ZnVsbE5hbWU6IGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSlcblx0XHRcdH0pKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubGFuZ3Muc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuc2V0TGFuZ3VhZ2VTZWxlY3Rpb24oKTtcblx0XHR9KTtcblx0fVxuXG5cdGxhbmd1YWdlVG9vbHRpcE5hbWUobGFuZ3VhZ2UpIHtcblx0XHRjb25zdCByZXN1bHQgPSBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UsIHRydWUpO1xuXHRcdHJldHVybiBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UsIGZhbHNlKSA9PT0gcmVzdWx0ID8gJycgOiByZXN1bHQ7XG5cdH1cblxuXHRzZXRMYW5ndWFnZVNlbGVjdGlvbigpIHtcblx0XHRjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMuZkxhbmcgPyBrby51bndyYXAodGhpcy5mTGFuZykgOiAnJztcblx0XHRfLmVhY2godGhpcy5sYW5ndWFnZXMoKSwgKGl0ZW0pID0+IHtcblx0XHRcdGl0ZW0uc2VsZWN0ZWQoaXRlbS5rZXkgPT09IGN1cnJlbnRMYW5nKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQmVmb3JlU2hvdygpIHtcblx0XHR0aGlzLmZMYW5nID0gbnVsbDtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSgnJyk7XG5cblx0XHR0aGlzLmxhbmdzKFtdKTtcblx0fVxuXG5cdG9uU2hvdyhmTGFuZ3VhZ2UsIGxhbmdzLCB1c2VyTGFuZ3VhZ2UpIHtcblx0XHR0aGlzLmZMYW5nID0gZkxhbmd1YWdlO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlKHVzZXJMYW5ndWFnZSB8fCAnJyk7XG5cblx0XHR0aGlzLmxhbmdzKGxhbmdzKTtcblx0fVxuXG5cdGNoYW5nZUxhbmd1YWdlKGxhbmcpIHtcblx0XHRpZiAodGhpcy5mTGFuZykge1xuXHRcdFx0dGhpcy5mTGFuZyhsYW5nKTtcblx0XHR9XG5cblx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0fVxufVxuXG5leHBvcnQgeyBMYW5ndWFnZXNQb3B1cFZpZXcsIExhbmd1YWdlc1BvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgeyBraWxsQ3RybEFDdHJsUywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5LCBjcmVhdGVDb21tYW5kTGVnYWN5LCBkb21SZWFkeSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyAkd2luLCAkaHRtbCwgZGF0YSBhcyBHbG9iYWxzRGF0YSwgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIEVudW1zIGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBQbHVnaW5zIGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBFbWFpbE1vZGVsIH0gZnJvbSAnTW9kZWwvRW1haWwnO1xuXG5leHBvcnQgZGVmYXVsdCAoQXBwKSA9PiB7XG5cdEdsb2JhbHNEYXRhLl9fQVBQX18gPSBBcHA7XG5cblx0JHdpbi5vbigna2V5ZG93bicsIGtpbGxDdHJsQUN0cmxTKS5vbigndW5sb2FkJywgKCkgPT4ge1xuXHRcdEdsb2JhbHNEYXRhLmJVbmxvYWQgPSB0cnVlO1xuXHR9KTtcblxuXHQkaHRtbC5hZGRDbGFzcyhiTW9iaWxlRGV2aWNlID8gJ21vYmlsZScgOiAnbm8tbW9iaWxlJykub24oJ2NsaWNrLmRyb3Bkb3duLmRhdGEtYXBpJywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KTtcblxuXHRjb25zdCBybCA9IHdpbmRvdy5ybCB8fCB7fTtcblxuXHRybC5pMThuID0gaTE4bjtcblx0cmwuY3JlYXRlQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRMZWdhY3k7XG5cblx0cmwuYWRkU2V0dGluZ3NWaWV3TW9kZWwgPSBQbHVnaW5zLmFkZFNldHRpbmdzVmlld01vZGVsO1xuXHRybC5hZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluID0gUGx1Z2lucy5hZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluO1xuXG5cdHJsLmFkZEhvb2sgPSBQbHVnaW5zLmFkZEhvb2s7XG5cdHJsLnNldHRpbmdzR2V0ID0gUGx1Z2lucy5tYWluU2V0dGluZ3NHZXQ7XG5cdHJsLnBsdWdpblNldHRpbmdzR2V0ID0gUGx1Z2lucy5zZXR0aW5nc0dldDtcblx0cmwucGx1Z2luUmVtb3RlUmVxdWVzdCA9IFBsdWdpbnMucmVtb3RlUmVxdWVzdDtcblxuXHRybC5FbWFpbE1vZGVsID0gRW1haWxNb2RlbDtcblx0cmwuRW51bXMgPSBFbnVtcztcblxuXHR3aW5kb3cucmwgPSBybDtcblxuXHR3aW5kb3cuX19BUFBfQk9PVCA9IChmRXJyb3JDYWxsYmFjaykgPT4ge1xuXHRcdGRvbVJlYWR5KCgpID0+IHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aWYgKHdpbmRvdy5yYWlubG9vcFRFTVBMQVRFUyAmJiB3aW5kb3cucmFpbmxvb3BURU1QTEFURVNbMF0pIHtcblx0XHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JsLXRlbXBsYXRlcycpLmlubmVySFRNTCA9IHdpbmRvdy5yYWlubG9vcFRFTVBMQVRFU1swXTtcblxuXHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCduby1qcyBybC1ib290ZWQtdHJpZ2dlcicpLmFkZENsYXNzKCdybC1ib290ZWQnKTtcblxuXHRcdFx0XHRcdFx0QXBwLmJvb3RzdGFydCgpO1xuXHRcdFx0XHRcdH0sIEVudW1zLk1hZ2ljcy5UaW1lMTBtcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZkVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHdpbmRvdy5fX0FQUF9CT09UID0gbnVsbDtcblx0XHRcdH0sIEVudW1zLk1hZ2ljcy5UaW1lMTBtcyk7XG5cdFx0fSk7XG5cdH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGVcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7ICRodG1sLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEFic3RyYWN0QXBwU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGFuaW0gPSBiTW9iaWxlRGV2aWNlIHx8ICF2YWx1ZTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1hbmltJywgIWFuaW0pLnRvZ2dsZUNsYXNzKCduby1ybC1hbmltJywgYW5pbSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdHRoaXMucHJlbSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY29tbXVuaXR5ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93TGFuZ3VhZ2VzT25Mb2dpbicpKTtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MnKSk7XG5cdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnTmV3TW92ZVRvRm9sZGVyJykpO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnSW50ZXJmYWNlQW5pbWF0aW9uJykpO1xuXG5cdFx0dGhpcy5wcmVtKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1ByZW1UeXBlJykpO1xuXHRcdHRoaXMuY29tbXVuaXR5KCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbW11bml0eScpKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcFN0b3JlLCBBYnN0cmFjdEFwcFN0b3JlIGFzIGRlZmF1bHQgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmVkdWNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qva2V5c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcblxuaW1wb3J0IHsgVE9LRU5fRVJST1JfTElNSVQsIEFKQVhfRVJST1JfTElNSVQsIERFRkFVTFRfQUpBWF9USU1FT1VUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGluQXJyYXksIHBJbnQsIHBTdHJpbmcsIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGRhdGEgYXMgR2xvYmFsc0RhdGEgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBhamF4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IHJ1bkhvb2sgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBBYnN0cmFjdEFqYXhSZW1vdGUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLm9SZXF1ZXN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXF1ZXN0QWN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVHlwZVxuXHQgKiBAcGFyYW0gez9BamF4SnNvbkRlZmF1bHRSZXNwb25zZX0gb0RhdGFcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ2FjaGVkXG5cdCAqIEBwYXJhbSB7Kj19IG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHQgKi9cblx0ZGVmYXVsdFJlc3BvbnNlKGZDYWxsYmFjaywgc1JlcXVlc3RBY3Rpb24sIHNUeXBlLCBvRGF0YSwgYkNhY2hlZCwgb1JlcXVlc3RQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgZkNhbGwgPSAoKSA9PiB7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gc1R5cGUgJiYgR2xvYmFsc0RhdGEuYlVubG9hZCkge1xuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlVubG9hZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmICFvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9EYXRhICYmXG5cdFx0XHRcdFx0LTEgPFxuXHRcdFx0XHRcdFx0aW5BcnJheShvRGF0YS5FcnJvckNvZGUsIFtcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkF1dGhFcnJvcixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY2Vzc0Vycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCxcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY291bnROb3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLlVua25vd25FcnJvclxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaUFqYXhFcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0RhdGEgJiYgTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiA9PT0gb0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCArPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFRPS0VOX0VSUk9SX0xJTUlUIDwgR2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvRGF0YS5DbGVhckF1dGggfHwgb0RhdGEuTG9nb3V0IHx8IEFKQVhfRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQpIHtcblx0XHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKSB7XG5cdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKCk7XG5cblx0XHRcdFx0XHRcdGlmICghb0RhdGEuQ2xlYXJBdXRoICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQgPSAwO1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0cnVuSG9vaygnYWpheC1kZWZhdWx0LXJlc3BvbnNlJywgW1xuXHRcdFx0XHRzUmVxdWVzdEFjdGlvbixcblx0XHRcdFx0U3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgPyBvRGF0YSA6IG51bGwsXG5cdFx0XHRcdHNUeXBlLFxuXHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRvUmVxdWVzdFBhcmFtZXRlcnNcblx0XHRcdF0pO1xuXG5cdFx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRcdGZDYWxsYmFjayhcblx0XHRcdFx0XHRzVHlwZSxcblx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSA/IG9EYXRhIDogbnVsbCxcblx0XHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRcdHNSZXF1ZXN0QWN0aW9uLFxuXHRcdFx0XHRcdG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRzd2l0Y2ggKHNUeXBlKSB7XG5cdFx0XHRjYXNlICdzdWNjZXNzJzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2Fib3J0Jzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLkVycm9yO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3IgPT09IHNUeXBlKSB7XG5cdFx0XHRfLmRlbGF5KGZDYWxsLCAzMDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmQ2FsbCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZlJlc3VsdENhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gez9udW1iZXI9fSBpVGltZU91dCA9IDIwMDAwXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0dldEFkZCA9ICcnXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQWJvcnRBY3Rpb25zID0gW11cblx0ICogQHJldHVybnMge2pRdWVyeS5qcVhIUn1cblx0ICovXG5cdGFqYXhSZXF1ZXN0KGZSZXN1bHRDYWxsYmFjaywgcGFyYW1zLCBpVGltZU91dCA9IDIwMDAwLCBzR2V0QWRkID0gJycsIGFib3J0QWN0aW9ucyA9IFtdKSB7XG5cdFx0Y29uc3QgaXNQb3N0ID0gJycgPT09IHNHZXRBZGQsXG5cdFx0XHRoZWFkZXJzID0ge30sXG5cdFx0XHRzdGFydCA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcblxuXHRcdGxldCBhY3Rpb24gPSAnJztcblxuXHRcdHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblx0XHRhY3Rpb24gPSBwYXJhbXMuQWN0aW9uIHx8ICcnO1xuXG5cdFx0aWYgKGFjdGlvbiAmJiAwIDwgYWJvcnRBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0Xy5lYWNoKGFib3J0QWN0aW9ucywgKGFjdGlvblRvQWJvcnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdKSB7XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uX19hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uYWJvcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdLmFib3J0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUG9zdCkge1xuXHRcdFx0cGFyYW1zLlhUb2tlbiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd0b2tlbicpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9EZWZBamF4ID0gJC5hamF4KHtcblx0XHRcdHR5cGU6IGlzUG9zdCA/ICdQT1NUJyA6ICdHRVQnLFxuXHRcdFx0dXJsOiBhamF4KHNHZXRBZGQpLFxuXHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxuXHRcdFx0ZGF0YTogaXNQb3N0ID8gcGFyYW1zIDoge30sXG5cdFx0XHRoZWFkZXJzOiBoZWFkZXJzLFxuXHRcdFx0dGltZW91dDogaVRpbWVPdXQsXG5cdFx0XHRnbG9iYWw6IHRydWVcblx0XHR9KTtcblxuXHRcdG9EZWZBamF4LmFsd2F5cygob0RhdGEsIHNUeXBlKSA9PiB7XG5cdFx0XHRsZXQgY2FjaGVkID0gZmFsc2U7XG5cdFx0XHRpZiAob0RhdGEgJiYgb0RhdGEuVGltZSkge1xuXHRcdFx0XHRjYWNoZWQgPSBwSW50KG9EYXRhLlRpbWUpID4gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5VcGRhdGVUb2tlbikge1xuXHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLnNldENsaWVudFNpZGVUb2tlbikge1xuXHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKG9EYXRhLlVwZGF0ZVRva2VuKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWN0aW9uICYmIHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uX19hYm9ydGVkKSB7XG5cdFx0XHRcdFx0c1R5cGUgPSAnYWJvcnQnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGVmYXVsdFJlc3BvbnNlKGZSZXN1bHRDYWxsYmFjaywgYWN0aW9uLCBzVHlwZSwgb0RhdGEsIGNhY2hlZCwgcGFyYW1zKTtcblx0XHR9KTtcblxuXHRcdGlmIChhY3Rpb24gJiYgMCA8IGFib3J0QWN0aW9ucy5sZW5ndGggJiYgLTEgPCBpbkFycmF5KGFjdGlvbiwgYWJvcnRBY3Rpb25zKSkge1xuXHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5fX2Fib3J0ZWQgPSB0cnVlO1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5hYm9ydCkge1xuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uYWJvcnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG9EZWZBamF4O1xuXHRcdH1cblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cdFx0b0RlZkFqYXguY2F0Y2goY29uc29sZS5sb2cpO1xuXHRcdHJldHVybiBvRGVmQWpheDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQWN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0PX0gb1BhcmFtZXRlcnNcblx0ICogQHBhcmFtIHs/bnVtYmVyPX0gaVRpbWVvdXRcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzR2V0QWRkID0gJydcblx0ICogQHBhcmFtIHtBcnJheT19IGFBYm9ydEFjdGlvbnMgPSBbXVxuXHQgKi9cblx0ZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCBzQWN0aW9uLCBvUGFyYW1ldGVycywgaVRpbWVvdXQsIHNHZXRBZGQsIGFBYm9ydEFjdGlvbnMpIHtcblx0XHRvUGFyYW1ldGVycyA9IG9QYXJhbWV0ZXJzIHx8IHt9O1xuXHRcdG9QYXJhbWV0ZXJzLkFjdGlvbiA9IHNBY3Rpb247XG5cblx0XHRzR2V0QWRkID0gcFN0cmluZyhzR2V0QWRkKTtcblxuXHRcdHJ1bkhvb2soJ2FqYXgtZGVmYXVsdC1yZXF1ZXN0JywgW3NBY3Rpb24sIG9QYXJhbWV0ZXJzLCBzR2V0QWRkXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5hamF4UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdG9QYXJhbWV0ZXJzLFxuXHRcdFx0aXNVbmQoaVRpbWVvdXQpID8gREVGQVVMVF9BSkFYX1RJTUVPVVQgOiBwSW50KGlUaW1lb3V0KSxcblx0XHRcdHNHZXRBZGQsXG5cdFx0XHRhQWJvcnRBY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRub29wKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTm9vcCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGdldFB1YmxpY0tleShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0dldFB1YmxpY0tleScpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNWZXJzaW9uXG5cdCAqL1xuXHRqc1ZlcnNpb24oZkNhbGxiYWNrLCBzVmVyc2lvbikge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVmVyc2lvbicsIHtcblx0XHRcdCdWZXJzaW9uJzogc1ZlcnNpb25cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUsIEFic3RyYWN0QWpheFJlbW90ZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgVklFV19NT0RFTFMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1biwgd2luZG93UmVzaXplLCBsb2csIGlzVW5kLCBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5jbGFzcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTY3JlZW4ge1xuXHQvKipcblx0ICogQHBhcmFtIHtBcnJheX0gdmlld01vZGVsc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iodmlld01vZGVscykge1xuXHRcdHN1cGVyKCdzZXR0aW5ncycsIHZpZXdNb2RlbHMpO1xuXG5cdFx0dGhpcy5tZW51ID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBudWxsO1xuXHRcdHRoaXMub1ZpZXdNb2RlbFBsYWNlID0gbnVsbDtcblxuXHRcdHRoaXMuc2V0dXBTZXR0aW5ncygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmQ2FsbGJhY2tcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uUm91dGUoc3ViTmFtZSkge1xuXHRcdGxldCBzZXR0aW5nc1NjcmVlbiA9IG51bGwsXG5cdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxQbGFjZSA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBfLmZpbmQoXG5cdFx0XHRWSUVXX01PREVMUy5zZXR0aW5ncyxcblx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwgJiYgU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSAmJiBzdWJOYW1lID09PSBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLlJvdXRlXG5cdFx0KTtcblxuXHRcdGlmIChSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLXJlbW92ZWQnXSxcblx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRcdERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJlxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10sXG5cdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+XG5cdFx0XHRcdFx0XHREaXNhYmxlZFNldHRpbmdzVmlld01vZGVsICYmIERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgPT09IFJvdXRlZFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFJvdXRlZFNldHRpbmdzVmlld01vZGVsKSB7XG5cdFx0XHRpZiAoUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19idWlsZGVkICYmIFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0pIHtcblx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gPSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3ZtO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmlld01vZGVsUGxhY2UgPSB0aGlzLm9WaWV3TW9kZWxQbGFjZTtcblx0XHRcdFx0aWYgKHZpZXdNb2RlbFBsYWNlICYmIDEgPT09IHZpZXdNb2RlbFBsYWNlLmxlbmd0aCkge1xuXHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuID0gbmV3IFJvdXRlZFNldHRpbmdzVmlld01vZGVsKCk7XG5cblx0XHRcdFx0XHR2aWV3TW9kZWxEb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3JsLXNldHRpbmdzLXZpZXctbW9kZWwnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKTtcblx0XHRcdFx0XHR2aWV3TW9kZWxEb20uYXBwZW5kVG8odmlld01vZGVsUGxhY2UpO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4udmlld01vZGVsRG9tID0gdmlld01vZGVsRG9tO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YSA9IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGE7XG5cblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2RvbSA9IHZpZXdNb2RlbERvbTtcblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2J1aWxkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdGNvbnN0IHRtcGwgPSB7IG5hbWU6IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuVGVtcGxhdGUgfTtcblx0XHRcdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdFx0XHR2aWV3TW9kZWxEb21bMF0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRyYW5zbGF0b3JJbml0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogKCkgPT4gdG1wbFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHNldHRpbmdzU2NyZWVuLCAnb25CdWlsZCcsIFt2aWV3TW9kZWxEb21dKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2coJ0Nhbm5vdCBmaW5kIHN1YiBzZXR0aW5ncyB2aWV3IG1vZGVsIHBvc2l0aW9uOiBTZXR0aW5nc1N1YlNjcmVlbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5nc1NjcmVlbikge1xuXHRcdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0XHQvLyBoaWRlXG5cdFx0XHRcdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4pIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdC8vIHNob3dcblx0XHRcdFx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbikge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uQmVmb3JlU2hvdycpO1xuXHRcdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXG5cdFx0XHRcdFx0XHRfLmVhY2godGhpcy5tZW51KCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uc2VsZWN0ZWQoXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gJiZcblx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0ucm91dGUgPT09IHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEuUm91dGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQkKCcjcmwtY29udGVudCAuYi1zZXR0aW5ncyAuYi1jb250ZW50IC5jb250ZW50Jykuc2Nyb2xsVG9wKDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdFx0d2luZG93UmVzaXplKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRIYXNoKHNldHRpbmdzKCksIGZhbHNlLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gJiYgdGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZWFjaChWSUVXX01PREVMUy5zZXR0aW5ncywgKFNldHRpbmdzVmlld01vZGVsKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsICYmXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0IV8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLFxuXHRcdFx0XHRcdChSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCkgPT4gUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgJiYgUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgPT09IFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLm1lbnUucHVzaCh7XG5cdFx0XHRcdFx0cm91dGU6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUsXG5cdFx0XHRcdFx0bGFiZWw6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuTGFiZWwsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGtvLm9ic2VydmFibGUoZmFsc2UpLFxuXHRcdFx0XHRcdGRpc2FibGVkOiAhIV8uZmluZChcblx0XHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1kaXNhYmxlZCddLFxuXHRcdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+IERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5vVmlld01vZGVsUGxhY2UgPSAkKCcjcmwtY29udGVudCAjcmwtc2V0dGluZ3Mtc3Vic2NyZWVuJyk7XG5cdH1cblxuXHRyb3V0ZXMoKSB7XG5cdFx0Y29uc3QgRGVmYXVsdFZpZXdNb2RlbCA9IF8uZmluZChcblx0XHRcdFx0VklFV19NT0RFTFMuc2V0dGluZ3MsXG5cdFx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhICYmIFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuSXNEZWZhdWx0XG5cdFx0XHQpLFxuXHRcdFx0ZGVmYXVsdFJvdXRlID1cblx0XHRcdFx0RGVmYXVsdFZpZXdNb2RlbCAmJiBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgPyBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUgOiAnZ2VuZXJhbCcsXG5cdFx0XHRydWxlcyA9IHtcblx0XHRcdFx0c3VibmFtZTogL14oLiopJC8sXG5cdFx0XHRcdG5vcm1hbGl6ZV86IChycXVlc3QsIHZhbHMpID0+IHtcblx0XHRcdFx0XHR2YWxzLnN1Ym5hbWUgPSBpc1VuZCh2YWxzLnN1Ym5hbWUpID8gZGVmYXVsdFJvdXRlIDogcFN0cmluZyh2YWxzLnN1Ym5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBbdmFscy5zdWJuYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHRbJ3tzdWJuYW1lfS8nLCBydWxlc10sXG5cdFx0XHRbJ3tzdWJuYW1lfScsIHJ1bGVzXSxcblx0XHRcdFsnJywgcnVsZXNdXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuLCBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IHNzbSBmcm9tICdzc20nO1xuXG5pbXBvcnQge1xuXHQkd2luLFxuXHQkaHRtbCxcblx0JGRvYyxcblx0bGVmdFBhbmVsRGlzYWJsZWQsXG5cdGxlZnRQYW5lbFR5cGUsXG5cdHNVc2VyQWdlbnQsXG5cdGJNb2JpbGVEZXZpY2UsXG5cdGJBbmltYXRpb25TdXBwb3J0ZWRcbn0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBpc05vcm1hbCwgcFN0cmluZywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5LCB3aW5kb3dSZXNpemVDYWxsYmFjayB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IEtleVN0YXRlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcm9vdCwgcm9vdEFkbWluLCByb290VXNlciwgcG9wdWxhdGVBdXRoU3VmZml4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlLCBpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcbmltcG9ydCBUaGVtZVN0b3JlIGZyb20gJ1N0b3Jlcy9UaGVtZSc7XG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5cbmltcG9ydCB7IHJvdXRlT2ZmLCBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RCb290IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RCb290JztcblxuY2xhc3MgQWJzdHJhY3RBcHAgZXh0ZW5kcyBBYnN0cmFjdEJvb3Qge1xuXHQvKipcblx0ICogQHBhcmFtIHtSZW1vdGVTdG9yYWdlfEFkbWluUmVtb3RlU3RvcmFnZX0gUmVtb3RlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUgPSBudWxsO1xuXHRcdHRoaXMuaXNMb2NhbEF1dG9jb21wbGV0ZSA9IHRydWU7XG5cdFx0dGhpcy5pZnJhbWUgPSBudWxsO1xuXHRcdHRoaXMubGFzdEVycm9yVGltZSA9IDA7XG5cblx0XHR0aGlzLmlmcmFtZSA9ICQoJzxpZnJhbWUgY2xhc3M9XCJpbnRlcm5hbC1oaWRkZGVuXCIgLz4nKS5hcHBlbmRUbygnYm9keScpO1xuXG5cdFx0JHdpbi5vbigncmVzaXplJywgKCkgPT4ge1xuXHRcdFx0RXZlbnRzLnB1Yignd2luZG93LnJlc2l6ZScpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yihcblx0XHRcdCd3aW5kb3cucmVzaXplJyxcblx0XHRcdF8udGhyb3R0bGUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpSCA9ICR3aW4uaGVpZ2h0KCksXG5cdFx0XHRcdFx0aVcgPSAkd2luLmhlaWdodCgpO1xuXG5cdFx0XHRcdGlmICgkd2luLl9fc2l6ZXNbMF0gIT09IGlIIHx8ICR3aW4uX19zaXplc1sxXSAhPT0gaVcpIHtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMF0gPSBpSDtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMV0gPSBpVztcblxuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3dpbmRvdy5yZXNpemUucmVhbCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwbXMpXG5cdFx0KTtcblxuXHRcdC8vIERFQlVHXG5cdFx0Ly9cdFx0RXZlbnRzLnN1Yih7XG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZSc6IGZ1bmN0aW9uKCkge1xuXHRcdC8vXHRcdFx0XHR3aW5kb3cuY29uc29sZS5sb2coJ3dpbmRvdy5yZXNpemUnKTtcblx0XHQvL1x0XHRcdH0sXG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZS5yZWFsJzogZnVuY3Rpb24oKSB7XG5cdFx0Ly9cdFx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZygnd2luZG93LnJlc2l6ZS5yZWFsJyk7XG5cdFx0Ly9cdFx0XHR9XG5cdFx0Ly9cdFx0fSk7XG5cblx0XHQkZG9jXG5cdFx0XHQub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdrZXl1cCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgIWV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdCRkb2Mub24oXG5cdFx0XHQnbW91c2Vtb3ZlIGtleXByZXNzIGNsaWNrJyxcblx0XHRcdF8uZGVib3VuY2UoKCkgPT4ge1xuXHRcdFx0XHRFdmVudHMucHViKCdybC5hdXRvLWxvZ291dC1yZWZyZXNoJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTVzKVxuXHRcdCk7XG5cblx0XHRrZXkoJ2VzYywgZW50ZXInLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmVtb3RlKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZGF0YSgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbihuYW1lLCBkZWZhdWx0Xykge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbltuYW1lXSB8fCBkZWZhdWx0Xztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGlua1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGRvd25sb2FkKGxpbmspIHtcblx0XHRpZiAoc1VzZXJBZ2VudCAmJiAoLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpIHx8IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKSkpIHtcblx0XHRcdGNvbnN0IG9MaW5rID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdG9MaW5rLmhyZWYgPSBsaW5rO1xuXG5cdFx0XHRpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudCkge1xuXHRcdFx0XHRjb25zdCBvRSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudC5Nb3VzZUV2ZW50cztcblx0XHRcdFx0aWYgKG9FICYmIG9FLmluaXRFdmVudCAmJiBvTGluay5kaXNwYXRjaEV2ZW50KSB7XG5cdFx0XHRcdFx0b0UuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdG9MaW5rLmRpc3BhdGNoRXZlbnQob0UpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHdpbmRvdy5vcGVuKGxpbmssICdfc2VsZicpO1xuXHRcdFx0d2luZG93LmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaWZyYW1lLmF0dHIoJ3NyYycsIGxpbmspO1xuXHRcdFx0Ly8gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBsaW5rO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Z29vZ2xlUHJldmlld1N1cHBvcnRlZCgpIHtcblx0XHRpZiAobnVsbCA9PT0gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUpIHtcblx0XHRcdHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlID1cblx0XHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSAmJiAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbFByZXZpZXcnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG5cdCAqL1xuXHRzZXRXaW5kb3dUaXRsZSh0aXRsZSkge1xuXHRcdHRpdGxlID0gaXNOb3JtYWwodGl0bGUpICYmIDAgPCB0aXRsZS5sZW5ndGggPyAnJyArIHRpdGxlIDogJyc7XG5cdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpKSB7XG5cdFx0XHR0aXRsZSArPSAodGl0bGUgPyAnIC0gJyA6ICcnKSArIFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpO1xuXHRcdH1cblxuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlICsgJyAuLi4nO1xuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlO1xuXHR9XG5cblx0cmVkaXJlY3RUb0FkbWluUGFuZWwoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJvb3RBZG1pbigpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHR9XG5cblx0Y2xlYXJDbGllbnRTaWRlVG9rZW4oKSB7XG5cdFx0aWYgKHdpbmRvdy5fX3JsYWhfY2xlYXIpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfY2xlYXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG5cdCAqL1xuXHRzZXRDbGllbnRTaWRlVG9rZW4odG9rZW4pIHtcblx0XHRpZiAod2luZG93Ll9fcmxhaF9zZXQpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfc2V0KHRva2VuKTtcblxuXHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ0F1dGhBY2NvdW50SGFzaCcsIHRva2VuKTtcblx0XHRcdHBvcHVsYXRlQXV0aFN1ZmZpeCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBhZG1pbiA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGxvZ291dCA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGNsb3NlID0gZmFsc2Vcblx0ICovXG5cdGxvZ2luQW5kTG9nb3V0UmVsb2FkKGFkbWluID0gZmFsc2UsIGxvZ291dCA9IGZhbHNlLCBjbG9zZSA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5JZnJhbWUgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdpbklmcmFtZScpO1xuXHRcdGxldCBjdXN0b21Mb2dvdXRMaW5rID0gcFN0cmluZyhTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnY3VzdG9tTG9nb3V0TGluaycpKTtcblxuXHRcdGlmIChsb2dvdXQpIHtcblx0XHRcdHRoaXMuY2xlYXJDbGllbnRTaWRlVG9rZW4oKTtcblx0XHR9XG5cblx0XHRpZiAobG9nb3V0ICYmIGNsb3NlICYmIHdpbmRvdy5jbG9zZSkge1xuXHRcdFx0d2luZG93LmNsb3NlKCk7XG5cdFx0fVxuXG5cdFx0Y3VzdG9tTG9nb3V0TGluayA9IGN1c3RvbUxvZ291dExpbmsgfHwgKGFkbWluID8gcm9vdEFkbWluKCkgOiByb290VXNlcigpKTtcblxuXHRcdGlmIChsb2dvdXQgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgIT09IGN1c3RvbUxvZ291dExpbmspIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24uaHJlZiA9IGN1c3RvbUxvZ291dExpbms7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBjdXN0b21Mb2dvdXRMaW5rO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRoaXN0b3J5QmFjaygpIHtcblx0XHR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG5cdH1cblxuXHRib290c3RhcnQoKSB7XG5cdFx0Ly8gbG9nKCdQcycgKyAnc3MsIGhhYycgKyAna2VycyEgVGhlJyArICdyZVxcJ3Mgbm90JyArICdoaW5nIGludGUnICsgJ3Jlc3RpbmcgOicgKyAnKScpO1xuXG5cdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0Jyk7XG5cblx0XHRjb25zdCBtb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdTYXZlVHJpZ2dlcicsIHJlcXVpcmUoJ0NvbXBvbmVudC9TYXZlVHJpZ2dlcicpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0lucHV0JywgcmVxdWlyZSgnQ29tcG9uZW50L0lucHV0JykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignU2VsZWN0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NlbGVjdCcpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1JhZGlvJywgcmVxdWlyZSgnQ29tcG9uZW50L1JhZGlvJykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignVGV4dEFyZWEnLCByZXF1aXJlKCdDb21wb25lbnQvVGV4dEFyZWEnKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdEYXRlJywgcmVxdWlyZSgnQ29tcG9uZW50L0RhdGUnKS5kZWZhdWx0KTtcblxuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3gtc2NyaXB0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NjcmlwdCcpLmRlZmF1bHQpO1xuXHRcdC8vIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3N2Zy1pY29uJywgcmVxdWlyZSgnQ29tcG9uZW50L1N2Z0ljb24nKS5kZWZhdWx0KTtcblxuXHRcdGlmIChTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbWF0ZXJpYWxEZXNpZ24nKSAmJiBiQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9NYXRlcmlhbERlc2lnbi9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94U2ltcGxlJywgcmVxdWlyZSgnQ29tcG9uZW50L0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0fVxuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlKTtcblxuXHRcdF8uZGVsYXkod2luZG93UmVzaXplQ2FsbGJhY2ssIE1hZ2ljcy5UaW1lMXMpO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1lbnRlcicsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1sZWF2ZScsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdGlmICghbW9iaWxlKSB7XG5cdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtZGVza3RvcCcpO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ21vYmlsZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1heC13aWR0aDogNzY3cHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtbW9iaWxlJyk7XG5cdFx0XHRcdFx0RXZlbnRzLnB1Yignc3NtLm1vYmlsZS1lbnRlcicpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKTtcblx0XHRcdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWxlYXZlJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ3RhYmxldCcsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTlweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS10YWJsZXQnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtdGFibGV0Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ2Rlc2t0b3AnLFxuXHRcdFx0XHRxdWVyeTogJyhtaW4td2lkdGg6IDEwMDBweCkgYW5kIChtYXgtd2lkdGg6IDE0MDBweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAnZGVza3RvcC1sYXJnZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogMTQwMXB4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AtbGFyZ2UnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtZGVza3RvcC1sYXJnZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKS5hZGRDbGFzcygncmwtbW9iaWxlJyk7XG5cdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWVudGVyJyk7XG5cdFx0fVxuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKChiVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWRpc2FibGVkJywgYlZhbHVlKTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWVuYWJsZWQnLCAhYlZhbHVlKTtcblx0XHR9KTtcblxuXHRcdGxlZnRQYW5lbFR5cGUuc3Vic2NyaWJlKChzVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLW5vbmUnLCAnbm9uZScgPT09IHNWYWx1ZSk7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1zaG9ydCcsICdzaG9ydCcgPT09IHNWYWx1ZSk7XG5cdFx0fSk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZC52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdExhbmd1YWdlU3RvcmUucG9wdWxhdGUoKTtcblx0XHRUaGVtZVN0b3JlLnBvcHVsYXRlKCk7XG5cdFx0U29jaWFsU3RvcmUucG9wdWxhdGUoKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcCwgQWJzdHJhY3RBcHAgYXMgZGVmYXVsdCB9O1xuIiwiZXhwb3J0IGNsYXNzIEFic3RyYWN0Qm9vdCB7XG5cdGJvb3RzdGFydCgpIHtcblx0XHQvKiBuby1lbXB0eSAqL1xuXHR9XG59XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0UmFkaW8gZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZTtcblx0XHRpZiAoaXNVbmQodGhpcy52YWx1ZSkgfHwgIXRoaXMudmFsdWUuc3Vic2NyaWJlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5pbmxpbmUgPSBpc1VuZChwYXJhbXMuaW5saW5lKSA/IGZhbHNlIDogcGFyYW1zLmlubGluZTtcblx0XHR0aGlzLnJlYWRPbmx5ID0gaXNVbmQocGFyYW1zLnJlYWRPbmx5KSA/IGZhbHNlIDogISFwYXJhbXMucmVhZE9ubHk7XG5cblx0XHRpZiAocGFyYW1zLnZhbHVlcykge1xuXHRcdFx0dGhpcy52YWx1ZXMoXy5tYXAocGFyYW1zLnZhbHVlcywgKGxhYmVsLCB2YWx1ZSkgPT4gKHsgbGFiZWw6IGxhYmVsLCB2YWx1ZTogdmFsdWUgfSkpKTtcblx0XHR9XG5cblx0XHR0aGlzLmNsaWNrID0gXy5iaW5kKHRoaXMuY2xpY2ssIHRoaXMpO1xuXHR9XG5cblx0Y2xpY2sodmFsdWUpIHtcblx0XHRpZiAoIXRoaXMucmVhZE9ubHkgJiYgdmFsdWUpIHtcblx0XHRcdHRoaXMudmFsdWUodmFsdWUudmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFJhZGlvLCBBYnN0cmFjdFJhZGlvIGFzIGRlZmF1bHQgfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcbi8vIEVkZ2UgMTQtIGlzc3VlXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc2VhcmNoJywgMSwgZnVuY3Rpb24gKFNFQVJDSCwgbmF0aXZlU2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNlYXJjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIHNlYXJjaGVyICE9PSB1bmRlZmluZWQgPyBzZWFyY2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVTZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgcXVvdCA9IC9cIi9nO1xuXG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNyZWF0ZWh0bWxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIGEgbWV0aG9kLCBsb3dlcmNhc2Vcbi8vIG9mIGEgdGFnIGFuZCBlc2NhcGluZyBxdW90ZXMgaW4gYXJndW1lbnRzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTUVUSE9EX05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgc2xvcHB5QXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2xvcHB5LWFycmF5LW1ldGhvZCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBzbG9wcHlBcnJheU1ldGhvZCgncmVkdWNlJykgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICFuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IHR5cGVvZiBkZXRlY3Rpb24gPT0gJ2Z1bmN0aW9uJyA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gSVNfUklHSFQgPyBsZW5ndGggLSAxIDogMDtcbiAgICB2YXIgaSA9IElTX1JJR0hUID8gLTEgOiAxO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPCAyKSB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBpZiAoSVNfUklHSFQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIHZhbHVlcyA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC52YWx1ZXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyB2YWx1ZXMgOiBvd247XG59O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG52YXIgb2JqZWN0SGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCkge1xuICB2YXIgc3RvcmUgPSBuZXcgV2Vha01hcCgpO1xuICB2YXIgd21nZXQgPSBzdG9yZS5nZXQ7XG4gIHZhciB3bWhhcyA9IHN0b3JlLmhhcztcbiAgdmFyIHdtc2V0ID0gc3RvcmUuc2V0O1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgd21zZXQuY2FsbChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldC5jYWxsKHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcy5jYWxsKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGhpZGUoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIG5hdGl2ZUZ1bmN0aW9uVG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KG5hdGl2ZUZ1bmN0aW9uVG9TdHJpbmcuY2FsbChXZWFrTWFwKSk7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNoYXJlZCgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBoaWRlKGdsb2JhbCwga2V5LCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBoaWRlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGQVVMVCA9PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuYXRpdmVJdGVyYXRvci5jYWxsKHRoaXMpOyB9O1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGhpZGUoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IpO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgcmV0dXJuICFTdHJpbmcoU3ltYm9sKCkpO1xufSk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBQcm9wZXJ0aWVzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSAhPT0gJ1tvYmplY3Qgel0nID8gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn0gOiB0ZXN0LnRvU3RyaW5nO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgJiYgaXQgIT09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoaXQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaGlkZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVudW1lcmFibGUpIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIGVsc2UgaGlkZSh0YXJnZXQsIGtleSwgdmFsdWUpO1xufTtcbiIsIi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnZhbHVlcztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvY29uY2F0Jyk7XG4iLCJ2YXIgY29uY2F0ID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IGNvbmNhdCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmNvbmNhdDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjtcbnZhciBNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQgPSAnTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJztcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IHRvTGVuZ3RoKEUubGVuZ3RoKTtcbiAgICAgICAgaWYgKG4gKyBsZW4gPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPj0gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2luZGV4LW9mJyk7XG4iLCJ2YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvaW5kZXgtb2YnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuaW5kZXhPZjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluZGV4T2YpID8gaW5kZXhPZiA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuaW5kZXhPZjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBzbG9wcHlBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zbG9wcHktYXJyYXktbWV0aG9kJyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gW10uaW5kZXhPZjtcblxudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUluZGV4T2YgJiYgMSAvIFsxXS5pbmRleE9mKDEsIC0wKSA8IDA7XG52YXIgU0xPUFBZX01FVEhPRCA9IHNsb3BweUFycmF5TWV0aG9kKCdpbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogTkVHQVRJVkVfWkVSTyB8fCBTTE9QUFlfTUVUSE9EIH0sIHtcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbmQnKTtcbiIsInZhciBmaW5kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maW5kJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbmQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maW5kKSA/IGZpbmQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmluZDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmQ7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxudmFyIEZJTkQgPSAnZmluZCc7XG52YXIgU0tJUFNfSE9MRVMgPSB0cnVlO1xuXG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEZJTkQgaW4gW10pIEFycmF5KDEpW0ZJTkRdKGZ1bmN0aW9uICgpIHsgU0tJUFNfSE9MRVMgPSBmYWxzZTsgfSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU0tJUFNfSE9MRVMgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKEZJTkQpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9sYXN0LWluZGV4LW9mJyk7XG4iLCJ2YXIgbGFzdEluZGV4T2YgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2xhc3QtaW5kZXgtb2YnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubGFzdEluZGV4T2Y7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5sYXN0SW5kZXhPZikgPyBsYXN0SW5kZXhPZiA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5sYXN0SW5kZXhPZjtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGxhc3RJbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWxhc3QtaW5kZXgtb2YnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubGFzdGluZGV4b2ZcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGxhc3RJbmRleE9mICE9PSBbXS5sYXN0SW5kZXhPZiB9LCB7XG4gIGxhc3RJbmRleE9mOiBsYXN0SW5kZXhPZlxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBzbG9wcHlBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zbG9wcHktYXJyYXktbWV0aG9kJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBuYXRpdmVMYXN0SW5kZXhPZiA9IFtdLmxhc3RJbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUxhc3RJbmRleE9mICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTTE9QUFlfTUVUSE9EID0gc2xvcHB5QXJyYXlNZXRob2QoJ2xhc3RJbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2ZgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmxhc3RpbmRleG9mXG5tb2R1bGUuZXhwb3J0cyA9IChORUdBVElWRV9aRVJPIHx8IFNMT1BQWV9NRVRIT0QpID8gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAvLyBjb252ZXJ0IC0wIHRvICswXG4gIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gbmF0aXZlTGFzdEluZGV4T2YuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IG1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTyAmJiBPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gIHJldHVybiAtMTtcbn0gOiBuYXRpdmVMYXN0SW5kZXhPZjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9mdW5jdGlvbi92aXJ0dWFsL2JpbmQnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuYmluZDtcbiAgcmV0dXJuIGl0ID09PSBGdW5jdGlvblByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gYmluZCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmZ1bmN0aW9uLmJpbmQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnRnVuY3Rpb24nKS5iaW5kO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUgfSwge1xuICBiaW5kOiBiaW5kXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghKGFyZ3NMZW5ndGggaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIGxpc3QgPSBbXSwgaSA9IDA7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIGxpc3RbaV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbYXJnc0xlbmd0aF0gPSBGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgbGlzdC5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogZm4uYXBwbHkodGhhdCwgYXJncyk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZEZ1bmN0aW9uLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kRnVuY3Rpb247XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS90cmltJyk7XG4iLCJ2YXIgdHJpbSA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL3RyaW0nKTtcblxudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC50cmltO1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnc3RyaW5nJyB8fCBpdCA9PT0gU3RyaW5nUHJvdG90eXBlXG4gICAgfHwgKGl0IGluc3RhbmNlb2YgU3RyaW5nICYmIG93biA9PT0gU3RyaW5nUHJvdG90eXBlLnRyaW0pID8gdHJpbSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy50cmltJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ1N0cmluZycpLnRyaW07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mb3JjZWQtc3RyaW5nLXRyaW0tbWV0aG9kJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHdoaXRlc3BhY2UgPSAnWycgKyB3aGl0ZXNwYWNlcyArICddJztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAod2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKiQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIG5vbiA9ICdcXHUyMDBCXFx1MDA4NVxcdTE4MEUnO1xuXG4vLyBjaGVjayB0aGF0IGEgbWV0aG9kIHdvcmtzIHdpdGggdGhlIGNvcnJlY3QgbGlzdFxuLy8gb2Ygd2hpdGVzcGFjZXMgYW5kIGhhcyBhIGNvcnJlY3QgbmFtZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0oKSB8fCBub25bTUVUSE9EX05BTUVdKCkgIT0gbm9uIHx8IHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZS5jYWxsKHRoaXMpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvbWFwJyk7XG4iLCJ2YXIgbWFwID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1hcCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLm1hcDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKSB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5LnNoYW0pIGRlZmluZVByb3BlcnR5LnNoYW0gPSB0cnVlO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhREVTQ1JJUFRPUlMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnR5OiBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZS5mXG59KTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXggfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7ICAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KVxufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gbmV3IChDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEMpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZm9yRWFjaDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9IHNsb3BweUFycmF5TWV0aG9kKCdmb3JFYWNoJykgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59IDogW10uZm9yRWFjaDtcbiIsIi8vIGBTYW1lVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgXCI8aHRtbD5cXG48aGVhZD5cXG5cXHQ8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwidXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlXFxcIiBjb250ZW50PVxcXCJ5ZXNcXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwicm9ib3RzXFxcIiBjb250ZW50PVxcXCJub2luZGV4LCBub2ZvbGxvdywgbm9vZHBcXFwiIC8+XFxuXFx0PHRpdGxlPnt7dGl0bGV9fTwvdGl0bGU+XFxuXFx0PHN0eWxlPlxcbmh0bWwsIGJvZHkge1xcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuXFx0Zm9udC1zaXplOiAxM3B4O1xcblxcdGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjtcXG5cXHRtYXJnaW46IDA7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuXFxuYSB7Y29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lfVxcbmE6dmlzaXRlZCB7Y29sb3I6ICM2MDl9XFxuYTphY3RpdmUge2NvbG9yOiByZWR9XFxuYmxvY2txdW90ZSB7Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjazsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwcHggMTBweH1cXG5cXG5wcmUge1xcblxcdG1hcmdpbjogMHB4O1xcblxcdHBhZGRpbmc6IDBweDtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcblxcdGJvcmRlcjogbm9uZTtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0d29yZC13cmFwOiBicmVhay13b3JkO1xcblxcdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcXG59XFxuXFxuLmJvZHktd3JwIHtcXG5cXHRwYWRkaW5nOiAxMHB4O1xcbn1cXG5cXG4uYm9keS13cnAuaHRtbCBwcmUge1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHR3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuXFx0d29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4ge1xcblxcdHBhZGRpbmc6IDE1cHg7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gcHJlIHtcXG5cXHRtYXJnaW46IDBweDtcXG5cXHRwYWRkaW5nOiAwcHg7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRib3JkZXI6IG5vbmU7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG5cXHR3b3JkLWJyZWFrOiBub3JtYWw7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsdWU7XFxuXFx0Y29sb3I6IGJsdWU7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JlZW47XFxuXFx0Y29sb3I6IGdyZWVuO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgcmVkO1xcblxcdGNvbG9yOiByZWQ7XFxufVxcbi5ybC1wcmV2aWV3LXN1YmplY3Qge1xcblxcdGZvbnQtc2l6ZTogMTZweDtcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXG5cXHRwYWRkaW5nOiAxNXB4O1xcbn1cXG4ucmwtcHJldmlldy1jcmVkcy1mcm9tLCAucmwtcHJldmlldy1jcmVkcy10bywgLnJsLXByZXZpZXctY3JlZHMtY2Mge1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiA1cHggMTVweDtcXG59XFxuLnJsLXByZXZpZXctZGF0ZSB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiAxMHB4IDE1cHg7XFxufVxcbi5ybC1wcmV2aWV3LXNlY3Rpb24ge1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0bWFyZ2luOiAwO1xcblxcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xcbn1cXG4ucmwtcHJldmlldy1oaWRlIHtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG5cXHQ8L3N0eWxlPlxcbjwvaGVhZD5cXG48Ym9keT5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctc3ViamVjdFxcXCI+e3tzdWJqZWN0fX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctZGF0ZVxcXCI+e3tkYXRlfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWZyb21cXFwiPnt7ZnJvbUNyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLXRvXFxcIj57e3RvTGFiZWx9fToge3t0b0NyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWNjIHt7Y2NDbGFzc319XFxcIj57e2NjTGFiZWx9fToge3tjY0NyZWRzfX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJib2R5LXdycCB7e2JvZHlDbGFzc319XFxcIj57e2h0bWx9fTwvZGl2PlxcbjwvYm9keT5cXG48L2h0bWw+XCI7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcbiIsInZhciBmaWx0ZXIgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gZmlsdGVyIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsdGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIWFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFAsIEQpO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGNyZWF0ZTogY3JlYXRlXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59O1xuXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtKSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSA9IHRydWU7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgRkFJTFNfT05fUFJJTUlUSVZFUztcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcbiIsInZhciBzbGljZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc2xpY2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc2xpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBzbGljZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNsaWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykuc2xpY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIG5hdGl2ZVNsaWNlID0gW10uc2xpY2U7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKSB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKHR5cGVvZiBDb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlLmNhbGwoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuIiwidmFyIHJldmVyc2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gcmV2ZXJzZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZS5jYWxsKHRoaXMpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9rZXlzJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCJpbXBvcnQgeyBwSW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIFNhdmVUcmlnZ2VyQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IHBhcmFtcy5lbGVtZW50IHx8IG51bGw7XG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSAmJiBwYXJhbXMudmFsdWUuc3Vic2NyaWJlID8gcGFyYW1zLnZhbHVlIDogbnVsbDtcblxuXHRcdGlmICh0aGlzLmVsZW1lbnQpIHtcblx0XHRcdGlmICh0aGlzLnZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG5cblx0XHRcdFx0aWYgKHBhcmFtcy52ZXJ0aWNhbEFsaWduKSB7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LmNzcygndmVydGljYWwtYWxpZ24nLCBwYXJhbXMudmVydGljYWxBbGlnbik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHRoaXMudmFsdWUoKSk7XG5cblx0XHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy52YWx1ZS5zdWJzY3JpYmUodGhpcy5zZXRTdGF0ZSwgdGhpcykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LmhpZGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5lcnJvcicpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5zdWNjZXNzJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGU6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuSWRsZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihTYXZlVHJpZ2dlckNvbXBvbmVudCwgJ1NhdmVUcmlnZ2VyQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY2xhc3MgSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihJbnB1dENvbXBvbmVudCwgJ0lucHV0Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jbGFzcyBTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBwYXJhbXMub3B0aW9ucyB8fCAnJztcblxuXHRcdHRoaXMub3B0aW9uc1RleHQgPSBwYXJhbXMub3B0aW9uc1RleHQgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNWYWx1ZSA9IHBhcmFtcy5vcHRpb25zVmFsdWUgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNDYXB0aW9uID0gcGFyYW1zLm9wdGlvbnNDYXB0aW9uIHx8IG51bGw7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zQ2FwdGlvbikge1xuXHRcdFx0dGhpcy5vcHRpb25zQ2FwdGlvbiA9IGkxOG4odGhpcy5vcHRpb25zQ2FwdGlvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNlbGVjdENvbXBvbmVudCwgJ1NlbGVjdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0UmFkaW8gfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RSYWRpbyc7XG5cbmNsYXNzIFJhZGlvQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RSYWRpbyB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoUmFkaW9Db21wb25lbnQsICdSYWRpb0NvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNvbnN0IERFRkFVTFRfUk9XUyA9IDU7XG5cbmNsYXNzIFRleHRBcmVhQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcihwYXJhbXMpO1xuXG5cdFx0dGhpcy5yb3dzID0gcGFyYW1zLnJvd3MgfHwgREVGQVVMVF9ST1dTO1xuXHRcdHRoaXMuc3BlbGxjaGVjayA9IGlzVW5kKHBhcmFtcy5zcGVsbGNoZWNrKSA/IGZhbHNlIDogISFwYXJhbXMuc3BlbGxjaGVjaztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoVGV4dEFyZWFDb21wb25lbnQsICdUZXh0QXJlYUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNsYXNzIERhdGVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihEYXRlQ29tcG9uZW50LCAnRGF0ZUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgU2NyaXB0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHBhcmFtcy5jb21wb25lbnQgJiZcblx0XHRcdHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2RlcyAmJlxuXHRcdFx0cGFyYW1zLmVsZW1lbnQgJiZcblx0XHRcdHBhcmFtcy5lbGVtZW50WzBdICYmXG5cdFx0XHRwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUxcblx0XHQpIHtcblx0XHRcdGxldCBzY3JpcHQgPSBwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUw7XG5cdFx0XHRzY3JpcHQgPSAhc2NyaXB0ID8gJycgOiBzY3JpcHQucmVwbGFjZSgvPHgtc2NyaXB0L2ksICc8c2NyaXB0JykucmVwbGFjZSgvPGI+PFxcL2I+PFxcL3gtc2NyaXB0Pi9pLCAnPC9zY3JpcHQ+Jyk7XG5cblx0XHRcdGlmIChzY3JpcHQpIHtcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQudGV4dCgnJyk7XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50LnJlcGxhY2VXaXRoKFxuXHRcdFx0XHRcdCQoc2NyaXB0KS50ZXh0KFxuXHRcdFx0XHRcdFx0cGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzWzBdICYmIHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2Rlc1swXS5ub2RlVmFsdWVcblx0XHRcdFx0XHRcdFx0PyBwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXNbMF0ubm9kZVZhbHVlXG5cdFx0XHRcdFx0XHRcdDogJydcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudC5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNjcmlwdENvbXBvbmVudCwgJ1NjcmlwdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0Q2hlY2tib3ggfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RDaGVja2JveCc7XG5cbmNsYXNzIENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveCA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMjAwIH0pO1xuXHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAgfSk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveFNldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlLCB0aGlzKTtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlLCB0aGlzKTtcblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKFxuXHRcdFx0dGhpcy52YWx1ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlckFuaW1hdGlvbih2YWx1ZSk7XG5cdFx0XHR9LCB0aGlzKVxuXHRcdCk7XG5cdH1cblxuXHRhbmltYXRpb25Cb3hTZXRUcnVlKCkge1xuXHRcdHRoaXMuYW5pbWF0aW9uQm94KHRydWUpO1xuXHR9XG5cblx0YW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSgpIHtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFyayh0cnVlKTtcblx0fVxuXG5cdHRyaWdnZXJBbmltYXRpb24oYm94KSB7XG5cdFx0aWYgKGJveCkge1xuXHRcdFx0dGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSwgMjAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSwgMjAwKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQsICdDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgcHJvZ3Jlc3NKcyBmcm9tICdwcm9ncmVzc0pzJztcblxuaW1wb3J0IHsgcm9vdCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIGlzTm9ybWFsLCBpc0FycmF5LCBpbkFycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9DYXBhJztcbmltcG9ydCBEb21haW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vRG9tYWluJztcbmltcG9ydCBQbHVnaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGx1Z2luJztcbmltcG9ydCBMaWNlbnNlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0xpY2Vuc2UnO1xuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5pbXBvcnQgQ29yZVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Db3JlJztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBTZXR0aW5nc0FkbWluU2NyZWVuIH0gZnJvbSAnU2NyZWVuL0FkbWluL1NldHRpbmdzJztcbmltcG9ydCB7IExvZ2luQWRtaW5TY3JlZW4gfSBmcm9tICdTY3JlZW4vQWRtaW4vTG9naW4nO1xuXG5pbXBvcnQgeyBoaWRlTG9hZGluZywgcm91dGVPZmYsIHNldEhhc2gsIHN0YXJ0U2NyZWVucyB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0QXBwIH0gZnJvbSAnQXBwL0Fic3RyYWN0JztcblxuY2xhc3MgQWRtaW5BcHAgZXh0ZW5kcyBBYnN0cmFjdEFwcCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKFJlbW90ZSk7XG5cdH1cblxuXHRyZW1vdGUoKSB7XG5cdFx0cmV0dXJuIFJlbW90ZTtcblx0fVxuXG5cdHJlbG9hZERvbWFpbkxpc3QoKSB7XG5cdFx0RG9tYWluU3RvcmUuZG9tYWlucy5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5kb21haW5MaXN0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdERvbWFpblN0b3JlLmRvbWFpbnMubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0RG9tYWluU3RvcmUuZG9tYWlucyhcblx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdCwgKFtlbmFibGVkLCBhbGlhc10sIG5hbWUpID0+ICh7XG5cdFx0XHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ6IGtvLm9ic2VydmFibGUoIWVuYWJsZWQpLFxuXHRcdFx0XHRcdFx0YWxpYXM6IGFsaWFzLFxuXHRcdFx0XHRcdFx0ZGVsZXRlQWNjZXNzOiBrby5vYnNlcnZhYmxlKGZhbHNlKVxuXHRcdFx0XHRcdH0pKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmVsb2FkUGx1Z2luTGlzdCgpIHtcblx0XHRQbHVnaW5TdG9yZS5wbHVnaW5zLmxvYWRpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLnBsdWdpbkxpc3QoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRQbHVnaW5TdG9yZS5wbHVnaW5zKFxuXHRcdFx0XHRcdF8ubWFwKGRhdGEuUmVzdWx0LCAoaXRlbSkgPT4gKHtcblx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0uTmFtZSxcblx0XHRcdFx0XHRcdGRpc2FibGVkOiBrby5vYnNlcnZhYmxlKCFpdGVtLkVuYWJsZWQpLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJlZDoga28ub2JzZXJ2YWJsZSghIWl0ZW0uQ29uZmlndXJlZClcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZFBhY2thZ2VzTGlzdCgpIHtcblx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXMubG9hZGluZyh0cnVlKTtcblx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsKHRydWUpO1xuXHRcdFJlbW90ZS5wYWNrYWdlc0xpc3QoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlc1JlYWwoISFkYXRhLlJlc3VsdC5SZWFsKTtcblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzTWFpblVwZGF0YWJsZSghIWRhdGEuUmVzdWx0Lk1haW5VcGRhdGFibGUpO1xuXG5cdFx0XHRcdGxldCBsaXN0ID0gW107XG5cdFx0XHRcdGNvbnN0IGxvYWRpbmcgPSB7fTtcblxuXHRcdFx0XHRfLmVhY2goUGFja2FnZVN0b3JlLnBhY2thZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5sb2FkaW5nKCkpIHtcblx0XHRcdFx0XHRcdGxvYWRpbmdbaXRlbS5maWxlXSA9IGl0ZW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoaXNBcnJheShkYXRhLlJlc3VsdC5MaXN0KSkge1xuXHRcdFx0XHRcdGxpc3QgPSBfLmNvbXBhY3QoXG5cdFx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdC5MaXN0LCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW0ubG9hZGluZyA9IGtvLm9ic2VydmFibGUoIWlzVW5kKGxvYWRpbmdbaXRlbS5maWxlXSkpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAnY29yZScgPT09IGl0ZW0udHlwZSAmJiAhaXRlbS5jYW5CZUluc3RhbGxlZCA/IG51bGwgOiBpdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzKGxpc3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzUmVhbChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHR1cGRhdGVDb3JlRGF0YSgpIHtcblx0XHRDb3JlU3RvcmUuY29yZVVwZGF0aW5nKHRydWUpO1xuXHRcdFJlbW90ZS51cGRhdGVDb3JlRGF0YSgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVVwZGF0aW5nKGZhbHNlKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbignJyk7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oJycpO1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVSZWxlYXNlKCcnKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmUoLTIpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVhbCh0cnVlKTtcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZWFsKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZENvcmVEYXRhKCkge1xuXHRcdENvcmVTdG9yZS5jb3JlQ2hlY2tpbmcodHJ1ZSk7XG5cdFx0Q29yZVN0b3JlLmNvcmVSZWFsKHRydWUpO1xuXHRcdFJlbW90ZS5jb3JlRGF0YSgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRDb3JlU3RvcmUuY29yZUNoZWNraW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwoISFkYXRhLlJlc3VsdC5SZWFsKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVDaGFubmVsKGRhdGEuUmVzdWx0LkNoYW5uZWwgfHwgJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVR5cGUoZGF0YS5SZXN1bHQuVHlwZSB8fCAnc3RhYmxlJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlVXBkYXRhYmxlKCEhZGF0YS5SZXN1bHQuVXBkYXRhYmxlKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVBY2Nlc3MoISFkYXRhLlJlc3VsdC5BY2Nlc3MpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVdhcm5pbmcoISFkYXRhLlJlc3VsdC5XYXJuaW5nKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uKGRhdGEuUmVzdWx0LlZlcnNpb24gfHwgJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oZGF0YS5SZXN1bHQuUmVtb3RlVmVyc2lvbiB8fCAnJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZShkYXRhLlJlc3VsdC5SZW1vdGVSZWxlYXNlIHx8ICcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uQ29tcGFyZShwSW50KGRhdGEuUmVzdWx0LlZlcnNpb25Db21wYXJlKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwoZmFsc2UpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZUNoYW5uZWwoJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVR5cGUoJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVdhcm5pbmcoZmFsc2UpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb24oJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVJlbGVhc2UoJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb25Db21wYXJlKC0yKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZSA9IGZhbHNlXG5cdCAqL1xuXHRyZWxvYWRMaWNlbnNpbmcoZm9yY2UgPSBmYWxzZSkge1xuXHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmdQcm9jZXNzKHRydWUpO1xuXHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXJyb3IoJycpO1xuXHRcdFJlbW90ZS5saWNlbnNpbmcoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZ1Byb2Nlc3MoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGlzTm9ybWFsKGRhdGEuUmVzdWx0LkV4cGlyZWQpKSB7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlVmFsaWQodHJ1ZSk7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXhwaXJlZChwSW50KGRhdGEuUmVzdWx0LkV4cGlyZWQpKTtcblx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2VFcnJvcignJyk7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmcodHJ1ZSk7XG5cdFx0XHRcdEFwcFN0b3JlLnByZW0odHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZGF0YSAmJlxuXHRcdFx0XHRcdGRhdGEuRXJyb3JDb2RlICYmXG5cdFx0XHRcdFx0LTEgPCBpbkFycmF5KHBJbnQoZGF0YS5FcnJvckNvZGUpLCBbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUsIE5vdGlmaWNhdGlvbi5MaWNlbnNpbmdFeHBpcmVkXSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2VFcnJvcihnZXROb3RpZmljYXRpb24ocEludChkYXRhLkVycm9yQ29kZSkpKTtcblx0XHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zaW5nKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydCA9PT0gcmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zZUVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSkpO1xuXHRcdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZyh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZyhmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSwgZm9yY2UpO1xuXHR9XG5cblx0Ym9vdGVuZChib290ZW5kQ2FsbGJhY2sgPSBudWxsKSB7XG5cdFx0aWYgKHByb2dyZXNzSnMpIHtcblx0XHRcdHByb2dyZXNzSnMuZW5kKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJvb3RlbmRDYWxsYmFjaykge1xuXHRcdFx0Ym9vdGVuZENhbGxiYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0Ym9vdHN0YXJ0KCkge1xuXHRcdHN1cGVyLmJvb3RzdGFydCgpO1xuXG5cdFx0QXBwU3RvcmUucG9wdWxhdGUoKTtcblx0XHRDYXBhU3RvcmUucG9wdWxhdGUoKTtcblxuXHRcdGhpZGVMb2FkaW5nKCk7XG5cblx0XHRpZiAoIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhbGxvd0FkbWluUGFuZWwnKSkge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvJztcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGgnKSkge1xuXHRcdFx0XHRzdGFydFNjcmVlbnMoW1NldHRpbmdzQWRtaW5TY3JlZW5dKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXJ0U2NyZWVucyhbTG9naW5BZG1pblNjcmVlbl0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuYm9vdGVuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBZG1pbkFwcCgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgU2VydmVyU2VjdXJlLCBQb3J0cywgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IElNQVBfREVGQVVMVF9QT1JULCBTSUVWRV9ERUZBVUxUX1BPUlQsIFNNVFBfREVGQVVMVF9QT1JUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgdHJpbSwgcEludCwgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgQ2FwYUFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NhcGEnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvRG9tYWluJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0RvbWFpbidcbn0pXG5jbGFzcyBEb21haW5Qb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWRpdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZpbmdFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucGFnZSA9IGtvLm9ic2VydmFibGUoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudGVzdGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0RvbmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvckRlc2MoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmltYXBTZXJ2ZXJGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVTZXJ2ZXJGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc210cFNlcnZlckZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5pbWFwU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5pbWFwUG9ydCA9IGtvLm9ic2VydmFibGUoJycgKyBJTUFQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5pbWFwU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5pbWFwU2hvcnRMb2dpbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudXNlU2lldmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlQWxsb3dSYXcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zaWV2ZVBvcnQgPSBrby5vYnNlcnZhYmxlKCcnICsgU0lFVkVfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLnNpZXZlU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zbXRwUG9ydCA9IGtvLm9ic2VydmFibGUoJycgKyBTTVRQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5zbXRwU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2hvcnRMb2dpbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc210cEF1dGggPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuc210cFBocE1haWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLndoaXRlTGlzdCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWxpYXNOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmVuYWJsZVNtYXJ0UG9ydHMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWxsb3dTaWV2ZSA9IGtvLmNvbXB1dGVkKCgpID0+IENhcGFBZG1pblN0b3JlLmZpbHRlcnMoKSAmJiBDYXBhQWRtaW5TdG9yZS5zaWV2ZSgpKTtcblxuXHRcdHRoaXMuaGVhZGVyVGV4dCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IG5hbWUgPSB0aGlzLm5hbWUoKSxcblx0XHRcdFx0YWxpYXNOYW1lID0gdGhpcy5hbGlhc05hbWUoKTtcblxuXHRcdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0XHRpZiAodGhpcy5lZGl0KCkpIHtcblx0XHRcdFx0cmVzdWx0ID0gaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9FRElUX0RPTUFJTicsIHsgJ05BTUUnOiBuYW1lIH0pO1xuXHRcdFx0XHRpZiAoYWxpYXNOYW1lKSB7XG5cdFx0XHRcdFx0cmVzdWx0ICs9ICcg4oaQICcgKyBhbGlhc05hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9XG5cdFx0XHRcdFx0JycgPT09IG5hbWVcblx0XHRcdFx0XHRcdD8gaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9BRERfRE9NQUlOJylcblx0XHRcdFx0XHRcdDogaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9BRERfRE9NQUlOX1dJVEhfTkFNRScsIHsgJ05BTUUnOiBuYW1lIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kb21haW5EZXNjID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbmFtZSA9IHRoaXMubmFtZSgpO1xuXHRcdFx0cmV0dXJuICF0aGlzLmVkaXQoKSAmJiBuYW1lID8gaTE4bignUE9QVVBTX0RPTUFJTi9ORVdfRE9NQUlOX0RFU0MnLCB7ICdOQU1FJzogJypAJyArIG5hbWUgfSkgOiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuZG9tYWluSXNDb21wdXRlZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHVzZVBocE1haWwgPSB0aGlzLnNtdHBQaHBNYWlsKCksXG5cdFx0XHRcdGFsbG93U2lldmUgPSB0aGlzLmFsbG93U2lldmUoKSxcblx0XHRcdFx0dXNlU2lldmUgPSB0aGlzLnVzZVNpZXZlKCk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCcnICE9PSB0aGlzLm5hbWUoKSAmJlxuXHRcdFx0XHQnJyAhPT0gdGhpcy5pbWFwU2VydmVyKCkgJiZcblx0XHRcdFx0JycgIT09IHRoaXMuaW1hcFBvcnQoKSAmJlxuXHRcdFx0XHQoYWxsb3dTaWV2ZSAmJiB1c2VTaWV2ZSA/ICcnICE9PSB0aGlzLnNpZXZlU2VydmVyKCkgJiYgJycgIT09IHRoaXMuc2lldmVQb3J0KCkgOiB0cnVlKSAmJlxuXHRcdFx0XHQoKCcnICE9PSB0aGlzLnNtdHBTZXJ2ZXIoKSAmJiAnJyAhPT0gdGhpcy5zbXRwUG9ydCgpKSB8fCB1c2VQaHBNYWlsKVxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FuQmVUZXN0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy50ZXN0aW5nKCkgJiYgdGhpcy5kb21haW5Jc0NvbXB1dGVkKCkpO1xuXHRcdHRoaXMuY2FuQmVTYXZlZCA9IGtvLmNvbXB1dGVkKCgpID0+ICF0aGlzLnNhdmluZygpICYmIHRoaXMuZG9tYWluSXNDb21wdXRlZCgpKTtcblxuXHRcdHRoaXMucGFnZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdC8vIHNtYXJ0IGZvcm0gaW1wcm92ZW1lbnRzXG5cdFx0dGhpcy5pbWFwU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLm5hbWUoKSAmJiAnJyA9PT0gdGhpcy5pbWFwU2VydmVyKCkpIHtcblx0XHRcdFx0dGhpcy5pbWFwU2VydmVyKHRoaXMubmFtZSgpLnJlcGxhY2UoL1suXT9bKl1bLl0/L2csICcnKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNpZXZlU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLmltYXBTZXJ2ZXIoKSAmJiAnJyA9PT0gdGhpcy5zaWV2ZVNlcnZlcigpKSB7XG5cdFx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIodGhpcy5pbWFwU2VydmVyKCkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zbXRwU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLmltYXBTZXJ2ZXIoKSAmJiAnJyA9PT0gdGhpcy5zbXRwU2VydmVyKCkpIHtcblx0XHRcdFx0dGhpcy5zbXRwU2VydmVyKHRoaXMuaW1hcFNlcnZlcigpLnJlcGxhY2UoL2ltYXAvZ2ksICdzbXRwJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pbWFwU2VjdXJlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh0aGlzLmVuYWJsZVNtYXJ0UG9ydHMoKSkge1xuXHRcdFx0XHRjb25zdCBwb3J0ID0gcEludCh0aGlzLmltYXBQb3J0KCkpO1xuXHRcdFx0XHRzd2l0Y2ggKHBTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0Y2FzZSAnMic6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuSW1hcFNzbCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltYXBQb3J0KHBTdHJpbmcoUG9ydHMuSW1hcCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuSW1hcCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltYXBQb3J0KHBTdHJpbmcoUG9ydHMuSW1hcFNzbCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNtdHBTZWN1cmUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZW5hYmxlU21hcnRQb3J0cygpKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnQgPSBwSW50KHRoaXMuc210cFBvcnQoKSk7XG5cdFx0XHRcdHN3aXRjaCAocFN0cmluZyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHRcdGlmIChQb3J0cy5TbXRwU3NsID09PSBwb3J0IHx8IFBvcnRzLlNtdHBTdGFydFRscyA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNtdHBQb3J0KHBTdHJpbmcoUG9ydHMuU210cCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuU210cCA9PT0gcG9ydCB8fCBQb3J0cy5TbXRwU3RhcnRUbHMgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zbXRwUG9ydChwU3RyaW5nKFBvcnRzLlNtdHBTc2wpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLlNtdHAgPT09IHBvcnQgfHwgUG9ydHMuU210cFNzbCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNtdHBQb3J0KHBTdHJpbmcoUG9ydHMuU210cFN0YXJ0VGxzKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmNhbkJlU2F2ZWQoKSlcblx0Y3JlYXRlT3JBZGRDb21tYW5kKCkge1xuXHRcdHRoaXMuc2F2aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVPclVwZGF0ZURvbWFpbihcblx0XHRcdF8uYmluZCh0aGlzLm9uRG9tYWluQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMpLFxuXHRcdFx0IXRoaXMuZWRpdCgpLFxuXHRcdFx0dGhpcy5uYW1lKCksXG5cblx0XHRcdHRoaXMuaW1hcFNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLmltYXBQb3J0KCkpLFxuXHRcdFx0dGhpcy5pbWFwU2VjdXJlKCksXG5cdFx0XHR0aGlzLmltYXBTaG9ydExvZ2luKCksXG5cblx0XHRcdHRoaXMudXNlU2lldmUoKSxcblx0XHRcdHRoaXMuc2lldmVBbGxvd1JhdygpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLnNpZXZlUG9ydCgpKSxcblx0XHRcdHRoaXMuc2lldmVTZWN1cmUoKSxcblxuXHRcdFx0dGhpcy5zbXRwU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc210cFBvcnQoKSksXG5cdFx0XHR0aGlzLnNtdHBTZWN1cmUoKSxcblx0XHRcdHRoaXMuc210cFNob3J0TG9naW4oKSxcblx0XHRcdHRoaXMuc210cEF1dGgoKSxcblx0XHRcdHRoaXMuc210cFBocE1haWwoKSxcblxuXHRcdFx0dGhpcy53aGl0ZUxpc3QoKVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5jYW5CZVRlc3RlZCgpKVxuXHR0ZXN0Q29ubmVjdGlvbkNvbW1hbmQoKSB7XG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cblx0XHR0aGlzLnRlc3RpbmdEb25lKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nKHRydWUpO1xuXG5cdFx0UmVtb3RlLnRlc3RDb25uZWN0aW9uRm9yRG9tYWluKFxuXHRcdFx0Xy5iaW5kKHRoaXMub25UZXN0Q29ubmVjdGlvblJlc3BvbnNlLCB0aGlzKSxcblx0XHRcdHRoaXMubmFtZSgpLFxuXG5cdFx0XHR0aGlzLmltYXBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5pbWFwUG9ydCgpKSxcblx0XHRcdHRoaXMuaW1hcFNlY3VyZSgpLFxuXG5cdFx0XHR0aGlzLnVzZVNpZXZlKCksXG5cdFx0XHR0aGlzLnNpZXZlU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc2lldmVQb3J0KCkpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlY3VyZSgpLFxuXG5cdFx0XHR0aGlzLnNtdHBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5zbXRwUG9ydCgpKSxcblx0XHRcdHRoaXMuc210cFNlY3VyZSgpLFxuXHRcdFx0dGhpcy5zbXRwQXV0aCgpLFxuXHRcdFx0dGhpcy5zbXRwUGhwTWFpbCgpXG5cdFx0KTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0d2hpdGVMaXN0Q29tbWFuZCgpIHtcblx0XHR0aGlzLnBhZ2UoJ3doaXRlLWxpc3QnKTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0YmFja0NvbW1hbmQoKSB7XG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdHNpZXZlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoIXRoaXMuc2lldmVTZXR0aW5ncygpKTtcblx0XHR0aGlzLmNsZWFyVGVzdGluZygpO1xuXHR9XG5cblx0b25UZXN0Q29ubmVjdGlvblJlc3BvbnNlKHNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdGxldCBiSW1hcCA9IGZhbHNlLFxuXHRcdFx0XHRiU2lldmUgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy50ZXN0aW5nRG9uZSh0cnVlKTtcblx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcih0cnVlICE9PSBvRGF0YS5SZXN1bHQuSW1hcCk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKHRydWUgIT09IG9EYXRhLlJlc3VsdC5TaWV2ZSk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3IodHJ1ZSAhPT0gb0RhdGEuUmVzdWx0LlNtdHApO1xuXG5cdFx0XHRpZiAodGhpcy50ZXN0aW5nSW1hcEVycm9yKCkgJiYgb0RhdGEuUmVzdWx0LkltYXApIHtcblx0XHRcdFx0YkltYXAgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3JEZXNjKCcnKTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYyhvRGF0YS5SZXN1bHQuSW1hcCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKCkgJiYgb0RhdGEuUmVzdWx0LlNpZXZlKSB7XG5cdFx0XHRcdGJTaWV2ZSA9IHRydWU7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjKCcnKTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvckRlc2Mob0RhdGEuUmVzdWx0LlNpZXZlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudGVzdGluZ1NtdHBFcnJvcigpICYmIG9EYXRhLlJlc3VsdC5TbXRwKSB7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvckRlc2MoJycpO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3JEZXNjKG9EYXRhLlJlc3VsdC5TbXRwKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc2lldmVTZXR0aW5ncygpKSB7XG5cdFx0XHRcdGlmICghYlNpZXZlICYmIGJJbWFwKSB7XG5cdFx0XHRcdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChiU2lldmUgJiYgIWJJbWFwKSB7XG5cdFx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyh0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0b25Eb21haW5DcmVhdGVPclNhdmVSZXNwb25zZShzUmVzdWx0LCBvRGF0YSkge1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSkge1xuXHRcdFx0aWYgKG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWREb21haW5MaXN0KCk7XG5cdFx0XHRcdHRoaXMuY2xvc2VDb21tYW5kKCk7XG5cdFx0XHR9IGVsc2UgaWYgKE5vdGlmaWNhdGlvbi5Eb21haW5BbHJlYWR5RXhpc3RzID09PSBvRGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvRE9NQUlOX0FMUkVBRFlfRVhJU1RTJykpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNhdmluZ0Vycm9yKGkxOG4oJ0VSUk9SUy9VTktOT1dOX0VSUk9SJykpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyVGVzdGluZygpIHtcblx0XHR0aGlzLnRlc3RpbmcoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0RvbmUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yKGZhbHNlKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXHR9XG5cblx0b25TaG93KG9Eb21haW4pIHtcblx0XHR0aGlzLnNhdmluZyhmYWxzZSk7XG5cblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXG5cdFx0dGhpcy5jbGVhclRlc3RpbmcoKTtcblxuXHRcdHRoaXMuY2xlYXJGb3JtKCk7XG5cdFx0aWYgKG9Eb21haW4pIHtcblx0XHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyhmYWxzZSk7XG5cblx0XHRcdHRoaXMuZWRpdCh0cnVlKTtcblxuXHRcdFx0dGhpcy5uYW1lKHRyaW0ob0RvbWFpbi5OYW1lKSk7XG5cdFx0XHR0aGlzLmltYXBTZXJ2ZXIodHJpbShvRG9tYWluLkluY0hvc3QpKTtcblx0XHRcdHRoaXMuaW1hcFBvcnQoJycgKyBwSW50KG9Eb21haW4uSW5jUG9ydCkpO1xuXHRcdFx0dGhpcy5pbWFwU2VjdXJlKHRyaW0ob0RvbWFpbi5JbmNTZWN1cmUpKTtcblx0XHRcdHRoaXMuaW1hcFNob3J0TG9naW4oISFvRG9tYWluLkluY1Nob3J0TG9naW4pO1xuXHRcdFx0dGhpcy51c2VTaWV2ZSghIW9Eb21haW4uVXNlU2lldmUpO1xuXHRcdFx0dGhpcy5zaWV2ZUFsbG93UmF3KCEhb0RvbWFpbi5TaWV2ZUFsbG93UmF3KTtcblx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIodHJpbShvRG9tYWluLlNpZXZlSG9zdCkpO1xuXHRcdFx0dGhpcy5zaWV2ZVBvcnQoJycgKyBwSW50KG9Eb21haW4uU2lldmVQb3J0KSk7XG5cdFx0XHR0aGlzLnNpZXZlU2VjdXJlKHRyaW0ob0RvbWFpbi5TaWV2ZVNlY3VyZSkpO1xuXHRcdFx0dGhpcy5zbXRwU2VydmVyKHRyaW0ob0RvbWFpbi5PdXRIb3N0KSk7XG5cdFx0XHR0aGlzLnNtdHBQb3J0KCcnICsgcEludChvRG9tYWluLk91dFBvcnQpKTtcblx0XHRcdHRoaXMuc210cFNlY3VyZSh0cmltKG9Eb21haW4uT3V0U2VjdXJlKSk7XG5cdFx0XHR0aGlzLnNtdHBTaG9ydExvZ2luKCEhb0RvbWFpbi5PdXRTaG9ydExvZ2luKTtcblx0XHRcdHRoaXMuc210cEF1dGgoISFvRG9tYWluLk91dEF1dGgpO1xuXHRcdFx0dGhpcy5zbXRwUGhwTWFpbCghIW9Eb21haW4uT3V0VXNlUGhwTWFpbCk7XG5cdFx0XHR0aGlzLndoaXRlTGlzdCh0cmltKG9Eb21haW4uV2hpdGVMaXN0KSk7XG5cdFx0XHR0aGlzLmFsaWFzTmFtZSh0cmltKG9Eb21haW4uQWxpYXNOYW1lKSk7XG5cblx0XHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKCcnID09PSB0aGlzLm5hbWUoKSAmJiAhYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5uYW1lLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJGb3JtKCkge1xuXHRcdHRoaXMuZWRpdChmYWxzZSk7XG5cblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXG5cdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzKGZhbHNlKTtcblxuXHRcdHRoaXMuc2F2aW5nRXJyb3IoJycpO1xuXG5cdFx0dGhpcy5uYW1lKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZChmYWxzZSk7XG5cblx0XHR0aGlzLmltYXBTZXJ2ZXIoJycpO1xuXHRcdHRoaXMuaW1hcFBvcnQoJycgKyBJTUFQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5pbWFwU2VjdXJlKFNlcnZlclNlY3VyZS5Ob25lKTtcblx0XHR0aGlzLmltYXBTaG9ydExvZ2luKGZhbHNlKTtcblxuXHRcdHRoaXMudXNlU2lldmUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVBbGxvd1JhdyhmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZVNlcnZlcignJyk7XG5cdFx0dGhpcy5zaWV2ZVBvcnQoJycgKyBTSUVWRV9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc2lldmVTZWN1cmUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXG5cdFx0dGhpcy5zbXRwU2VydmVyKCcnKTtcblx0XHR0aGlzLnNtdHBQb3J0KCcnICsgU01UUF9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc210cFNlY3VyZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2hvcnRMb2dpbihmYWxzZSk7XG5cdFx0dGhpcy5zbXRwQXV0aCh0cnVlKTtcblx0XHR0aGlzLnNtdHBQaHBNYWlsKGZhbHNlKTtcblxuXHRcdHRoaXMud2hpdGVMaXN0KCcnKTtcblx0XHR0aGlzLmFsaWFzTmFtZSgnJyk7XG5cdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzKHRydWUpO1xuXHR9XG59XG5cbmV4cG9ydCB7IERvbWFpblBvcHVwVmlldywgRG9tYWluUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IGFkZFNldHRpbmdzVmlld01vZGVsIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcblxuaW1wb3J0IHsgQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiB9IGZyb20gJ1NjcmVlbi9BYnN0cmFjdFNldHRpbmdzJztcblxuaW1wb3J0IHsgR2VuZXJhbEFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9HZW5lcmFsJztcbmltcG9ydCB7IERvbWFpbnNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vRG9tYWlucyc7XG5pbXBvcnQgeyBMb2dpbkFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9Mb2dpbic7XG5pbXBvcnQgeyBDb250YWN0c0FkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9Db250YWN0cyc7XG5pbXBvcnQgeyBTZWN1cml0eUFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9TZWN1cml0eSc7XG5pbXBvcnQgeyBTb2NpYWxBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vU29jaWFsJztcbmltcG9ydCB7IFBsdWdpbnNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vUGx1Z2lucyc7XG5pbXBvcnQgeyBQYWNrYWdlc0FkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9QYWNrYWdlcyc7XG5pbXBvcnQgeyBBYm91dEFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9BYm91dCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgTWVudVNldHRpbmdzQWRtaW5WaWV3IH0gZnJvbSAnVmlldy9BZG1pbi9TZXR0aW5ncy9NZW51JztcbmltcG9ydCB7IFBhbmVTZXR0aW5nc0FkbWluVmlldyB9IGZyb20gJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvUGFuZSc7XG5cbmNsYXNzIFNldHRpbmdzQWRtaW5TY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoW01lbnVTZXR0aW5nc0FkbWluVmlldywgUGFuZVNldHRpbmdzQWRtaW5WaWV3XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGZDYWxsYmFjayA9IG51bGxcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGxldCBicmFuZGluZyA9IG51bGwsXG5cdFx0XHRsaWNlbnNpbmcgPSBudWxsO1xuXG5cdFx0aWYgKFJMX0NPTU1VTklUWSkge1xuXHRcdFx0YnJhbmRpbmcgPSByZXF1aXJlKCdTZXR0aW5ncy9BZG1pbi9CcmFuZGluZycpLmRlZmF1bHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJyYW5kaW5nID0gcmVxdWlyZSgnU2V0dGluZ3MvQWRtaW4vUHJlbS9CcmFuZGluZycpLmRlZmF1bHQ7XG5cdFx0XHRsaWNlbnNpbmcgPSByZXF1aXJlKCdTZXR0aW5ncy9BZG1pbi9QcmVtL0xpY2Vuc2luZycpLmRlZmF1bHQ7XG5cdFx0fVxuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoXG5cdFx0XHRHZW5lcmFsQWRtaW5TZXR0aW5ncyxcblx0XHRcdCdBZG1pblNldHRpbmdzR2VuZXJhbCcsXG5cdFx0XHQnVEFCU19MQUJFTFMvTEFCRUxfR0VORVJBTF9OQU1FJyxcblx0XHRcdCdnZW5lcmFsJyxcblx0XHRcdHRydWVcblx0XHQpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoRG9tYWluc0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzRG9tYWlucycsICdUQUJTX0xBQkVMUy9MQUJFTF9ET01BSU5TX05BTUUnLCAnZG9tYWlucycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoTG9naW5BZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0xvZ2luJywgJ1RBQlNfTEFCRUxTL0xBQkVMX0xPR0lOX05BTUUnLCAnbG9naW4nKTtcblxuXHRcdGlmIChicmFuZGluZykge1xuXHRcdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoYnJhbmRpbmcsICdBZG1pblNldHRpbmdzQnJhbmRpbmcnLCAnVEFCU19MQUJFTFMvTEFCRUxfQlJBTkRJTkdfTkFNRScsICdicmFuZGluZycpO1xuXHRcdH1cblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKENvbnRhY3RzQWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NDb250YWN0cycsICdUQUJTX0xBQkVMUy9MQUJFTF9DT05UQUNUU19OQU1FJywgJ2NvbnRhY3RzJyk7XG5cblx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChTZWN1cml0eUFkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzU2VjdXJpdHknLCAnVEFCU19MQUJFTFMvTEFCRUxfU0VDVVJJVFlfTkFNRScsICdzZWN1cml0eScpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoXG5cdFx0XHRTb2NpYWxBZG1pblNldHRpbmdzLFxuXHRcdFx0J0FkbWluU2V0dGluZ3NTb2NpYWwnLFxuXHRcdFx0J1RBQlNfTEFCRUxTL0xBQkVMX0lOVEVHUkFUSU9OX05BTUUnLFxuXHRcdFx0J2ludGVncmF0aW9ucydcblx0XHQpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoUGx1Z2luc0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzUGx1Z2lucycsICdUQUJTX0xBQkVMUy9MQUJFTF9QTFVHSU5TX05BTUUnLCAncGx1Z2lucycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoUGFja2FnZXNBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc1BhY2thZ2VzJywgJ1RBQlNfTEFCRUxTL0xBQkVMX1BBQ0tBR0VTX05BTUUnLCAncGFja2FnZXMnKTtcblxuXHRcdGlmIChsaWNlbnNpbmcpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKGxpY2Vuc2luZywgJ0FkbWluU2V0dGluZ3NMaWNlbnNpbmcnLCAnVEFCU19MQUJFTFMvTEFCRUxfTElDRU5TSU5HX05BTUUnLCAnbGljZW5zaW5nJyk7XG5cdFx0fVxuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoQWJvdXRBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0Fib3V0JywgJ1RBQlNfTEFCRUxTL0xBQkVMX0FCT1VUX05BTUUnLCAnYWJvdXQnKTtcblxuXHRcdHJ1blNldHRpbmdzVmlld01vZGVsSG9va3ModHJ1ZSk7XG5cblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2soKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNldHRpbmdzQWRtaW5TY3JlZW4sIFNldHRpbmdzQWRtaW5TY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQge1xuXHR0cmltLFxuXHRwSW50LFxuXHRib29sVG9BamF4LFxuXHRzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbixcblx0Y2hhbmdlVGhlbWUsXG5cdGNvbnZlcnRUaGVtZU5hbWUsXG5cdGNvbnZlcnRMYW5nTmFtZVxufSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcmVsb2FkIGFzIHRyYW5zbGF0b3JSZWxvYWQgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBwaHBJbmZvIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCBUaGVtZVN0b3JlIGZyb20gJ1N0b3Jlcy9UaGVtZSc7XG5pbXBvcnQgTGFuZ3VhZ2VTdG9yZSBmcm9tICdTdG9yZXMvTGFuZ3VhZ2UnO1xuaW1wb3J0IEFwcEFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYUFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NhcGEnO1xuXG5jbGFzcyBHZW5lcmFsQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubGFuZ3VhZ2UgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlO1xuXHRcdHRoaXMubGFuZ3VhZ2VzID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZXM7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZUFkbWluO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4gPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlc0FkbWluO1xuXG5cdFx0dGhpcy50aGVtZSA9IFRoZW1lU3RvcmUudGhlbWU7XG5cdFx0dGhpcy50aGVtZXMgPSBUaGVtZVN0b3JlLnRoZW1lcztcblxuXHRcdHRoaXMuY2FwYVRoZW1lcyA9IENhcGFBZG1pblN0b3JlLnRoZW1lcztcblx0XHR0aGlzLmNhcGFVc2VyQmFja2dyb3VuZCA9IENhcGFBZG1pblN0b3JlLnVzZXJCYWNrZ3JvdW5kO1xuXHRcdHRoaXMuY2FwYUdyYXZhdGFyID0gQ2FwYUFkbWluU3RvcmUuZ3JhdmF0YXI7XG5cdFx0dGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzID0gQ2FwYUFkbWluU3RvcmUuYWRkaXRpb25hbEFjY291bnRzO1xuXHRcdHRoaXMuY2FwYUlkZW50aXRpZXMgPSBDYXBhQWRtaW5TdG9yZS5pZGVudGl0aWVzO1xuXHRcdHRoaXMuY2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzID0gQ2FwYUFkbWluU3RvcmUuYXR0YWNobWVudFRodW1ibmFpbHM7XG5cdFx0dGhpcy5jYXBhVGVtcGxhdGVzID0gQ2FwYUFkbWluU3RvcmUudGVtcGxhdGVzO1xuXG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MgPSBBcHBBZG1pblN0b3JlLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncztcblx0XHR0aGlzLndlYWtQYXNzd29yZCA9IEFwcEFkbWluU3RvcmUud2Vha1Bhc3N3b3JkO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyID0gQXBwQWRtaW5TdG9yZS5uZXdNb3ZlVG9Gb2xkZXI7XG5cblx0XHR0aGlzLmRhdGFGb2xkZXJBY2Nlc3MgPSBBcHBBZG1pblN0b3JlLmRhdGFGb2xkZXJBY2Nlc3M7XG5cblx0XHR0aGlzLm1haW5BdHRhY2htZW50TGltaXQgPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUocEludChzZXR0aW5nc0dldCgnQXR0YWNobWVudExpbWl0JykpIC8gKE1hZ2ljcy5CaXRMZW5ndGgxMDI0ICogTWFnaWNzLkJpdExlbmd0aDEwMjQpKVxuXHRcdFx0LmV4dGVuZCh7IHBvc0ludGVyZXI6IDI1IH0pO1xuXG5cdFx0dGhpcy51cGxvYWREYXRhID0gc2V0dGluZ3NHZXQoJ1BocFVwbG9hZFNpemVzJyk7XG5cdFx0dGhpcy51cGxvYWREYXRhRGVzYyA9XG5cdFx0XHR0aGlzLnVwbG9hZERhdGEgJiYgKHRoaXMudXBsb2FkRGF0YS51cGxvYWRfbWF4X2ZpbGVzaXplIHx8IHRoaXMudXBsb2FkRGF0YS5wb3N0X21heF9zaXplKVxuXHRcdFx0XHQ/IFtcblx0XHRcdFx0XHRcdHRoaXMudXBsb2FkRGF0YS51cGxvYWRfbWF4X2ZpbGVzaXplXG5cdFx0XHRcdFx0XHRcdD8gJ3VwbG9hZF9tYXhfZmlsZXNpemUgPSAnICsgdGhpcy51cGxvYWREYXRhLnVwbG9hZF9tYXhfZmlsZXNpemUgKyAnOyAnXG5cdFx0XHRcdFx0XHRcdDogJycsXG5cdFx0XHRcdFx0XHR0aGlzLnVwbG9hZERhdGEucG9zdF9tYXhfc2l6ZSA/ICdwb3N0X21heF9zaXplID0gJyArIHRoaXMudXBsb2FkRGF0YS5wb3N0X21heF9zaXplIDogJydcblx0XHRcdFx0ICBdLmpvaW4oJycpXG5cdFx0XHRcdDogJyc7XG5cblx0XHR0aGlzLnRoZW1lc09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5tYXAodGhpcy50aGVtZXMoKSwgKHRoZW1lKSA9PiAoeyBvcHRWYWx1ZTogdGhlbWUsIG9wdFRleHQ6IGNvbnZlcnRUaGVtZU5hbWUodGhlbWUpIH0pKVxuXHRcdCk7XG5cblx0XHR0aGlzLmxhbmd1YWdlRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiBjb252ZXJ0TGFuZ05hbWUodGhpcy5sYW5ndWFnZSgpKSk7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiBjb252ZXJ0TGFuZ05hbWUodGhpcy5sYW5ndWFnZUFkbWluKCkpKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudExpbWl0VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmxhbmd1YWdlVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTEwMG1zIH0pO1xuXHRcdHRoaXMudGhlbWVUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5hdHRhY2htZW50TGltaXRUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxhbmd1YWdlVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy50aGVtZVRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIgPSAoc2F2ZVNldHRpbmdzU3RlcCkgPT4gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubGFuZ3VhZ2VBZG1pblRyaWdnZXIoc2F2ZVNldHRpbmdzU3RlcCk7XG5cdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSksIE1hZ2ljcy5UaW1lMXMpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHR0aGlzLm1haW5BdHRhY2htZW50TGltaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0J0F0dGFjaG1lbnRMaW1pdCc6IHBJbnQodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubGFuZ3VhZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0J0xhbmd1YWdlJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGUpO1xuXHRcdFx0XHR0cmFuc2xhdG9yUmVsb2FkKHRydWUsIHZhbHVlKVxuXHRcdFx0XHRcdC50aGVuKGZSZWxvYWRMYW5ndWFnZUhlbHBlcihTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQpLCBmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIoU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdCkpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0XHRcdCdMYW5ndWFnZUFkbWluJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudGhlbWUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjaGFuZ2VUaGVtZSh2YWx1ZSwgdGhpcy50aGVtZVRyaWdnZXIpO1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYzLCB7XG5cdFx0XHRcdFx0J1RoZW1lJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFBZGRpdGlvbmFsQWNjb3VudHMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFJZGVudGl0aWVzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFJZGVudGl0aWVzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhVGVtcGxhdGVzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFUZW1wbGF0ZXMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFHcmF2YXRhci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhR3JhdmF0YXInOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFBdHRhY2htZW50VGh1bWJuYWlscy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhQXR0YWNobWVudFRodW1ibmFpbHMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFUaGVtZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYVRoZW1lcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYVVzZXJCYWNrZ3JvdW5kLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFVc2VyQmFja2dyb3VuZCc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0FsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J05ld01vdmVUb0ZvbGRlcic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxuXG5cdHNlbGVjdExhbmd1YWdlKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0xhbmd1YWdlcycpLCBbdGhpcy5sYW5ndWFnZSwgdGhpcy5sYW5ndWFnZXMoKSwgTGFuZ3VhZ2VTdG9yZS51c2VyTGFuZ3VhZ2UoKV0pO1xuXHR9XG5cblx0c2VsZWN0TGFuZ3VhZ2VBZG1pbigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9MYW5ndWFnZXMnKSwgW1xuXHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluLFxuXHRcdFx0dGhpcy5sYW5ndWFnZXNBZG1pbigpLFxuXHRcdFx0TGFuZ3VhZ2VTdG9yZS51c2VyTGFuZ3VhZ2VBZG1pbigpXG5cdFx0XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHBocEluZm9MaW5rKCkge1xuXHRcdHJldHVybiBwaHBJbmZvKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgR2VuZXJhbEFkbWluU2V0dGluZ3MsIEdlbmVyYWxBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBEb21haW5zQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZG9tYWlucyA9IERvbWFpblN0b3JlLmRvbWFpbnM7XG5cblx0XHR0aGlzLnZpc2liaWxpdHkgPSBrby5jb21wdXRlZCgoKSA9PiAodGhpcy5kb21haW5zLmxvYWRpbmcoKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKSk7XG5cblx0XHR0aGlzLmRvbWFpbkZvckRlbGV0aW9uID0ga28ub2JzZXJ2YWJsZShudWxsKS5kZWxldGVBY2Nlc3NIZWxwZXIoKTtcblxuXHRcdHRoaXMub25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QsIHRoaXMpO1xuXHRcdHRoaXMub25Eb21haW5Mb2FkUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uRG9tYWluTG9hZFJlcXVlc3QsIHRoaXMpO1xuXHR9XG5cblx0Y3JlYXRlRG9tYWluKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0RvbWFpbicpKTtcblx0fVxuXG5cdGNyZWF0ZURvbWFpbkFsaWFzKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0RvbWFpbkFsaWFzJykpO1xuXHR9XG5cblx0ZGVsZXRlRG9tYWluKGRvbWFpbikge1xuXHRcdHRoaXMuZG9tYWlucy5yZW1vdmUoZG9tYWluKTtcblx0XHRSZW1vdGUuZG9tYWluRGVsZXRlKHRoaXMub25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCwgZG9tYWluLm5hbWUpO1xuXHR9XG5cblx0ZGlzYWJsZURvbWFpbihkb21haW4pIHtcblx0XHRkb21haW4uZGlzYWJsZWQoIWRvbWFpbi5kaXNhYmxlZCgpKTtcblx0XHRSZW1vdGUuZG9tYWluRGlzYWJsZSh0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QsIGRvbWFpbi5uYW1lLCBkb21haW4uZGlzYWJsZWQoKSk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRvRG9tLm9uKCdjbGljaycsICcuYi1hZG1pbi1kb21haW5zLWxpc3QtdGFibGUgLmUtaXRlbSAuZS1hY3Rpb24nLCBmdW5jdGlvbigpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRjb25zdCBkb21haW5JdGVtID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdGlmIChkb21haW5JdGVtKSB7XG5cdFx0XHRcdFJlbW90ZS5kb21haW4oc2VsZi5vbkRvbWFpbkxvYWRSZXF1ZXN0LCBkb21haW5JdGVtLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Z2V0QXBwKCkucmVsb2FkRG9tYWluTGlzdCgpO1xuXHR9XG5cblx0b25Eb21haW5Mb2FkUmVxdWVzdChzUmVzdWx0LCBvRGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRG9tYWluJyksIFtvRGF0YS5SZXN1bHRdKTtcblx0XHR9XG5cdH1cblxuXHRvbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0KCkge1xuXHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5zQWRtaW5TZXR0aW5ncywgRG9tYWluc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgYm9vbFRvQWpheCwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5jbGFzcyBMb2dpbkFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZSA9IEFwcFN0b3JlLmRldGVybWluZVVzZXJMYW5ndWFnZTtcblx0XHR0aGlzLmRldGVybWluZVVzZXJEb21haW4gPSBBcHBTdG9yZS5kZXRlcm1pbmVVc2VyRG9tYWluO1xuXG5cdFx0dGhpcy5kZWZhdWx0RG9tYWluID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5EZWZhdWx0RG9tYWluJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBBcHBTdG9yZS5hbGxvd0xhbmd1YWdlc09uTG9naW47XG5cblx0XHR0aGlzLmR1bW15ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmRlZmF1bHREb21haW4udHJpZ2dlciwgdGhpcyk7XG5cblx0XHRcdHRoaXMuZGV0ZXJtaW5lVXNlckxhbmd1YWdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0RldGVybWluZVVzZXJMYW5ndWFnZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZGV0ZXJtaW5lVXNlckRvbWFpbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdEZXRlcm1pbmVVc2VyRG9tYWluJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQWxsb3dMYW5ndWFnZXNPbkxvZ2luJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5kZWZhdWx0RG9tYWluLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdMb2dpbkRlZmF1bHREb21haW4nOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sIDUwKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2dpbkFkbWluU2V0dGluZ3MsIExvZ2luQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uLCBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIsIGluQXJyYXksIHRyaW0sIGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBTdG9yYWdlUmVzdWx0VHlwZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5pbXBvcnQgeyBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBDb250YWN0c0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciA9IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcjtcblx0XHR0aGlzLmVuYWJsZUNvbnRhY3RzID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdDb250YWN0c0VuYWJsZScpKTtcblx0XHR0aGlzLmNvbnRhY3RzU3luYyA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnQ29udGFjdHNTeW5jJykpO1xuXG5cdFx0Y29uc3Qgc3VwcG9ydGVkVHlwZXMgPSBbXSxcblx0XHRcdHR5cGVzID0gWydzcWxpdGUnLCAnbXlzcWwnLCAncGdzcWwnXSxcblx0XHRcdGdldFR5cGVOYW1lID0gKG5hbWUpID0+IHtcblx0XHRcdFx0c3dpdGNoIChuYW1lKSB7XG5cdFx0XHRcdFx0Y2FzZSAnc3FsaXRlJzpcblx0XHRcdFx0XHRcdG5hbWUgPSAnU1FMaXRlJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ215c3FsJzpcblx0XHRcdFx0XHRcdG5hbWUgPSAnTXlTUUwnO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncGdzcWwnOlxuXHRcdFx0XHRcdFx0bmFtZSA9ICdQb3N0Z3JlU1FMJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBuYW1lO1xuXHRcdFx0fTtcblxuXHRcdGlmIChzZXR0aW5nc0dldCgnU1FMaXRlSXNTdXBwb3J0ZWQnKSkge1xuXHRcdFx0c3VwcG9ydGVkVHlwZXMucHVzaCgnc3FsaXRlJyk7XG5cdFx0fVxuXHRcdGlmIChzZXR0aW5nc0dldCgnTXlTcWxJc1N1cHBvcnRlZCcpKSB7XG5cdFx0XHRzdXBwb3J0ZWRUeXBlcy5wdXNoKCdteXNxbCcpO1xuXHRcdH1cblx0XHRpZiAoc2V0dGluZ3NHZXQoJ1Bvc3RncmVTcWxJc1N1cHBvcnRlZCcpKSB7XG5cdFx0XHRzdXBwb3J0ZWRUeXBlcy5wdXNoKCdwZ3NxbCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29udGFjdHNTdXBwb3J0ZWQgPSAwIDwgc3VwcG9ydGVkVHlwZXMubGVuZ3RoO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZXNPcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8ubWFwKHRoaXMuY29udGFjdHNUeXBlcygpLCAodmFsdWUpID0+IHtcblx0XHRcdFx0Y29uc3QgZGlzYWJsZWQgPSAtMSA9PT0gaW5BcnJheSh2YWx1ZSwgc3VwcG9ydGVkVHlwZXMpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdCdpZCc6IHZhbHVlLFxuXHRcdFx0XHRcdCduYW1lJzogZ2V0VHlwZU5hbWUodmFsdWUpICsgKGRpc2FibGVkID8gJyAoJyArIGkxOG4oJ0hJTlRTL05PVF9TVVBQT1JURUQnKSArICcpJyA6ICcnKSxcblx0XHRcdFx0XHQnZGlzYWJsZWQnOiBkaXNhYmxlZFxuXHRcdFx0XHR9O1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGVzKHR5cGVzKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5tYWluQ29udGFjdHNUeXBlID0ga29cblx0XHRcdC5jb21wdXRlZCh7XG5cdFx0XHRcdHJlYWQ6IHRoaXMuY29udGFjdHNUeXBlLFxuXHRcdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlICE9PSB0aGlzLmNvbnRhY3RzVHlwZSgpKSB7XG5cdFx0XHRcdFx0XHRpZiAoLTEgPCBpbkFycmF5KHZhbHVlLCBzdXBwb3J0ZWRUeXBlcykpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250YWN0c1R5cGUodmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgwIDwgc3VwcG9ydGVkVHlwZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29udGFjdHNUeXBlKCcnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5jb250YWN0c1R5cGUudmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzVHlwZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wZG9Ec24gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb0RzbicpKTtcblx0XHR0aGlzLnBkb1VzZXIgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1VzZXInKSk7XG5cdFx0dGhpcy5wZG9QYXNzd29yZCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvUGFzc3dvcmQnKSk7XG5cblx0XHR0aGlzLnBkb0RzblRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5wZG9Vc2VyVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLnBkb1Bhc3N3b3JkVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLnRlc3RpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29udGFjdHNUeXBlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1R5cGUnKSk7XG5cblx0XHR0aGlzLm9uVGVzdENvbnRhY3RzUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vblRlc3RDb250YWN0c1Jlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAnJyAhPT0gc2VsZi5wZG9Ec24oKSAmJiAnJyAhPT0gc2VsZi5wZG9Vc2VyKCkpXG5cdHRlc3RDb250YWN0c0NvbW1hbmQoKSB7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdFx0dGhpcy50ZXN0aW5nKHRydWUpO1xuXG5cdFx0UmVtb3RlLnRlc3RDb250YWN0cyh0aGlzLm9uVGVzdENvbnRhY3RzUmVzcG9uc2UsIHtcblx0XHRcdCdDb250YWN0c1Bkb1R5cGUnOiB0aGlzLmNvbnRhY3RzVHlwZSgpLFxuXHRcdFx0J0NvbnRhY3RzUGRvRHNuJzogdGhpcy5wZG9Ec24oKSxcblx0XHRcdCdDb250YWN0c1Bkb1VzZXInOiB0aGlzLnBkb1VzZXIoKSxcblx0XHRcdCdDb250YWN0c1Bkb1Bhc3N3b3JkJzogdGhpcy5wZG9QYXNzd29yZCgpXG5cdFx0fSk7XG5cdH1cblxuXHRvblRlc3RDb250YWN0c1Jlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2VzcyhmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0LlJlc3VsdCkge1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKHRydWUpO1xuXHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoZGF0YS5SZXN1bHQuTWVzc2FnZSB8fCAnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKCcnKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRjb25zdCBmMSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMucGRvRHNuVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5wZG9Vc2VyVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGY0ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5wZG9QYXNzd29yZFRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmNSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuY29udGFjdHNUeXBlVHJpZ2dlciwgdGhpcyk7XG5cblx0XHRcdHRoaXMuZW5hYmxlQ29udGFjdHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNFbmFibGUnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNvbnRhY3RzU3luYy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDb250YWN0c1N5bmMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNvbnRhY3RzVHlwZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjUsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNQZG9UeXBlJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wZG9Ec24uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzUGRvRHNuJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wZG9Vc2VyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMywge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb1VzZXInOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnBkb1Bhc3N3b3JkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmNCwge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb1Bhc3N3b3JkJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jb250YWN0c1R5cGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvVHlwZScpKTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IENvbnRhY3RzQWRtaW5TZXR0aW5ncywgQ29udGFjdHNBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgdHJpbSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBwaHBJbmZvIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcbmltcG9ydCBDYXBhQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ2FwYSc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBTZWN1cml0eUFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyA9IEFwcEFkbWluU3RvcmUudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzO1xuXG5cdFx0dGhpcy53ZWFrUGFzc3dvcmQgPSBBcHBBZG1pblN0b3JlLndlYWtQYXNzd29yZDtcblxuXHRcdHRoaXMuY2FwYU9wZW5QR1AgPSBDYXBhQWRtaW5TdG9yZS5vcGVuUEdQO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aCA9IENhcGFBZG1pblN0b3JlLnR3b0ZhY3RvckF1dGg7XG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aEZvcmNlID0gQ2FwYUFkbWluU3RvcmUudHdvRmFjdG9yQXV0aEZvcmNlO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGhGb3JjZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZlcmlmeVNzbENlcnRpZmljYXRlID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdWZXJpZnlTc2xDZXJ0aWZpY2F0ZScpKTtcblx0XHR0aGlzLmFsbG93U2VsZlNpZ25lZCA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnQWxsb3dTZWxmU2lnbmVkJykpO1xuXG5cdFx0dGhpcy52ZXJpZnlTc2xDZXJ0aWZpY2F0ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuYWxsb3dTZWxmU2lnbmVkKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93biA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnR3b0ZhY3RvckRyb3BwZXJVc2VyLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWRtaW5Mb2dpbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0FkbWluTG9naW4nKSk7XG5cdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3RXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRtaW5Mb2dpbi5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3RXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAnJyAhPT0gdHJpbShzZWxmLmFkbWluTG9naW4oKSkgJiYgJycgIT09IHNlbGYuYWRtaW5QYXNzd29yZCgpKVxuXHRzYXZlTmV3QWRtaW5QYXNzd29yZENvbW1hbmQoKSB7XG5cdFx0aWYgKCcnID09PSB0cmltKHRoaXMuYWRtaW5Mb2dpbigpKSkge1xuXHRcdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuYWRtaW5QYXNzd29yZE5ldygpICE9PSB0aGlzLmFkbWluUGFzc3dvcmROZXcyKCkpIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblxuXHRcdFJlbW90ZS5zYXZlTmV3QWRtaW5QYXNzd29yZCh0aGlzLm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlLCB7XG5cdFx0XHQnTG9naW4nOiB0aGlzLmFkbWluTG9naW4oKSxcblx0XHRcdCdQYXNzd29yZCc6IHRoaXMuYWRtaW5QYXNzd29yZCgpLFxuXHRcdFx0J05ld1Bhc3N3b3JkJzogdGhpcy5hZG1pblBhc3N3b3JkTmV3KClcblx0XHR9KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0c2hvd1R3b0ZhY3RvckRyb3BwZXIoKSB7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlcignJyk7XG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93bih0cnVlKTtcblxuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlci5mb2N1c2VkKHRydWUpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cblxuXHRvbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZShyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZCgnJyk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcoJycpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3MignJyk7XG5cblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3ModHJ1ZSk7XG5cblx0XHRcdHRoaXMud2Vha1Bhc3N3b3JkKCEhZGF0YS5SZXN1bHQuV2Vhayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0dGhpcy5jYXBhT3BlblBHUC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0NhcGFPcGVuUEdQJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0NhcGFUd29GYWN0b3JBdXRoJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aEZvcmNlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnQ2FwYVR3b0ZhY3RvckF1dGhGb3JjZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnVXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy52ZXJpZnlTc2xDZXJ0aWZpY2F0ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J1ZlcmlmeVNzbENlcnRpZmljYXRlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hbGxvd1NlbGZTaWduZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdBbGxvd1NlbGZTaWduZWQnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcoJycpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIoJycpO1xuXG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93bihmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlcignJyk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlci5mb2N1c2VkKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0cGhwSW5mb0xpbmsoKSB7XG5cdFx0cmV0dXJuIHBocEluZm8oKTtcblx0fVxufVxuXG5leHBvcnQgeyBTZWN1cml0eUFkbWluU2V0dGluZ3MsIFNlY3VyaXR5QWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgdHJpbSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmNsYXNzIFNvY2lhbEFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5lbmFibGVkO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlQXV0aCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmF1dGg7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoR21haWwgPSBTb2NpYWxTdG9yZS5nb29nbGUuY2FwYS5hdXRoR21haWw7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVEcml2ZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmRyaXZlO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUHJldmlldyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLnByZXZpZXc7XG5cblx0XHR0aGlzLmdvb2dsZUVuYWJsZVJlcXVpcmVDbGllbnRTZXR0aW5ncyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5yZXF1aXJlLmNsaWVudFNldHRpbmdzO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUmVxdWlyZUFwaUtleSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5yZXF1aXJlLmFwaUtleVNldHRpbmdzO1xuXG5cdFx0dGhpcy5nb29nbGVDbGllbnRJRCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jbGllbnRJRDtcblx0XHR0aGlzLmdvb2dsZUNsaWVudFNlY3JldCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jbGllbnRTZWNyZXQ7XG5cdFx0dGhpcy5nb29nbGVBcGlLZXkgPSBTb2NpYWxTdG9yZS5nb29nbGUuYXBpS2V5O1xuXG5cdFx0dGhpcy5nb29nbGVUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmdvb2dsZVRyaWdnZXIyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMuZ29vZ2xlVHJpZ2dlcjMgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLmZhY2Vib29rU3VwcG9ydGVkID0gU29jaWFsU3RvcmUuZmFjZWJvb2suc3VwcG9ydGVkO1xuXHRcdHRoaXMuZmFjZWJvb2tFbmFibGUgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5lbmFibGVkO1xuXHRcdHRoaXMuZmFjZWJvb2tBcHBJRCA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLmFwcElEO1xuXHRcdHRoaXMuZmFjZWJvb2tBcHBTZWNyZXQgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5hcHBTZWNyZXQ7XG5cblx0XHR0aGlzLmZhY2Vib29rVHJpZ2dlcjEgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5mYWNlYm9va1RyaWdnZXIyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy50d2l0dGVyRW5hYmxlID0gU29jaWFsU3RvcmUudHdpdHRlci5lbmFibGVkO1xuXHRcdHRoaXMudHdpdHRlckNvbnN1bWVyS2V5ID0gU29jaWFsU3RvcmUudHdpdHRlci5jb25zdW1lcktleTtcblx0XHR0aGlzLnR3aXR0ZXJDb25zdW1lclNlY3JldCA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQ7XG5cblx0XHR0aGlzLnR3aXR0ZXJUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLnR3aXR0ZXJUcmlnZ2VyMiA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMuZHJvcGJveEVuYWJsZSA9IFNvY2lhbFN0b3JlLmRyb3Bib3guZW5hYmxlZDtcblx0XHR0aGlzLmRyb3Bib3hBcGlLZXkgPSBTb2NpYWxTdG9yZS5kcm9wYm94LmFwaUtleTtcblxuXHRcdHRoaXMuZHJvcGJveFRyaWdnZXIxID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5mYWNlYm9va1RyaWdnZXIxLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmZhY2Vib29rVHJpZ2dlcjIsIHRoaXMpLFxuXHRcdFx0XHRmMyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMudHdpdHRlclRyaWdnZXIxLCB0aGlzKSxcblx0XHRcdFx0ZjQgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnR3aXR0ZXJUcmlnZ2VyMiwgdGhpcyksXG5cdFx0XHRcdGY1ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMSwgdGhpcyksXG5cdFx0XHRcdGY2ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMiwgdGhpcyksXG5cdFx0XHRcdGY3ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMywgdGhpcyksXG5cdFx0XHRcdGY4ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5kcm9wYm94VHJpZ2dlcjEsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLmZhY2Vib29rRW5hYmxlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdFx0J0ZhY2Vib29rRW5hYmxlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmFjZWJvb2tBcHBJRC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmZhY2Vib29rU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0XHQnRmFjZWJvb2tBcHBJRCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmZhY2Vib29rQXBwU2VjcmV0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjIsIHtcblx0XHRcdFx0XHRcdCdGYWNlYm9va0FwcFNlY3JldCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnR3aXR0ZXJFbmFibGUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ1R3aXR0ZXJFbmFibGUnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLnR3aXR0ZXJDb25zdW1lcktleS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignVHdpdHRlckNvbnN1bWVyS2V5JywgdHJpbSwgZjMpKTtcblx0XHRcdHRoaXMudHdpdHRlckNvbnN1bWVyU2VjcmV0LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdUd2l0dGVyQ29uc3VtZXJTZWNyZXQnLCB0cmltLCBmNCkpO1xuXG5cdFx0XHR0aGlzLmdvb2dsZUVuYWJsZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlRW5hYmxlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVBdXRoJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoR21haWwuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZUF1dGhHbWFpbCcsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZ29vZ2xlRW5hYmxlRHJpdmUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZURyaXZlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVQcmV2aWV3LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVQcmV2aWV3JywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVDbGllbnRJRC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlQ2xpZW50SUQnLCB0cmltLCBmNSkpO1xuXHRcdFx0dGhpcy5nb29nbGVDbGllbnRTZWNyZXQuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUNsaWVudFNlY3JldCcsIHRyaW0sIGY2KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUFwaUtleS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlQXBpS2V5JywgdHJpbSwgZjcpKTtcblxuXHRcdFx0dGhpcy5kcm9wYm94RW5hYmxlLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdEcm9wYm94RW5hYmxlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5kcm9wYm94QXBpS2V5LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdEcm9wYm94QXBpS2V5JywgdHJpbSwgZjgpKTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNvY2lhbEFkbWluU2V0dGluZ3MsIFNvY2lhbEFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgUGx1Z2luU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BsdWdpbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmNsYXNzIFBsdWdpbnNBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5lbmFibGVkUGx1Z2lucyA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnRW5hYmxlZFBsdWdpbnMnKSk7XG5cblx0XHR0aGlzLnBsdWdpbnMgPSBQbHVnaW5TdG9yZS5wbHVnaW5zO1xuXHRcdHRoaXMucGx1Z2luc0Vycm9yID0gUGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcjtcblxuXHRcdHRoaXMuY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZIHx8IEFwcFN0b3JlLmNvbW11bml0eSgpO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKFBsdWdpblN0b3JlLnBsdWdpbnMubG9hZGluZygpID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpKTtcblxuXHRcdHRoaXMub25QbHVnaW5Mb2FkUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QsIHRoaXMpO1xuXHRcdHRoaXMub25QbHVnaW5EaXNhYmxlUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QsIHRoaXMpO1xuXHR9XG5cblx0ZGlzYWJsZVBsdWdpbihwbHVnaW4pIHtcblx0XHRwbHVnaW4uZGlzYWJsZWQoIXBsdWdpbi5kaXNhYmxlZCgpKTtcblx0XHRSZW1vdGUucGx1Z2luRGlzYWJsZSh0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QsIHBsdWdpbi5uYW1lLCBwbHVnaW4uZGlzYWJsZWQoKSk7XG5cdH1cblxuXHRjb25maWd1cmVQbHVnaW4ocGx1Z2luKSB7XG5cdFx0UmVtb3RlLnBsdWdpbih0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QsIHBsdWdpbi5uYW1lKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0b0RvbVxuXHRcdFx0Lm9uKCdjbGljaycsICcuZS1pdGVtIC5jb25maWd1cmUtcGx1Z2luLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBwbHVnaW4gPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRpZiAocGx1Z2luKSB7XG5cdFx0XHRcdFx0c2VsZi5jb25maWd1cmVQbHVnaW4ocGx1Z2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmUtaXRlbSAuZGlzYWJsZWQtcGx1Z2luJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdGNvbnN0IHBsdWdpbiA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChwbHVnaW4pIHtcblx0XHRcdFx0XHRzZWxmLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLmVuYWJsZWRQbHVnaW5zLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnRW5hYmxlZFBsdWdpbnMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcignJyk7XG5cdFx0Z2V0QXBwKCkucmVsb2FkUGx1Z2luTGlzdCgpO1xuXHR9XG5cblx0b25QbHVnaW5Mb2FkUmVxdWVzdChyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL1BsdWdpbicpLCBbZGF0YS5SZXN1bHRdKTtcblx0XHR9XG5cdH1cblxuXHRvblBsdWdpbkRpc2FibGVSZXF1ZXN0KHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0aWYgKCFkYXRhLlJlc3VsdCAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRpZiAoTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSA9PT0gZGF0YS5FcnJvckNvZGUgJiYgZGF0YS5FcnJvck1lc3NhZ2UgJiYgJycgIT09IGRhdGEuRXJyb3JNZXNzYWdlKSB7XG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcihkYXRhLkVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGdldEFwcCgpLnJlbG9hZFBsdWdpbkxpc3QoKTtcblx0fVxufVxuXG5leHBvcnQgeyBQbHVnaW5zQWRtaW5TZXR0aW5ncywgUGx1Z2luc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBQYWNrYWdlc0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnBhY2thZ2VzRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucGFja2FnZXMgPSBQYWNrYWdlU3RvcmUucGFja2FnZXM7XG5cdFx0dGhpcy5wYWNrYWdlc1JlYWwgPSBQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsO1xuXHRcdHRoaXMucGFja2FnZXNNYWluVXBkYXRhYmxlID0gUGFja2FnZVN0b3JlLnBhY2thZ2VzTWFpblVwZGF0YWJsZTtcblxuXHRcdHRoaXMucGFja2FnZXNDdXJyZW50ID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMucGFja2FnZXMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uaW5zdGFsbGVkICYmICFpdGVtLmNvbXBhcmUpXG5cdFx0KTtcblx0XHR0aGlzLnBhY2thZ2VzQXZhaWxhYmxlRm9yVXBkYXRlID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMucGFja2FnZXMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uaW5zdGFsbGVkICYmICEhaXRlbS5jb21wYXJlKVxuXHRcdCk7XG5cdFx0dGhpcy5wYWNrYWdlc0F2YWlsYWJsZUZvckluc3RhbGxhdGlvbiA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiBpdGVtICYmICcnID09PSBpdGVtLmluc3RhbGxlZClcblx0XHQpO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKFBhY2thZ2VTdG9yZS5wYWNrYWdlcy5sb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMucGFja2FnZXNFcnJvcignJyk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGdldEFwcCgpLnJlbG9hZFBhY2thZ2VzTGlzdCgpO1xuXHR9XG5cblx0cmVxdWVzdEhlbHBlcihwYWNrYWdlVG9SZXF1ZXN0LCBpbnN0YWxsKSB7XG5cdFx0cmV0dXJuIChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSByZXN1bHQgfHwgIWRhdGEgfHwgIWRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGlmIChkYXRhICYmIGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0dGhpcy5wYWNrYWdlc0Vycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucGFja2FnZXNFcnJvcihcblx0XHRcdFx0XHRcdGdldE5vdGlmaWNhdGlvbihpbnN0YWxsID8gTm90aWZpY2F0aW9uLkNhbnRJbnN0YWxsUGFja2FnZSA6IE5vdGlmaWNhdGlvbi5DYW50RGVsZXRlUGFja2FnZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdF8uZWFjaCh0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmIChpdGVtICYmIHBhY2thZ2VUb1JlcXVlc3QgJiYgaXRlbS5sb2FkaW5nICYmIGl0ZW0ubG9hZGluZygpICYmIHBhY2thZ2VUb1JlcXVlc3QuZmlsZSA9PT0gaXRlbS5maWxlKSB7XG5cdFx0XHRcdFx0cGFja2FnZVRvUmVxdWVzdC5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0XHRpdGVtLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0LlJlbG9hZCkge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRQYWNrYWdlc0xpc3QoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZGVsZXRlUGFja2FnZShwYWNrYWdlVG9EZWxldGUpIHtcblx0XHRpZiAocGFja2FnZVRvRGVsZXRlKSB7XG5cdFx0XHRwYWNrYWdlVG9EZWxldGUubG9hZGluZyh0cnVlKTtcblx0XHRcdFJlbW90ZS5wYWNrYWdlRGVsZXRlKHRoaXMucmVxdWVzdEhlbHBlcihwYWNrYWdlVG9EZWxldGUsIGZhbHNlKSwgcGFja2FnZVRvRGVsZXRlKTtcblx0XHR9XG5cdH1cblxuXHRpbnN0YWxsUGFja2FnZShwYWNrYWdlVG9JbnN0YWxsKSB7XG5cdFx0aWYgKHBhY2thZ2VUb0luc3RhbGwpIHtcblx0XHRcdHBhY2thZ2VUb0luc3RhbGwubG9hZGluZyh0cnVlKTtcblx0XHRcdFJlbW90ZS5wYWNrYWdlSW5zdGFsbCh0aGlzLnJlcXVlc3RIZWxwZXIocGFja2FnZVRvSW5zdGFsbCwgdHJ1ZSksIHBhY2thZ2VUb0luc3RhbGwpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBQYWNrYWdlc0FkbWluU2V0dGluZ3MsIFBhY2thZ2VzQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgYXBwU2V0dGluZ3NHZXQsIHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcbmltcG9ydCBDb3JlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NvcmUnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmNsYXNzIEFib3V0QWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudmVyc2lvbiA9IGtvLm9ic2VydmFibGUoYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSk7XG5cdFx0dGhpcy5hY2Nlc3MgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0NvcmVBY2Nlc3MnKSk7XG5cdFx0dGhpcy5lcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29yZVJlYWwgPSBDb3JlU3RvcmUuY29yZVJlYWw7XG5cdFx0dGhpcy5jb3JlQ2hhbm5lbCA9IENvcmVTdG9yZS5jb3JlQ2hhbm5lbDtcblx0XHR0aGlzLmNvcmVUeXBlID0gQ29yZVN0b3JlLmNvcmVUeXBlO1xuXHRcdHRoaXMuY29yZVVwZGF0YWJsZSA9IENvcmVTdG9yZS5jb3JlVXBkYXRhYmxlO1xuXHRcdHRoaXMuY29yZUFjY2VzcyA9IENvcmVTdG9yZS5jb3JlQWNjZXNzO1xuXHRcdHRoaXMuY29yZUNoZWNraW5nID0gQ29yZVN0b3JlLmNvcmVDaGVja2luZztcblx0XHR0aGlzLmNvcmVVcGRhdGluZyA9IENvcmVTdG9yZS5jb3JlVXBkYXRpbmc7XG5cdFx0dGhpcy5jb3JlV2FybmluZyA9IENvcmVTdG9yZS5jb3JlV2FybmluZztcblx0XHR0aGlzLmNvcmVWZXJzaW9uID0gQ29yZVN0b3JlLmNvcmVWZXJzaW9uO1xuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb24gPSBDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb247XG5cdFx0dGhpcy5jb3JlUmVtb3RlUmVsZWFzZSA9IENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSA9IENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmU7XG5cblx0XHR0aGlzLmNvbW11bml0eSA9IFJMX0NPTU1VTklUWSB8fCBBcHBTdG9yZS5jb21tdW5pdHkoKTtcblxuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb25IdG1sRGVzYyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gaTE4bignVEFCX0FCT1VUL0hUTUxfTkVXX1ZFUlNJT04nLCB7ICdWRVJTSU9OJzogdGhpcy5jb3JlUmVtb3RlVmVyc2lvbigpIH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zdGF0dXNUeXBlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0bGV0IHR5cGUgPSAnJztcblx0XHRcdGNvbnN0IHZlcnNpb25Ub0NvbXBhcmUgPSB0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSgpLFxuXHRcdFx0XHRpc0NoZWNraW5nID0gdGhpcy5jb3JlQ2hlY2tpbmcoKSxcblx0XHRcdFx0aXNVcGRhdGluZyA9IHRoaXMuY29yZVVwZGF0aW5nKCksXG5cdFx0XHRcdGlzUmVhbCA9IHRoaXMuY29yZVJlYWwoKTtcblxuXHRcdFx0aWYgKGlzQ2hlY2tpbmcpIHtcblx0XHRcdFx0dHlwZSA9ICdjaGVja2luZyc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzVXBkYXRpbmcpIHtcblx0XHRcdFx0dHlwZSA9ICd1cGRhdGluZyc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzUmVhbCAmJiAwID09PSB2ZXJzaW9uVG9Db21wYXJlKSB7XG5cdFx0XHRcdHR5cGUgPSAndXAtdG8tZGF0ZSc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzUmVhbCAmJiAtMSA9PT0gdmVyc2lvblRvQ29tcGFyZSkge1xuXHRcdFx0XHR0eXBlID0gJ2F2YWlsYWJsZSc7XG5cdFx0XHR9IGVsc2UgaWYgKCFpc1JlYWwpIHtcblx0XHRcdFx0dHlwZSA9ICdlcnJvcic7XG5cdFx0XHRcdHRoaXMuZXJyb3JEZXNjKCdDYW5ub3QgYWNjZXNzIHRoZSByZXBvc2l0b3J5IGF0IHRoZSBtb21lbnQuJyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0eXBlO1xuXHRcdH0pO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRpZiAodGhpcy5hY2Nlc3MoKSAmJiAhdGhpcy5jb21tdW5pdHkpIHtcblx0XHRcdGdldEFwcCgpLnJlbG9hZENvcmVEYXRhKCk7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlQ29yZURhdGEoKSB7XG5cdFx0aWYgKCF0aGlzLmNvcmVVcGRhdGluZygpICYmICF0aGlzLmNvbW11bml0eSkge1xuXHRcdFx0Z2V0QXBwKCkudXBkYXRlQ29yZURhdGEoKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJvdXRBZG1pblNldHRpbmdzLCBBYm91dEFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IGxlZnRQYW5lbERpc2FibGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyB2aWV3LCBWaWV3VHlwZSwgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudScsXG5cdHR5cGU6IFZpZXdUeXBlLkxlZnQsXG5cdHRlbXBsYXRlSUQ6ICdBZG1pbk1lbnUnXG59KVxuY2xhc3MgTWVudVNldHRpbmdzQWRtaW5WaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gez99IHNjcmVlblxuXHQgKi9cblx0Y29uc3RydWN0b3Ioc2NyZWVuKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubGVmdFBhbmVsRGlzYWJsZWQgPSBsZWZ0UGFuZWxEaXNhYmxlZDtcblxuXHRcdHRoaXMubWVudSA9IHNjcmVlbi5tZW51O1xuXHR9XG5cblx0bGluayhyb3V0ZSkge1xuXHRcdHJldHVybiAnIy8nICsgcm91dGU7XG5cdH1cblxuXHRvbkJ1aWxkKGRvbSkge1xuXHRcdGtleSgndXAsIGRvd24nLCBLZXlTdGF0ZS5TZXR0aW5ncywgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJCgnLmItYWRtaW4tbWVudSAuZS1pdGVtJywgZG9tKSkpO1xuXHR9XG59XG5cbmV4cG9ydCB7IE1lbnVTZXR0aW5nc0FkbWluVmlldywgTWVudVNldHRpbmdzQWRtaW5WaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IERvbWFpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Eb21haW4nO1xuaW1wb3J0IFBsdWdpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9QbHVnaW4nO1xuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgdmlldywgVmlld1R5cGUgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvUGFuZScsXG5cdHR5cGU6IFZpZXdUeXBlLlJpZ2h0LFxuXHR0ZW1wbGF0ZUlEOiAnQWRtaW5QYW5lJ1xufSlcbmNsYXNzIFBhbmVTZXR0aW5nc0FkbWluVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5hZG1pbkRvbWFpbiA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FkbWluRG9tYWluJykpO1xuXHRcdHRoaXMudmVyc2lvbiA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSk7XG5cblx0XHR0aGlzLmNhcGEgPSAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdQcmVtVHlwZScpO1xuXHRcdHRoaXMuY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZO1xuXG5cdFx0dGhpcy5hZG1pbk1hbkxvYWRpbmcgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdCcwMDAnICE9PVxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0RG9tYWluU3RvcmUuZG9tYWlucy5sb2FkaW5nKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcoKSA/ICcxJyA6ICcwJ1xuXHRcdFx0XHRdLmpvaW4oJycpXG5cdFx0KTtcblxuXHRcdHRoaXMuYWRtaW5NYW5Mb2FkaW5nVmlzaWJpbGl0eSA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoKCkgPT4gKHRoaXMuYWRtaW5NYW5Mb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpXG5cdFx0XHQuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAzMDAgfSk7XG5cdH1cblxuXHRsb2dvdXRDbGljaygpIHtcblx0XHRSZW1vdGUuYWRtaW5Mb2dvdXQoKCkgPT4ge1xuXHRcdFx0Z2V0QXBwKCkubG9naW5BbmRMb2dvdXRSZWxvYWQodHJ1ZSwgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGFuZVNldHRpbmdzQWRtaW5WaWV3LCBQYW5lU2V0dGluZ3NBZG1pblZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgQWJzdHJhY3RTY3JlZW4gfSBmcm9tICdLbm9pbi9BYnN0cmFjdFNjcmVlbic7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgTG9naW5BZG1pblZpZXcgfSBmcm9tICdWaWV3L0FkbWluL0xvZ2luJztcblxuY2xhc3MgTG9naW5BZG1pblNjcmVlbiBleHRlbmRzIEFic3RyYWN0U2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ2xvZ2luJywgW0xvZ2luQWRtaW5WaWV3XSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5TY3JlZW4sIExvZ2luQWRtaW5TY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBfIGZyb20gJ18nO1xuXG5pbXBvcnQgeyB0cmltLCB0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgJHdpbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHZpZXcsIGNvbW1hbmQsIFZpZXdUeXBlLCByb3V0ZU9mZiB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9BZG1pbi9Mb2dpbicsXG5cdHR5cGU6IFZpZXdUeXBlLkNlbnRlcixcblx0dGVtcGxhdGVJRDogJ0FkbWluTG9naW4nXG59KVxuY2xhc3MgTG9naW5BZG1pblZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5tb2JpbGVEZXZpY2UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGVEZXZpY2UnKTtcblxuXHRcdHRoaXMuaGlkZVN1Ym1pdEJ1dHRvbiA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2hpZGVTdWJtaXRCdXR0b24nKTtcblxuXHRcdHRoaXMubG9naW4gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubG9naW5FcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICdmYWxzZVRpbWVvdXQnOiA1MDAgfSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgJ2ZhbHNlVGltZW91dCc6IDUwMCB9KTtcblxuXHRcdHRoaXMubG9naW5Gb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mb3JtSGlkZGVuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZvcm1FcnJvciA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMubG9naW5FcnJvckFuaW1hdGlvbigpIHx8IHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbigpKTtcblxuXHRcdHRoaXMubG9naW4uc3Vic2NyaWJlKCgpID0+IHRoaXMubG9naW5FcnJvcihmYWxzZSkpO1xuXG5cdFx0dGhpcy5wYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYXNzd29yZEVycm9yKGZhbHNlKSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3Iuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLmxvZ2luRXJyb3JBbmltYXRpb24oISF2KSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkRXJyb3Iuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkRXJyb3JBbmltYXRpb24oISF2KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdHN1Ym1pdENvbW1hbmQoKSB7XG5cdFx0dHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKCk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IoJycgPT09IHRyaW0odGhpcy5sb2dpbigpKSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yKCcnID09PSB0cmltKHRoaXMucGFzc3dvcmQoKSkpO1xuXG5cdFx0aWYgKHRoaXMubG9naW5FcnJvcigpIHx8IHRoaXMucGFzc3dvcmRFcnJvcigpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KHRydWUpO1xuXHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXG5cdFx0UmVtb3RlLmFkbWluTG9naW4oXG5cdFx0XHQoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuYWN0aXZhdGUnKTtcblxuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiAnQWRtaW5Mb2dpbicgPT09IG9EYXRhLkFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLmxvZ2luQW5kTG9nb3V0UmVsb2FkKHRydWUpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAob0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24ob0RhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5sb2dpbigpLFxuXHRcdFx0dGhpcy5wYXNzd29yZCgpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRoaXMubG9naW5Gb2N1cyh0cnVlKTtcblx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmxvZ2luRm9jdXMoZmFsc2UpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHR0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UodHJ1ZSk7XG5cdH1cblxuXHRzdWJtaXRGb3JtKCkge1xuXHRcdHRoaXMuc3VibWl0Q29tbWFuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5WaWV3LCBMb2dpbkFkbWluVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgYm9vdHN0cmFwIGZyb20gJ2Jvb3RzdHJhcCc7XG5pbXBvcnQgQXBwIGZyb20gJ0FwcC9BZG1pbic7XG5cbmJvb3RzdHJhcChBcHApO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Eb21haW5BbGlhcycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNEb21haW5BbGlhcydcbn0pXG5jbGFzcyBEb21haW5BbGlhc1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5zYXZpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZ0Vycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hbGlhcyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5kb21haW5zID0gRG9tYWluU3RvcmUuZG9tYWluc1dpdGhvdXRBbGlhc2VzO1xuXG5cdFx0dGhpcy5kb21haW5zT3B0aW9ucyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLm1hcCh0aGlzLmRvbWFpbnMoKSwgKGl0ZW0pID0+ICh7IG9wdFZhbHVlOiBpdGVtLm5hbWUsIG9wdFRleHQ6IGl0ZW0ubmFtZSB9KSlcblx0XHQpO1xuXG5cdFx0dGhpcy5jYW5CZVNhdmVkID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMuc2F2aW5nKCkgJiYgJycgIT09IHRoaXMubmFtZSgpICYmICcnICE9PSB0aGlzLmFsaWFzKCkpO1xuXG5cdFx0dGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVTYXZlZCgpKVxuXHRjcmVhdGVDb21tYW5kKCkge1xuXHRcdHRoaXMuc2F2aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVEb21haW5BbGlhcyh0aGlzLm9uRG9tYWluQWxpYXNDcmVhdGVPclNhdmVSZXNwb25zZSwgdGhpcy5uYW1lKCksIHRoaXMuYWxpYXMoKSk7XG5cdH1cblxuXHRvbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UocmVzdWx0LCBkYXRhKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0aWYgKGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0XHRcdFx0dGhpcy5jbG9zZUNvbW1hbmQoKTtcblx0XHRcdH0gZWxzZSBpZiAoTm90aWZpY2F0aW9uLkRvbWFpbkFscmVhZHlFeGlzdHMgPT09IGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2aW5nRXJyb3IoaTE4bignRVJST1JTL0RPTUFJTl9BTFJFQURZX0VYSVNUUycpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvVU5LTk9XTl9FUlJPUicpKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5jbGVhckZvcm0oKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHRpZiAoJycgPT09IHRoaXMubmFtZSgpICYmICFiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR0aGlzLm5hbWUuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhckZvcm0oKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nRXJyb3IoJycpO1xuXG5cdFx0dGhpcy5uYW1lKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZChmYWxzZSk7XG5cblx0XHR0aGlzLmFsaWFzKCcnKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5BbGlhc1BvcHVwVmlldywgRG9tYWluQWxpYXNQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSwgTWFnaWNzLCBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGlzTm9uRW1wdHlBcnJheSwgZGVsZWdhdGVSdW4gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQsIGlzUG9wdXBWaXNpYmxlLCBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1BsdWdpbicsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNQbHVnaW4nXG59KVxuY2xhc3MgUGx1Z2luUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSwgdGhpcyk7XG5cblx0XHR0aGlzLnNhdmVFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5yZWFkbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29uZmlndXJlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmhhc1JlYWRtZSA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLnJlYWRtZSgpKTtcblx0XHR0aGlzLmhhc0NvbmZpZ3VyYXRpb24gPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5jb25maWd1cmVzKCkubGVuZ3RoKTtcblxuXHRcdHRoaXMucmVhZG1lUG9wb3ZlckNvbmYgPSB7XG5cdFx0XHQncGxhY2VtZW50JzogJ3JpZ2h0Jyxcblx0XHRcdCd0cmlnZ2VyJzogJ2hvdmVyJyxcblx0XHRcdCd0aXRsZSc6IGkxOG4oJ1BPUFVQU19QTFVHSU4vVE9PTFRJUF9BQk9VVF9USVRMRScpLFxuXHRcdFx0J2NvbnRhaW5lcic6ICdib2R5Jyxcblx0XHRcdCdodG1sJzogdHJ1ZSxcblx0XHRcdCdjb250ZW50JzogKCkgPT4gYDxwcmU+JHt0aGlzLnJlYWRtZSgpfTwvcHJlPmBcblx0XHR9O1xuXG5cdFx0dGhpcy5iRGlzYWJlQ2xvc2VPbkVzYyA9IHRydWU7XG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuQWxsO1xuXG5cdFx0dGhpcy50cnlUb0Nsb3NlUG9wdXAgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLnRyeVRvQ2xvc2VQb3B1cCwgdGhpcyksIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuaGFzQ29uZmlndXJhdGlvbigpKVxuXHRzYXZlQ29tbWFuZCgpIHtcblx0XHRjb25zdCBsaXN0ID0ge307XG5cdFx0bGlzdC5OYW1lID0gdGhpcy5uYW1lKCk7XG5cblx0XHRfLmVhY2godGhpcy5jb25maWd1cmVzKCksIChvSXRlbSkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gb0l0ZW0udmFsdWUoKTtcblx0XHRcdGlmIChmYWxzZSA9PT0gdmFsdWUgfHwgdHJ1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA/ICcxJyA6ICcwJztcblx0XHRcdH1cblx0XHRcdGxpc3RbJ18nICsgb0l0ZW0uTmFtZV0gPSB2YWx1ZTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZUVycm9yKCcnKTtcblx0XHRSZW1vdGUucGx1Z2luU2V0dGluZ3NVcGRhdGUodGhpcy5vblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UsIGxpc3QpO1xuXHR9XG5cblx0b25QbHVnaW5TZXR0aW5nc1VwZGF0ZVJlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2F2ZUVycm9yKCcnKTtcblx0XHRcdGlmIChkYXRhICYmIGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUVycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zYXZlRXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50U2F2ZVBsdWdpblNldHRpbmdzKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KG9QbHVnaW4pIHtcblx0XHR0aGlzLm5hbWUoKTtcblx0XHR0aGlzLnJlYWRtZSgpO1xuXHRcdHRoaXMuY29uZmlndXJlcyhbXSk7XG5cblx0XHRpZiAob1BsdWdpbikge1xuXHRcdFx0dGhpcy5uYW1lKG9QbHVnaW4uTmFtZSk7XG5cdFx0XHR0aGlzLnJlYWRtZShvUGx1Z2luLlJlYWRtZSk7XG5cblx0XHRcdGNvbnN0IGNvbmZpZyA9IG9QbHVnaW4uQ29uZmlnO1xuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjb25maWcpKSB7XG5cdFx0XHRcdHRoaXMuY29uZmlndXJlcyhcblx0XHRcdFx0XHRfLm1hcChjb25maWcsIChpdGVtKSA9PiAoe1xuXHRcdFx0XHRcdFx0J3ZhbHVlJzoga28ub2JzZXJ2YWJsZShpdGVtWzBdKSxcblx0XHRcdFx0XHRcdCdwbGFjZWhvbGRlcic6IGtvLm9ic2VydmFibGUoaXRlbVs2XSksXG5cdFx0XHRcdFx0XHQnTmFtZSc6IGl0ZW1bMV0sXG5cdFx0XHRcdFx0XHQnVHlwZSc6IGl0ZW1bMl0sXG5cdFx0XHRcdFx0XHQnTGFiZWwnOiBpdGVtWzNdLFxuXHRcdFx0XHRcdFx0J0RlZmF1bHQnOiBpdGVtWzRdLFxuXHRcdFx0XHRcdFx0J0Rlc2MnOiBpdGVtWzVdXG5cdFx0XHRcdFx0fSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dHJ5VG9DbG9zZVBvcHVwKCkge1xuXHRcdGNvbnN0IFBvcHVwc0Fza1ZpZXdNb2RlbCA9IHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQXNrJyk7XG5cdFx0aWYgKCFpc1BvcHVwVmlzaWJsZShQb3B1cHNBc2tWaWV3TW9kZWwpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAoUG9wdXBzQXNrVmlld01vZGVsLCBbXG5cdFx0XHRcdGkxOG4oJ1BPUFVQU19BU0svREVTQ19XQU5UX0NMT1NFX1RISVNfV0lORE9XJyksXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2NhbmNlbENvbW1hbmQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdF0pO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdHRoaXMudHJ5VG9DbG9zZVBvcHVwKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBQbHVnaW5Qb3B1cFZpZXcsIFBsdWdpblBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQnJhbmRpbmdBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jYXBhID0gQXBwU3RvcmUucHJlbTtcblxuXHRcdHRoaXMudGl0bGUgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdUaXRsZScpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9hZGluZ0Rlc2MgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2FkaW5nRGVzY3JpcHRpb24nKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmZhdmljb25VcmwgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdGYXZpY29uVXJsJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5sb2dpbkxvZ28gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2dpbkxvZ28nKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luQmFja2dyb3VuZCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luQmFja2dyb3VuZCcpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckxvZ28gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VyTG9nbycpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckxvZ29NZXNzYWdlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckxvZ29NZXNzYWdlJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VySWZyYW1lTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1VzZXJJZnJhbWVNZXNzYWdlJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VyTG9nb1RpdGxlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckxvZ29UaXRsZScpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9naW5EZXNjcmlwdGlvbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luRGVzY3JpcHRpb24nKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luQ3NzID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5Dc3MnKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLnVzZXJDc3MgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VyQ3NzJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy53ZWxjb21lUGFnZVVybCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1dlbGNvbWVQYWdlVXJsJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy53ZWxjb21lUGFnZURpc3BsYXkgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdXZWxjb21lUGFnZURpc3BsYXknKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLndlbGNvbWVQYWdlRGlzcGxheS5vcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0dHJhbnNsYXRvclRyaWdnZXIoKTtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdHsgb3B0VmFsdWU6ICdub25lJywgb3B0VGV4dDogaTE4bignVEFCX0JSQU5ESU5HL09QVElPTl9XRUxDT01FX1BBR0VfRElTUExBWV9OT05FJykgfSxcblx0XHRcdFx0eyBvcHRWYWx1ZTogJ29uY2UnLCBvcHRUZXh0OiBpMThuKCdUQUJfQlJBTkRJTkcvT1BUSU9OX1dFTENPTUVfUEFHRV9ESVNQTEFZX09OQ0UnKSB9LFxuXHRcdFx0XHR7IG9wdFZhbHVlOiAnYWx3YXlzJywgb3B0VGV4dDogaTE4bignVEFCX0JSQU5ESU5HL09QVElPTl9XRUxDT01FX1BBR0VfRElTUExBWV9BTFdBWVMnKSB9XG5cdFx0XHRdO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb21tdW5pdHkgPSBSTF9DT01NVU5JVFkgfHwgQXBwU3RvcmUuY29tbXVuaXR5KCk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnRpdGxlLnRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMiA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMubG9hZGluZ0Rlc2MudHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5mYXZpY29uVXJsLnRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLnRpdGxlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdUaXRsZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubG9hZGluZ0Rlc2Muc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0J0xvYWRpbmdEZXNjcmlwdGlvbic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmF2aWNvblVybC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjMsIHtcblx0XHRcdFx0XHQnRmF2aWNvblVybCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxufVxuXG5leHBvcnQgeyBCcmFuZGluZ0FkbWluU2V0dGluZ3MsIEJyYW5kaW5nQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iXSwic291cmNlUm9vdCI6IiJ9 diff --git a/rainloop/app/rainloop/v/1.13.0/static/js/app.js b/rainloop/app/rainloop/v/1.14.0/static/js/app.js similarity index 52% rename from rainloop/app/rainloop/v/1.13.0/static/js/app.js rename to rainloop/app/rainloop/v/1.14.0/static/js/app.js index 6c5d23284afd35c017c9b5dcae05d9288fbad9dd..c6ed5f8153de60fcf259d380c1d395308d09339c 100644 --- a/rainloop/app/rainloop/v/1.13.0/static/js/app.js +++ b/rainloop/app/rainloop/v/1.14.0/static/js/app.js @@ -82,7 +82,7 @@ /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 514); +/******/ return __webpack_require__(__webpack_require__.s = 517); /******/ }) /************************************************************************/ /******/ ([ @@ -661,37 +661,34 @@ var Notification = { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.date.to-string */ 75); -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 55); +/* harmony import */ var core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.reverse */ 339); +/* harmony import */ var core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.parse-int */ 144); -/* harmony import */ var core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 94); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.link */ 169); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 137); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var Opentip__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Opentip */ 207); -/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! pikaday */ 208); -/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(pikaday__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Enums */ 0); - +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.link */ 172); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 138); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! _ */ 3); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $ */ 8); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_11__); +/* harmony import */ var Opentip__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Opentip */ 210); +/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! pikaday */ 211); +/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(pikaday__WEBPACK_IMPORTED_MODULE_13__); +/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Enums */ 0); @@ -708,8 +705,8 @@ var Notification = { -var ko = window__WEBPACK_IMPORTED_MODULE_10___default.a.ko, - $win = $__WEBPACK_IMPORTED_MODULE_12___default()(window__WEBPACK_IMPORTED_MODULE_10___default.a), +var ko = window__WEBPACK_IMPORTED_MODULE_9___default.a.ko, + $win = $__WEBPACK_IMPORTED_MODULE_11___default()(window__WEBPACK_IMPORTED_MODULE_9___default.a), fDisposalTooltipHelper = function fDisposalTooltipHelper(element) { ko.utils.domNodeDisposal.addDisposeCallback(element, function () { if (element && element.__opentip) { @@ -720,13 +717,13 @@ var ko = window__WEBPACK_IMPORTED_MODULE_10___default.a.ko, ko.bindingHandlers.updateWidth = { init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), fValue = fValueAccessor(), fInit = function fInit() { fValue($el.width()); - window__WEBPACK_IMPORTED_MODULE_10___default.a.setTimeout(function () { + window__WEBPACK_IMPORTED_MODULE_9___default.a.setTimeout(function () { fValue($el.width()); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time500ms); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time500ms); }; $win.on('resize', fInit); @@ -741,7 +738,7 @@ ko.bindingHandlers.editor = { var editor = null; var fValue = fValueAccessor(), - HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 204).default, + HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 207).default, fUpdateEditorValue = function fUpdateEditorValue() { if (fValue && fValue.__editor) { fValue.__editor.setHtmlOrPlain(fValue()); @@ -767,26 +764,26 @@ ko.bindingHandlers.editor = { }; ko.bindingHandlers.json = { init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).text(window__WEBPACK_IMPORTED_MODULE_10___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(window__WEBPACK_IMPORTED_MODULE_9___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); }, update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).text(window__WEBPACK_IMPORTED_MODULE_10___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(window__WEBPACK_IMPORTED_MODULE_9___default.a.JSON.stringify(ko.unwrap(fValueAccessor()))); } }; ko.bindingHandlers.scrollerShadows = { init: function init(element) { var limit = 8, - $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), - cont = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '[data-scroller-shadows-content]')[0] || null, - fFunc = ___WEBPACK_IMPORTED_MODULE_11___default.a.throttle(function () { + $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), + cont = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '[data-scroller-shadows-content]')[0] || null, + fFunc = ___WEBPACK_IMPORTED_MODULE_10___default.a.throttle(function () { $el.toggleClass('scroller-shadow-top', limit < cont.scrollTop).toggleClass('scroller-shadow-bottom', cont.scrollTop + limit < cont.scrollHeight - cont.clientHeight); }, 100); if (cont) { - $__WEBPACK_IMPORTED_MODULE_12___default()(cont).on('scroll resize', fFunc); + $__WEBPACK_IMPORTED_MODULE_11___default()(cont).on('scroll resize', fFunc); $win.on('resize', fFunc); ko.utils.domNodeDisposal.addDisposeCallback(cont, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(cont).off(); + $__WEBPACK_IMPORTED_MODULE_11___default()(cont).off(); $win.off('resize', fFunc); }); } @@ -796,8 +793,8 @@ ko.bindingHandlers.pikaday = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext) { ko.bindingHandlers.textInput.init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext); - if (pikaday__WEBPACK_IMPORTED_MODULE_14___default.a) { - element.__pikaday = new pikaday__WEBPACK_IMPORTED_MODULE_14___default.a({ + if (pikaday__WEBPACK_IMPORTED_MODULE_13___default.a) { + element.__pikaday = new pikaday__WEBPACK_IMPORTED_MODULE_13___default.a({ field: element }); } @@ -805,7 +802,7 @@ ko.bindingHandlers.pikaday = { }; ko.bindingHandlers.visibleAnimated = { init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); $el.addClass('rl-animated-inited'); if (ko.unwrap(fValueAccessor())) { @@ -815,12 +812,12 @@ ko.bindingHandlers.visibleAnimated = { } }, update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); if (ko.unwrap(fValueAccessor())) { $el.addClass('rl-animated-hidden').show(); - ___WEBPACK_IMPORTED_MODULE_11___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () { $el.removeClass('rl-animated-hidden'); }, 10); } else { @@ -830,15 +827,15 @@ ko.bindingHandlers.visibleAnimated = { }; ko.bindingHandlers.tooltip = { init: function init(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), fValue = fValueAccessor(), isMobile = 'on' === ($el.data('tooltip-mobile') || 'off'), isI18N = 'on' === ($el.data('tooltip-i18n') || 'on'), Globals = __webpack_require__(/*! Common/Globals */ 6); if (!Globals.bMobileDevice || isMobile) { - var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_11___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); - element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"](element, { + var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); + element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"](element, { 'style': 'rainloopTip', 'element': element, 'tipJoint': $el.data('tooltip-join') || 'bottom' @@ -887,14 +884,14 @@ ko.bindingHandlers.tooltip = { } }, update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), fValue = fValueAccessor(), isMobile = 'on' === ($el.data('tooltip-mobile') || 'off'), isI18N = 'on' === ($el.data('tooltip-i18n') || 'on'), Globals = __webpack_require__(/*! Common/Globals */ 6); if ((!Globals.bMobileDevice || isMobile) && element.__opentip) { - var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_11___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); + var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue); if (sValue) { element.__opentip.setContent(isI18N ? __webpack_require__(/*! Common/Translator */ 9).i18n(sValue) : sValue); @@ -912,8 +909,8 @@ ko.bindingHandlers.tooltip = { }; ko.bindingHandlers.tooltipErrorTip = { init: function init(element) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); - element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"](element, { + var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); + element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"](element, { style: 'rainloopErrorTip', hideOn: 'mouseout click', element: element, @@ -922,7 +919,7 @@ ko.bindingHandlers.tooltipErrorTip = { element.__opentip.deactivate(); - $__WEBPACK_IMPORTED_MODULE_12___default()(window__WEBPACK_IMPORTED_MODULE_10___default.a.document).on('click', function () { + $__WEBPACK_IMPORTED_MODULE_11___default()(window__WEBPACK_IMPORTED_MODULE_9___default.a.document).on('click', function () { if (element && element.__opentip) { element.__opentip.hide(); } @@ -930,9 +927,9 @@ ko.bindingHandlers.tooltipErrorTip = { fDisposalTooltipHelper(element); }, update: function update(element, fValueAccessor) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), + var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), fValue = fValueAccessor(), - value = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_11___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue), + value = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue), openTips = element.__opentip; if (openTips) { @@ -941,7 +938,7 @@ ko.bindingHandlers.tooltipErrorTip = { openTips.deactivate(); openTips.setContent(''); } else { - ___WEBPACK_IMPORTED_MODULE_11___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () { if ($el.is(':visible')) { openTips.setContent(value); openTips.activate(); @@ -951,7 +948,7 @@ ko.bindingHandlers.tooltipErrorTip = { openTips.deactivate(); openTips.setContent(''); } - }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time100ms); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time100ms); } } } @@ -961,8 +958,8 @@ ko.bindingHandlers.registrateBootstrapDropdown = { var Globals = __webpack_require__(/*! Common/Globals */ 6); if (Globals && Globals.data.aBootstrapDropdowns) { - Globals.data.aBootstrapDropdowns.push($__WEBPACK_IMPORTED_MODULE_12___default()(element)); - $__WEBPACK_IMPORTED_MODULE_12___default()(element).click(function () { + Globals.data.aBootstrapDropdowns.push($__WEBPACK_IMPORTED_MODULE_11___default()(element)); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).click(function () { __webpack_require__(/*! Common/Utils */ 2).detectDropdownVisibility(); }); // ko.utils.domNodeDisposal.addDisposeCallback(element, () => { // }); @@ -972,13 +969,13 @@ ko.bindingHandlers.registrateBootstrapDropdown = { ko.bindingHandlers.openDropdownTrigger = { update: function update(element, fValueAccessor) { if (ko.unwrap(fValueAccessor())) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); if (!$el.hasClass('open')) { - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.dropdown-toggle').dropdown('toggle'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.dropdown-toggle').dropdown('toggle'); } - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.dropdown-toggle').focus(); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.dropdown-toggle').focus(); __webpack_require__(/*! Common/Utils */ 2).detectDropdownVisibility(); @@ -988,16 +985,16 @@ ko.bindingHandlers.openDropdownTrigger = { }; ko.bindingHandlers.dropdownCloser = { init: function init(element) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).closest('.dropdown').on('click', '.e-item', function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).dropdown('toggle'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).closest('.dropdown').on('click', '.e-item', function () { + $__WEBPACK_IMPORTED_MODULE_11___default()(element).dropdown('toggle'); }); } }; ko.bindingHandlers.popover = { init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).popover(ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).popover(ko.unwrap(fValueAccessor())); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).popover('destroy'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).popover('destroy'); }); } }; @@ -1007,13 +1004,13 @@ ko.bindingHandlers.csstext.init = ko.bindingHandlers.csstext.update = function ( if (element && element.styleSheet && 'undefined' !== typeof element.styleSheet.cssText) { element.styleSheet.cssText = ko.unwrap(fValueAccessor()); } else { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).text(ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.resizecrop = { init: function init(element) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).addClass('resizecrop').resizecrop({ + $__WEBPACK_IMPORTED_MODULE_11___default()(element).addClass('resizecrop').resizecrop({ 'width': '100', 'height': '100', 'wrapperCSS': { @@ -1023,7 +1020,7 @@ ko.bindingHandlers.resizecrop = { }, update: function update(element, fValueAccessor) { fValueAccessor()(); - $__WEBPACK_IMPORTED_MODULE_12___default()(element).resizecrop({ + $__WEBPACK_IMPORTED_MODULE_11___default()(element).resizecrop({ 'width': '100', 'height': '100' }); @@ -1031,7 +1028,7 @@ ko.bindingHandlers.resizecrop = { }; ko.bindingHandlers.onKeyDown = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).on('keydown.koOnKeyDown', function (event) { + $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keydown.koOnKeyDown', function (event) { if (event) { return fValueAccessor().call(viewModel, event); } @@ -1039,66 +1036,66 @@ ko.bindingHandlers.onKeyDown = { return true; }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('keydown.koOnKeyDown'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keydown.koOnKeyDown'); }); } }; ko.bindingHandlers.onEnter = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).on('keypress.koOnEnter', function (event) { - if (event && 13 === window__WEBPACK_IMPORTED_MODULE_10___default.a.parseInt(event.keyCode, 10)) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).trigger('change'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keypress.koOnEnter', function (event) { + if (event && 13 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_11___default()(element).trigger('change'); fValueAccessor().call(viewModel); } }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('keypress.koOnEnter'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keypress.koOnEnter'); }); } }; ko.bindingHandlers.onSpace = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).on('keyup.koOnSpace', function (event) { - if (event && 32 === window__WEBPACK_IMPORTED_MODULE_10___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keyup.koOnSpace', function (event) { + if (event && 32 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { fValueAccessor().call(viewModel, event); } }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('keyup.koOnSpace'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keyup.koOnSpace'); }); } }; ko.bindingHandlers.onTab = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).on('keydown.koOnTab', function (event) { - if (event && 9 === window__WEBPACK_IMPORTED_MODULE_10___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keydown.koOnTab', function (event) { + if (event && 9 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { return fValueAccessor().call(viewModel, !!event.shiftKey); } return true; }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('keydown.koOnTab'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keydown.koOnTab'); }); } }; ko.bindingHandlers.onEsc = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).on('keyup.koOnEsc', function (event) { - if (event && 27 === window__WEBPACK_IMPORTED_MODULE_10___default.a.parseInt(event.keyCode, 10)) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).trigger('change'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).on('keyup.koOnEsc', function (event) { + if (event && 27 === window__WEBPACK_IMPORTED_MODULE_9___default.a.parseInt(event.keyCode, 10)) { + $__WEBPACK_IMPORTED_MODULE_11___default()(element).trigger('change'); fValueAccessor().call(viewModel); } }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('keyup.koOnEsc'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('keyup.koOnEsc'); }); } }; ko.bindingHandlers.clickOnTrue = { update: function update(element, fValueAccessor) { if (ko.unwrap(fValueAccessor())) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).click(); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).click(); } } }; @@ -1109,7 +1106,7 @@ ko.bindingHandlers.modal = { var Globals = __webpack_require__(/*! Common/Globals */ 6), Utils = __webpack_require__(/*! Common/Utils */ 2); - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context = $__WEBPACK_IMPORTED_MODULE_12___default()(element).toggleClass('fade', !Globals.bMobileDevice).modal({ + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context = $__WEBPACK_IMPORTED_MODULE_11___default()(element).toggleClass('fade', !Globals.bMobileDevice).modal({ 'keyboard': false, 'show': ko.unwrap(fValueAccessor()) }).on('shown.koModal', Utils.windowResizeCallback)).call(_context, '.close').on('click.koModal', function () { @@ -1119,29 +1116,29 @@ ko.bindingHandlers.modal = { ko.utils.domNodeDisposal.addDisposeCallback(element, function () { var _context2; - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('shown.koModal')).call(_context2, '.close').off('click.koModal'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('shown.koModal')).call(_context2, '.close').off('click.koModal'); }); }, update: function update(element, fValueAccessor) { var Globals = __webpack_require__(/*! Common/Globals */ 6); - $__WEBPACK_IMPORTED_MODULE_12___default()(element).modal(ko.unwrap(fValueAccessor()) ? 'show' : 'hide'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).modal(ko.unwrap(fValueAccessor()) ? 'show' : 'hide'); if (Globals.$html.hasClass('rl-anim')) { Globals.$html.addClass('rl-modal-animation'); - ___WEBPACK_IMPORTED_MODULE_11___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () { Globals.$html.removeClass('rl-modal-animation'); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time500ms); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time500ms); } } }; ko.bindingHandlers.moment = { init: function init(element, fValueAccessor) { - __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_12___default()(element).addClass('moment').data('moment-time', ko.unwrap(fValueAccessor()))); + __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_11___default()(element).addClass('moment').data('moment-time', ko.unwrap(fValueAccessor()))); }, update: function update(element, fValueAccessor) { - __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_12___default()(element).data('moment-time', ko.unwrap(fValueAccessor()))); + __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_11___default()(element).data('moment-time', ko.unwrap(fValueAccessor()))); } }; ko.bindingHandlers.i18nInit = { @@ -1163,17 +1160,17 @@ ko.bindingHandlers.i18nUpdate = { }; ko.bindingHandlers.link = { update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).attr('href', ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).attr('href', ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.title = { update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).attr('title', ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).attr('title', ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.textF = { init: function init(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).text(ko.unwrap(fValueAccessor())); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).text(ko.unwrap(fValueAccessor())); } }; ko.bindingHandlers.initDom = { @@ -1184,9 +1181,9 @@ ko.bindingHandlers.initDom = { ko.bindingHandlers.initFixedTrigger = { init: function init(element, fValueAccessor) { var values = ko.unwrap(fValueAccessor()), - $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), + $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), top = values[1] || 0; - var $container = $__WEBPACK_IMPORTED_MODULE_12___default()(values[0] || null); + var $container = $__WEBPACK_IMPORTED_MODULE_11___default()(values[0] || null); $container = $container[0] ? $container : null; if ($container) { @@ -1203,7 +1200,7 @@ ko.bindingHandlers.initFixedTrigger = { ko.bindingHandlers.initResizeTrigger = { init: function init(element, fValueAccessor) { var values = ko.unwrap(fValueAccessor()); - $__WEBPACK_IMPORTED_MODULE_12___default()(element).css({ + $__WEBPACK_IMPORTED_MODULE_11___default()(element).css({ 'height': values[1], 'min-height': values[1] }); @@ -1215,7 +1212,7 @@ ko.bindingHandlers.initResizeTrigger = { var value = Utils.pInt(values[1]), size = 0, - offset = $__WEBPACK_IMPORTED_MODULE_12___default()(oElement).offset().top; + offset = $__WEBPACK_IMPORTED_MODULE_11___default()(oElement).offset().top; if (0 < offset) { offset += Utils.pInt(values[2]); @@ -1225,7 +1222,7 @@ ko.bindingHandlers.initResizeTrigger = { value = size; } - $__WEBPACK_IMPORTED_MODULE_12___default()(oElement).css({ + $__WEBPACK_IMPORTED_MODULE_11___default()(oElement).css({ 'height': value, 'min-height': value }); @@ -1234,7 +1231,7 @@ ko.bindingHandlers.initResizeTrigger = { }; ko.bindingHandlers.appendDom = { update: function update(element, fValueAccessor) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).hide().empty().append(ko.unwrap(fValueAccessor())).show(); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).hide().empty().append(ko.unwrap(fValueAccessor())).show(); } }; ko.bindingHandlers.draggable = { @@ -1263,12 +1260,12 @@ ko.bindingHandlers.draggable = { if (droppableSelector) { conf.drag = function (event) { - $__WEBPACK_IMPORTED_MODULE_12___default()(droppableSelector).each(function () { - var $this = $__WEBPACK_IMPORTED_MODULE_12___default()(this), + $__WEBPACK_IMPORTED_MODULE_11___default()(droppableSelector).each(function () { + var $this = $__WEBPACK_IMPORTED_MODULE_11___default()(this), // eslint-disable-line no-invalid-this offset = $this.offset(), bottomPos = offset.top + $this.height(); - window__WEBPACK_IMPORTED_MODULE_10___default.a.clearInterval($this.data('timerScroll')); + window__WEBPACK_IMPORTED_MODULE_9___default.a.clearInterval($this.data('timerScroll')); $this.data('timerScroll', false); if (event.pageX >= offset.left && event.pageX <= offset.left + $this.width()) { @@ -1278,7 +1275,7 @@ ko.bindingHandlers.draggable = { Utils.windowResize(); }; - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_10___default.a.setInterval(moveUp, 10)); + $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_9___default.a.setInterval(moveUp, 10)); moveUp(); } @@ -1288,7 +1285,7 @@ ko.bindingHandlers.draggable = { Utils.windowResize(); }; - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_10___default.a.setInterval(moveDown, 10)); + $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_9___default.a.setInterval(moveDown, 10)); moveDown(); } } @@ -1296,10 +1293,10 @@ ko.bindingHandlers.draggable = { }; conf.stop = function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(droppableSelector).each(function () { - var $this = $__WEBPACK_IMPORTED_MODULE_12___default()(this); // eslint-disable-line no-invalid-this + $__WEBPACK_IMPORTED_MODULE_11___default()(droppableSelector).each(function () { + var $this = $__WEBPACK_IMPORTED_MODULE_11___default()(this); // eslint-disable-line no-invalid-this - window__WEBPACK_IMPORTED_MODULE_10___default.a.clearInterval($this.data('timerScroll')); + window__WEBPACK_IMPORTED_MODULE_9___default.a.clearInterval($this.data('timerScroll')); $this.data('timerScroll', false); }); }; @@ -1309,11 +1306,11 @@ ko.bindingHandlers.draggable = { return fValueAccessor()(event && event.target ? ko.dataFor(event.target) : null); }; - $__WEBPACK_IMPORTED_MODULE_12___default()(element).draggable(conf).on('mousedown.koDraggable', function () { + $__WEBPACK_IMPORTED_MODULE_11___default()(element).draggable(conf).on('mousedown.koDraggable', function () { Utils.removeInFocus(); }); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).off('mousedown.koDraggable').draggable('destroy'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).off('mousedown.koDraggable').draggable('destroy'); }); } } @@ -1352,9 +1349,9 @@ ko.bindingHandlers.droppable = { }; } - $__WEBPACK_IMPORTED_MODULE_12___default()(element).droppable(conf); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).droppable(conf); ko.utils.domNodeDisposal.addDisposeCallback(element, function () { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).droppable('destroy'); + $__WEBPACK_IMPORTED_MODULE_11___default()(element).droppable('destroy'); }); } } @@ -1366,7 +1363,7 @@ ko.bindingHandlers.nano = { Settings = __webpack_require__(/*! Storage/Settings */ 5); if (!Globals.bDisableNanoScroll && !Settings.appSettingsGet('useNativeScrollbars')) { - $__WEBPACK_IMPORTED_MODULE_12___default()(element).addClass('nano').nanoScroller({ + $__WEBPACK_IMPORTED_MODULE_11___default()(element).addClass('nano').nanoScroller({ iOSNativeScrolling: false, preventPageScrolling: true }); @@ -1375,7 +1372,7 @@ ko.bindingHandlers.nano = { }; ko.bindingHandlers.saveTrigger = { init: function init(element) { - var $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); + var $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); $el.data('save-trigger-type', $el.is('input[type=text],input[type=email],input[type=password],select,textarea') ? 'input' : 'custom'); if ('custom' === $el.data('save-trigger-type')) { @@ -1388,27 +1385,27 @@ ko.bindingHandlers.saveTrigger = { var _context3, _context4, _context5, _context6; var value = ko.unwrap(fValueAccessor()), - $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element); + $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element); if ('custom' === $el.data('save-trigger-type')) { switch (value.toString()) { case '1': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.animated,.error').hide().removeClass('visible').end()).call(_context3, '.success').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.animated,.error').hide().removeClass('visible').end()).call(_context3, '.success').show().addClass('visible'); break; case '0': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.animated,.success').hide().removeClass('visible').end()).call(_context4, '.error').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.animated,.success').hide().removeClass('visible').end()).call(_context4, '.error').show().addClass('visible'); break; case '-2': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible'); break; default: - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_9___default()($el).call($el, '.animated').hide().end()).call(_context6, '.error,.success').removeClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()($el).call($el, '.animated').hide().end()).call(_context6, '.error,.success').removeClass('visible'); break; } @@ -1435,8 +1432,8 @@ ko.bindingHandlers.saveTrigger = { ko.bindingHandlers.emailsTags = { init: function init(element, fValueAccessor, fAllBindingsAccessor) { var Utils = __webpack_require__(/*! Common/Utils */ 2), - EmailModel = __webpack_require__(/*! Model/Email */ 81).default, - $el = $__WEBPACK_IMPORTED_MODULE_12___default()(element), + EmailModel = __webpack_require__(/*! Model/Email */ 80).default, + $el = $__WEBPACK_IMPORTED_MODULE_11___default()(element), fValue = fValueAccessor(), fAllBindings = fAllBindingsAccessor(), fAutoCompleteSource = fAllBindings.autoCompleteSource || null, @@ -1454,20 +1451,20 @@ ko.bindingHandlers.emailsTags = { inputDelimiters: inputDelimiters, autoCompleteSource: fAutoCompleteSource, splitHook: function splitHook(value) { - var v = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_8___default()(Utils).call(Utils, value); + var v = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7___default()(Utils).call(Utils, value); - if (v && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_7___default()(inputDelimiters).call(inputDelimiters, v.substr(-1))) { + if (v && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6___default()(inputDelimiters).call(inputDelimiters, v.substr(-1))) { return EmailModel.splitEmailLine(value); } return null; }, parseHook: function parseHook(input) { - return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_11___default.a).call(___WEBPACK_IMPORTED_MODULE_11___default.a, ___WEBPACK_IMPORTED_MODULE_11___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_11___default.a).call(___WEBPACK_IMPORTED_MODULE_11___default.a, input, function (inputValue) { + return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, ___WEBPACK_IMPORTED_MODULE_10___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, input, function (inputValue) { var values = EmailModel.parseEmailLine(inputValue); return values.length ? values : inputValue; })), function (item) { - return ___WEBPACK_IMPORTED_MODULE_11___default.a.isObject(item) ? [item.toLine(false), item] : [item, null]; + return ___WEBPACK_IMPORTED_MODULE_10___default.a.isObject(item) ? [item.toLine(false), item] : [item, null]; }); }, change: function change(event) { @@ -1483,7 +1480,7 @@ ko.bindingHandlers.emailsTags = { } }, update: function update(element, fValueAccessor) { - var $oEl = $__WEBPACK_IMPORTED_MODULE_12___default()(element), + var $oEl = $__WEBPACK_IMPORTED_MODULE_11___default()(element), fValue = fValueAccessor(), value = ko.unwrap(fValue); @@ -1496,7 +1493,7 @@ ko.bindingHandlers.emailsTags = { }; ko.bindingHandlers.command = { init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext) { - var jqElement = $__WEBPACK_IMPORTED_MODULE_12___default()(element), + var jqElement = $__WEBPACK_IMPORTED_MODULE_11___default()(element), command = fValueAccessor(); if (!command || !command.isCommand) { @@ -1510,7 +1507,7 @@ ko.bindingHandlers.command = { if (!command.canExecute) { var __realCanExecute = command.__realCanExecute; - if (___WEBPACK_IMPORTED_MODULE_11___default.a.isFunction(__realCanExecute)) { + if (___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(__realCanExecute)) { command.canExecute = ko.computed(function () { return command.enabled() && __realCanExecute.call(viewModel, viewModel); }); @@ -1525,7 +1522,7 @@ ko.bindingHandlers.command = { ko.bindingHandlers[jqElement.is('form') ? 'submit' : 'click'].init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext); }, update: function update(element, fValueAccessor) { - var jqElement = $__WEBPACK_IMPORTED_MODULE_12___default()(element), + var jqElement = $__WEBPACK_IMPORTED_MODULE_11___default()(element), command = fValueAccessor(); var result = command.enabled(); jqElement.toggleClass('command-not-enabled', !result); @@ -1548,7 +1545,7 @@ ko.extenders.trimmer = function (target) { result = ko.computed({ read: target, write: function write(newValue) { - target(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_8___default()(Utils).call(Utils, newValue.toString())); + target(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_7___default()(Utils).call(Utils, newValue.toString())); } }); @@ -1663,8 +1660,8 @@ ko.extenders.falseTimeout = function (target, option) { target.iFalseTimeoutTimeout = 0; target.subscribe(function (value) { if (value) { - window__WEBPACK_IMPORTED_MODULE_10___default.a.clearTimeout(target.iFalseTimeoutTimeout); - target.iFalseTimeoutTimeout = window__WEBPACK_IMPORTED_MODULE_10___default.a.setTimeout(function () { + window__WEBPACK_IMPORTED_MODULE_9___default.a.clearTimeout(target.iFalseTimeoutTimeout); + target.iFalseTimeoutTimeout = window__WEBPACK_IMPORTED_MODULE_9___default.a.setTimeout(function () { target(false); target.iFalseTimeoutTimeout = 0; }, __webpack_require__(/*! Common/Utils */ 2).pInt(option)); @@ -1688,8 +1685,8 @@ ko.extenders.specialThrottle = function (target, option) { target.valueForRead(bValue); } else { if (target.valueForRead()) { - window__WEBPACK_IMPORTED_MODULE_10___default.a.clearTimeout(target.iSpecialThrottleTimeout); - target.iSpecialThrottleTimeout = window__WEBPACK_IMPORTED_MODULE_10___default.a.setTimeout(function () { + window__WEBPACK_IMPORTED_MODULE_9___default.a.clearTimeout(target.iSpecialThrottleTimeout); + target.iSpecialThrottleTimeout = window__WEBPACK_IMPORTED_MODULE_9___default.a.setTimeout(function () { target.valueForRead(false); target.iSpecialThrottleTimeout = 0; }, target.iSpecialThrottleTimeoutValue); @@ -1705,7 +1702,7 @@ ko.extenders.specialThrottle = function (target, option) { }; ko.extenders.idleTrigger = function (target) { - target.trigger = ko.observable(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["SaveSettingsStep"].Idle); + target.trigger = ko.observable(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["SaveSettingsStep"].Idle); return target; }; // functions @@ -1757,7 +1754,7 @@ ko.observable.fn.validateFunc = function (fFunc) { this.hasFuncError = ko.observable(false); - if (___WEBPACK_IMPORTED_MODULE_11___default.a.isFunction(fFunc)) { + if (___WEBPACK_IMPORTED_MODULE_10___default.a.isFunction(fFunc)) { this.subscribe(function (value) { _this3.hasFuncError(!fFunc(value)); }); @@ -1856,62 +1853,56 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "domReady", function() { return domReady; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResize", function() { return windowResize; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResizeCallback", function() { return windowResizeCallback; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 76); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.date.to-string */ 75); -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.function.name */ 52); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 55); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.parse-int */ 144); -/* harmony import */ var core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 48); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 94); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.match */ 193); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.string.split */ 168); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.string.link */ 169); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 205); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 114); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 157); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/last-index-of */ 206); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_17__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_18__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 137); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_19__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_20__); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_21__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_22__); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Autolinker */ 209); -/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(Autolinker__WEBPACK_IMPORTED_MODULE_24__); -/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Globals */ 6); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Common/Mime */ 210); -/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Common/Jassl */ 107); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "jassl", function() { return Common_Jassl__WEBPACK_IMPORTED_MODULE_28__["a"]; }); - - +/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); +/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); +/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.match */ 196); +/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.split */ 171); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.link */ 172); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 208); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 113); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 159); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/last-index-of */ 209); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 138); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_18__); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! $ */ 8); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_19__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! _ */ 3); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_20__); +/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ko */ 1); +/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Autolinker */ 212); +/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(Autolinker__WEBPACK_IMPORTED_MODULE_22__); +/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Common/Globals */ 6); +/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Common/Enums */ 0); +/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Mime */ 213); +/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Jassl */ 106); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "jassl", function() { return Common_Jassl__WEBPACK_IMPORTED_MODULE_26__["a"]; }); @@ -1941,17 +1932,17 @@ __webpack_require__.r(__webpack_exports__); -var trim = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_19___default()($__WEBPACK_IMPORTED_MODULE_21___default.a); +var trim = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17___default()($__WEBPACK_IMPORTED_MODULE_19___default.a); -var inArray = $__WEBPACK_IMPORTED_MODULE_21___default.a.inArray; -var isArray = ___WEBPACK_IMPORTED_MODULE_22___default.a.isArray; -var isObject = ___WEBPACK_IMPORTED_MODULE_22___default.a.isObject; -var isFunc = ___WEBPACK_IMPORTED_MODULE_22___default.a.isFunction; -var isUnd = ___WEBPACK_IMPORTED_MODULE_22___default.a.isUndefined; -var isNull = ___WEBPACK_IMPORTED_MODULE_22___default.a.isNull; -var has = ___WEBPACK_IMPORTED_MODULE_22___default.a.has; +var inArray = $__WEBPACK_IMPORTED_MODULE_19___default.a.inArray; +var isArray = ___WEBPACK_IMPORTED_MODULE_20___default.a.isArray; +var isObject = ___WEBPACK_IMPORTED_MODULE_20___default.a.isObject; +var isFunc = ___WEBPACK_IMPORTED_MODULE_20___default.a.isFunction; +var isUnd = ___WEBPACK_IMPORTED_MODULE_20___default.a.isUndefined; +var isNull = ___WEBPACK_IMPORTED_MODULE_20___default.a.isNull; +var has = ___WEBPACK_IMPORTED_MODULE_20___default.a.has; -var bind = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_18___default()(___WEBPACK_IMPORTED_MODULE_22___default.a); +var bind = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16___default()(___WEBPACK_IMPORTED_MODULE_20___default.a); var noop = function noop() {}; // eslint-disable-line no-empty-function @@ -2007,8 +1998,8 @@ function pInt(value, defaultValur) { defaultValur = 0; } - var result = isNormal(value) && '' !== value ? window__WEBPACK_IMPORTED_MODULE_20___default.a.parseInt(value, 10) : defaultValur; - return window__WEBPACK_IMPORTED_MODULE_20___default.a.isNaN(result) ? defaultValur : result; + var result = isNormal(value) && '' !== value ? window__WEBPACK_IMPORTED_MODULE_18___default.a.parseInt(value, 10) : defaultValur; + return window__WEBPACK_IMPORTED_MODULE_18___default.a.isNaN(result) ? defaultValur : result; } /** * @param {*} value @@ -2048,7 +2039,7 @@ function isNonEmptyArray(values) { */ function encodeURIComponent(component) { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.encodeURIComponent(component); + return window__WEBPACK_IMPORTED_MODULE_18___default.a.encodeURIComponent(component); } /** * @param {string} component @@ -2056,7 +2047,7 @@ function encodeURIComponent(component) { */ function decodeURIComponent(component) { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.decodeURIComponent(component); + return window__WEBPACK_IMPORTED_MODULE_18___default.a.decodeURIComponent(component); } /** * @param {string} url @@ -2064,7 +2055,7 @@ function decodeURIComponent(component) { */ function decodeURI(url) { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.decodeURI(url); + return window__WEBPACK_IMPORTED_MODULE_18___default.a.decodeURI(url); } /** * @param {string} url @@ -2072,7 +2063,7 @@ function decodeURI(url) { */ function encodeURI(url) { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.encodeURI(url); + return window__WEBPACK_IMPORTED_MODULE_18___default.a.encodeURI(url); } /** * @param {string} queryString @@ -2109,7 +2100,7 @@ function fakeMd5(len) { var result = ''; while (result.length < len) { - result += line.substr(window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.round(window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.random() * lineLen), 1); + result += line.substr(window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.round(window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.random() * lineLen), 1); } return result; @@ -2120,7 +2111,7 @@ function fakeMd5(len) { */ function encodeHtml(text) { - return isNormal(text) ? ___WEBPACK_IMPORTED_MODULE_22___default.a.escape(text.toString()) : ''; + return isNormal(text) ? ___WEBPACK_IMPORTED_MODULE_20___default.a.escape(text.toString()) : ''; } /** * @param {string} text @@ -2141,8 +2132,8 @@ function splitPlainText(text, len) { while (result.length > len) { subText = result.substring(0, len); - spacePos = _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_17___default()(subText).call(subText, ' '); - newLinePos = _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_17___default()(subText).call(subText, '\n'); + spacePos = _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default()(subText).call(subText, ' '); + newLinePos = _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default()(subText).call(subText, '\n'); if (-1 !== newLinePos) { spacePos = newLinePos; @@ -2163,8 +2154,8 @@ var timeOutAction = function () { var timeOuts = {}; return function (action, fFunction, timeOut) { timeOuts[action] = isUnd(timeOuts[action]) ? 0 : timeOuts[action]; - window__WEBPACK_IMPORTED_MODULE_20___default.a.clearTimeout(timeOuts[action]); - timeOuts[action] = window__WEBPACK_IMPORTED_MODULE_20___default.a.setTimeout(fFunction, timeOut); + window__WEBPACK_IMPORTED_MODULE_18___default.a.clearTimeout(timeOuts[action]); + timeOuts[action] = window__WEBPACK_IMPORTED_MODULE_18___default.a.setTimeout(fFunction, timeOut); }; }(); @@ -2172,7 +2163,7 @@ var timeOutActionSecond = function () { var timeOuts = {}; return function (action, fFunction, timeOut) { if (!timeOuts[action]) { - timeOuts[action] = window__WEBPACK_IMPORTED_MODULE_20___default.a.setTimeout(function () { + timeOuts[action] = window__WEBPACK_IMPORTED_MODULE_18___default.a.setTimeout(function () { fFunction(); timeOuts[action] = 0; }, timeOut); @@ -2195,12 +2186,12 @@ function deModule(m) { function inFocus() { try { - if (window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement) { - if (isUnd(window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.__inFocusCache)) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.__inFocusCache = $__WEBPACK_IMPORTED_MODULE_21___default()(window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement).is('input,textarea,iframe,.cke_editable'); + if (window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement) { + if (isUnd(window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.__inFocusCache)) { + window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.__inFocusCache = $__WEBPACK_IMPORTED_MODULE_19___default()(window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement).is('input,textarea,iframe,.cke_editable'); } - return !!window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.__inFocusCache; + return !!window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.__inFocusCache; } } catch (e) {} // eslint-disable-line no-empty @@ -2213,14 +2204,14 @@ function inFocus() { */ function removeInFocus(force) { - if (window__WEBPACK_IMPORTED_MODULE_20___default.a.document && window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement && window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.blur) { + if (window__WEBPACK_IMPORTED_MODULE_18___default.a.document && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.blur) { try { - var activeEl = $__WEBPACK_IMPORTED_MODULE_21___default()(window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement); + var activeEl = $__WEBPACK_IMPORTED_MODULE_19___default()(window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement); if (activeEl && activeEl.is('input,textarea')) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.blur(); + window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.blur(); } else if (force) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.document.activeElement.blur(); + window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.blur(); } } catch (e) {} // eslint-disable-line no-empty @@ -2232,14 +2223,14 @@ function removeInFocus(force) { function removeSelection() { try { - if (window__WEBPACK_IMPORTED_MODULE_20___default.a && window__WEBPACK_IMPORTED_MODULE_20___default.a.getSelection) { - var sel = window__WEBPACK_IMPORTED_MODULE_20___default.a.getSelection(); + if (window__WEBPACK_IMPORTED_MODULE_18___default.a && window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection) { + var sel = window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection(); if (sel && sel.removeAllRanges) { sel.removeAllRanges(); } - } else if (window__WEBPACK_IMPORTED_MODULE_20___default.a.document && window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection.empty) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection.empty(); + } else if (window__WEBPACK_IMPORTED_MODULE_18___default.a.document && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.empty) { + window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.empty(); } } catch (e) {} // eslint-disable-line no-empty @@ -2260,7 +2251,7 @@ function replySubjectAdd(prefix, subject) { prefixIsRe = !fwd; if ('' !== subject) { - ___WEBPACK_IMPORTED_MODULE_22___default.a.each(subject.split(':'), function (part) { + ___WEBPACK_IMPORTED_MODULE_20___default.a.each(subject.split(':'), function (part) { var trimmedPart = trim(part); if (!drop && (/^(RE|FWD)$/i.test(trimmedPart) || /^(RE|FWD)[[(][\d]+[\])]$/i.test(trimmedPart))) { @@ -2293,7 +2284,7 @@ function replySubjectAdd(prefix, subject) { */ function roundNumber(num, dec) { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.round(num * window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.pow(10, dec)) / window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.pow(10, dec); + return window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.round(num * window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.pow(10, dec)) / window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.pow(10, dec); } /** * @param {(number|string)} sizeInBytes @@ -2322,8 +2313,8 @@ function friendlySize(sizeInBytes) { */ function log(desc) { - if (window__WEBPACK_IMPORTED_MODULE_20___default.a.console && window__WEBPACK_IMPORTED_MODULE_20___default.a.console.log) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.console.log(desc); + if (window__WEBPACK_IMPORTED_MODULE_18___default.a.console && window__WEBPACK_IMPORTED_MODULE_18___default.a.console.log) { + window__WEBPACK_IMPORTED_MODULE_18___default.a.console.log(desc); } } /** @@ -2345,7 +2336,7 @@ function delegateRun(object, methodName, params, delay) { if (0 >= delay) { object[methodName].apply(object, params); } else { - ___WEBPACK_IMPORTED_MODULE_22___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_20___default.a.delay(function () { object[methodName].apply(object, params); }, delay); } @@ -2356,25 +2347,25 @@ function delegateRun(object, methodName, params, delay) { */ function killCtrlACtrlS(event) { - event = event || window__WEBPACK_IMPORTED_MODULE_20___default.a.event; + event = event || window__WEBPACK_IMPORTED_MODULE_18___default.a.event; if (event && event.ctrlKey && !event.shiftKey && !event.altKey) { var key = event.keyCode || event.which; - if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_26__["EventKeyCode"].S) { + if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_24__["EventKeyCode"].S) { event.preventDefault(); return; - } else if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_26__["EventKeyCode"].A) { + } else if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_24__["EventKeyCode"].A) { var sender = event.target || event.srcElement; if (sender && ('true' === '' + sender.contentEditable || sender.tagName && sender.tagName.match(/INPUT|TEXTAREA/i))) { return; } - if (window__WEBPACK_IMPORTED_MODULE_20___default.a.getSelection) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.getSelection().removeAllRanges(); - } else if (window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection.clear) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.document.selection.clear(); + if (window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection) { + window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection().removeAllRanges(); + } else if (window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.clear) { + window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.clear(); } event.preventDefault(); @@ -2408,15 +2399,15 @@ function createCommandLegacy(context, fExecute, fCanExecute) { }; fResult = fExecute ? fNonEmpty : noop; - fResult.enabled = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(true); + fResult.enabled = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(true); fResult.isCommand = true; if (isFunc(fCanExecute)) { - fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { return fResult && fResult.enabled() && fCanExecute.call(context); }); } else { - fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { return fResult && fResult.enabled() && !!fCanExecute; }); } @@ -2428,7 +2419,7 @@ function createCommandLegacy(context, fExecute, fCanExecute) { * @returns {string} */ -var convertThemeName = ___WEBPACK_IMPORTED_MODULE_22___default.a.memoize(function (theme) { +var convertThemeName = ___WEBPACK_IMPORTED_MODULE_20___default.a.memoize(function (theme) { if ('@custom' === theme.substr(-7)) { theme = trim(theme.substring(0, theme.length - 7)); } @@ -2448,14 +2439,14 @@ function quoteName(name) { */ function microtime() { - return new window__WEBPACK_IMPORTED_MODULE_20___default.a.Date().getTime(); + return new window__WEBPACK_IMPORTED_MODULE_18___default.a.Date().getTime(); } /** * @returns {number} */ function timestamp() { - return window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.round(microtime() / 1000); + return window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.round(microtime() / 1000); } /** * @@ -2476,7 +2467,7 @@ function convertLangName(language, isEng) { */ function draggablePlace() { - return $__WEBPACK_IMPORTED_MODULE_21___default()('
]*><\/p>/gi, '').replace(/
]*>([\s\S\r\n\t]*)<\/pre>/gim, convertPre).replace(/[\s]+/gm, ' ').replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gim, fixAttibuteValue).replace(/
]*>/gim, '\n').replace(/<\/h[\d]>/gi, '\n').replace(/<\/p>/gi, '\n\n').replace(/
]*>/gim, '\n__bq__start__\n').replace(/<\/blockquote>/gim, '\n__bq__end__\n').replace(/]*>([\s\S\r\n]*?)<\/a>/gim, convertLinks).replace(/<\/div>/gi, '\n').replace(/ /gi, ' ').replace(/"/gi, '"').replace(/<[^>]*>/gm, ''); - text = Common_Globals__WEBPACK_IMPORTED_MODULE_25__["$div"].html(text).text(); + text = Common_Globals__WEBPACK_IMPORTED_MODULE_23__["$div"].html(text).text(); text = text.replace(/\n[ \t]+/gm, '\n').replace(/[\n]{3,}/gm, '\n\n').replace(/>/gi, '>').replace(/</gi, '<').replace(/&/gi, '&'); text = splitPlainText(text); pos = 0; @@ -2713,11 +2704,11 @@ function htmlToPlain(html) { while (0 < limit) { limit -= 1; - iP1 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15___default()(text).call(text, '__bq__start__', pos); + iP1 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(text).call(text, '__bq__start__', pos); if (-1 < iP1) { - iP2 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15___default()(text).call(text, '__bq__start__', iP1 + 5); - iP3 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_15___default()(text).call(text, '__bq__end__', iP1 + 5); + iP2 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(text).call(text, '__bq__start__', iP1 + 5); + iP3 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(text).call(text, '__bq__end__', iP1 + 5); if ((-1 === iP2 || iP3 < iP2) && iP1 < iP3) { text = text.substring(0, iP1) + convertBlockquote(text.substring(iP1 + 13, iP3)) + text.substring(iP3 + 11); @@ -2800,9 +2791,9 @@ function plainToHtml(plain, findEmailAndLinksInText) { .replace(/&/g, '&').replace(/>/g, '>').replace(/').replace(/[\s]*~~~\/blockquote~~~/g, '').replace(/\n/g, '
' + resultHtml + ''; } - Common_Globals__WEBPACK_IMPORTED_MODULE_18__["$div"].empty(); + Common_Globals__WEBPACK_IMPORTED_MODULE_17__["$div"].empty(); message.isPgpSigned(pgpSigned); message.isPgpEncrypted(isPgpEncrypted); } else { @@ -5591,10 +5574,10 @@ function () { resultHtml = '
' + resultHtml + ''; } - Common_Globals__WEBPACK_IMPORTED_MODULE_18__["data"].iMessageBodyCacheCount += 1; - body = $__WEBPACK_IMPORTED_MODULE_13___default()('').hide().addClass('rl-cache-class'); - body.data('rl-cache-count', Common_Globals__WEBPACK_IMPORTED_MODULE_18__["data"].iMessageBodyCacheCount); - body.html(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["findEmailAndLinks"])(resultHtml)).addClass('b-text-part ' + (isHtml ? 'html' : 'plain')); + Common_Globals__WEBPACK_IMPORTED_MODULE_17__["data"].iMessageBodyCacheCount += 1; + body = $__WEBPACK_IMPORTED_MODULE_12___default()('').hide().addClass('rl-cache-class'); + body.data('rl-cache-count', Common_Globals__WEBPACK_IMPORTED_MODULE_17__["data"].iMessageBodyCacheCount); + body.html(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["findEmailAndLinks"])(resultHtml)).addClass('b-text-part ' + (isHtml ? 'html' : 'plain')); message.isHtml(!!isHtml); message.hasImages(!!data.Result.HasExternals); message.body = body; @@ -5609,7 +5592,7 @@ function () { message.showInternalImages(true); } - if (message.hasImages() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].showImages()) { + if (message.hasImages() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].showImages()) { message.showExternalImages(true); } @@ -5618,8 +5601,8 @@ function () { message.body = textBody; if (message.body) { - Common_Globals__WEBPACK_IMPORTED_MODULE_18__["data"].iMessageBodyCacheCount += 1; - message.body.data('rl-cache-count', Common_Globals__WEBPACK_IMPORTED_MODULE_18__["data"].iMessageBodyCacheCount); + Common_Globals__WEBPACK_IMPORTED_MODULE_17__["data"].iMessageBodyCacheCount += 1; + message.body.data('rl-cache-count', Common_Globals__WEBPACK_IMPORTED_MODULE_17__["data"].iMessageBodyCacheCount); message.fetchDataFromDom(); } } @@ -5635,10 +5618,10 @@ function () { message.body.show(); } - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_16__[/* initMessageFlagsFromCache */ "n"])(message); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* initMessageFlagsFromCache */ "n"])(message); if (message.unseen() || message.hasUnseenSubMessage()) { - Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().messageListAction(message.folderFullNameRaw, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessageSetAction"].SetSeen, [message]); + Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__[/* getApp */ "a"])().messageListAction(message.folderFullNameRaw, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["MessageSetAction"].SetSeen, [message]); } if (isNew) { @@ -5651,7 +5634,7 @@ function () { this.selectorMessageFocused(null); } } else if (!selectedMessage && message) { - selectedMessage = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_11___default.a).call(___WEBPACK_IMPORTED_MODULE_11___default.a, this.messageList(), function (subMessage) { + selectedMessage = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, this.messageList(), function (subMessage) { return subMessage && subMessage.folderFullNameRaw === message.folderFullNameRaw && subMessage.uid === message.uid; }); @@ -5662,7 +5645,7 @@ function () { } } - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["windowResize"])(); + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResize"])(); } } }; @@ -5689,7 +5672,7 @@ function () { _proto.populateMessageBody = function populateMessageBody(oMessage) { if (oMessage) { - if (Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].message(this.onMessageResponse, oMessage.folderFullNameRaw, oMessage.uid)) { + if (Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].message(this.onMessageResponse, oMessage.folderFullNameRaw, oMessage.uid)) { this.messageCurrentLoading(true); } } @@ -5705,14 +5688,14 @@ function () { this.hideMessageBodies(); this.messageCurrentLoading(false); - if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === sResult && oData && oData.Result) { + if (Common_Enums__WEBPACK_IMPORTED_MODULE_13__["StorageResultType"].Success === sResult && oData && oData.Result) { this.setMessage(oData, bCached); - } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Unload === sResult) { + } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_13__["StorageResultType"].Unload === sResult) { this.message(null); this.messageError(''); - } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Abort !== sResult) { + } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_13__["StorageResultType"].Abort !== sResult) { this.message(null); - this.messageError(oData && oData.ErrorCode ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_20__["getNotification"])(oData.ErrorCode) : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_20__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Notification"].UnknownError)); + this.messageError(oData && oData.ErrorCode ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_19__["getNotification"])(oData.ErrorCode) : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_19__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Notification"].UnknownError)); } } /** @@ -5722,31 +5705,31 @@ function () { ; _proto.calculateMessageListHash = function calculateMessageListHash(list) { - return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_11___default.a).call(___WEBPACK_IMPORTED_MODULE_11___default.a, list, function (message) { + return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, list, function (message) { return '' + message.hash + '_' + message.threadsLen() + '_' + message.flagHash(); }).join('|'); }; _proto.setMessageList = function setMessageList(data, cached) { - if (data && data.Result && 'Collection/MessageCollection' === data.Result['@Object'] && data.Result['@Collection'] && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["isArray"])(data.Result['@Collection'])) { + if (data && data.Result && 'Collection/MessageCollection' === data.Result['@Object'] && data.Result['@Collection'] && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isArray"])(data.Result['@Collection'])) { var newCount = 0, unreadCountChange = false; var list = [], - utc = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_21__["momentNowUnix"])(), - iCount = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["pInt"])(data.Result.MessageResultCount), - iOffset = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["pInt"])(data.Result.Offset); - var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_16__[/* getFolderFromCacheList */ "e"])(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["isNormal"])(data.Result.Folder) ? data.Result.Folder : ''); + utc = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_20__["momentNowUnix"])(), + iCount = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pInt"])(data.Result.MessageResultCount), + iOffset = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pInt"])(data.Result.Offset); + var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* getFolderFromCacheList */ "e"])(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.Folder) ? data.Result.Folder : ''); if (folder && !cached) { folder.interval = utc; - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_16__[/* setFolderHash */ "q"])(data.Result.Folder, data.Result.FolderHash); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* setFolderHash */ "q"])(data.Result.Folder, data.Result.FolderHash); - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["isNormal"])(data.Result.MessageCount)) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.MessageCount)) { folder.messageCountAll(data.Result.MessageCount); } - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["isNormal"])(data.Result.MessageUnseenCount)) { - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["pInt"])(folder.messageCountUnread()) !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["pInt"])(data.Result.MessageUnseenCount)) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.MessageUnseenCount)) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pInt"])(folder.messageCountUnread()) !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pInt"])(data.Result.MessageUnseenCount)) { unreadCountChange = true; } @@ -5757,15 +5740,15 @@ function () { } if (unreadCountChange && folder) { - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_16__[/* clearMessageFlagsFromCacheByFolder */ "c"])(folder.fullNameRaw); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* clearMessageFlagsFromCacheByFolder */ "c"])(folder.fullNameRaw); } - ___WEBPACK_IMPORTED_MODULE_11___default.a.each(data.Result['@Collection'], function (jsonMessage) { + ___WEBPACK_IMPORTED_MODULE_10___default.a.each(data.Result['@Collection'], function (jsonMessage) { if (jsonMessage && 'Object/Message' === jsonMessage['@Object']) { - var message = Model_Message__WEBPACK_IMPORTED_MODULE_23__[/* MessageModel */ "a"].newInstanceFromJson(jsonMessage); + var message = Model_Message__WEBPACK_IMPORTED_MODULE_22__[/* MessageModel */ "a"].newInstanceFromJson(jsonMessage); if (message) { - if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_16__[/* hasNewMessageAndRemoveFromCache */ "l"])(message.folderFullNameRaw, message.uid) && 5 >= newCount) { + if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* hasNewMessageAndRemoveFromCache */ "l"])(message.folderFullNameRaw, message.uid) && 5 >= newCount) { newCount += 1; message.newForAnimation(true); } @@ -5773,9 +5756,9 @@ function () { message.deleted(false); if (cached) { - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_16__[/* initMessageFlagsFromCache */ "n"])(message); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* initMessageFlagsFromCache */ "n"])(message); } else { - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_16__[/* storeMessageFlagsToCache */ "u"])(message); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* storeMessageFlagsToCache */ "u"])(message); } list.push(message); @@ -5784,25 +5767,25 @@ function () { }); this.messageListCount(iCount); - this.messageListSearch(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["isNormal"])(data.Result.Search) ? data.Result.Search : ''); - this.messageListPage(window__WEBPACK_IMPORTED_MODULE_10___default.a.Math.ceil(iOffset / Stores_User_Settings__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].messagesPerPage() + 1)); - this.messageListThreadUid(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["isNormal"])(data.Result.ThreadUid) ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["pString"])(data.Result.ThreadUid) : ''); - this.messageListEndFolder(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_15__["isNormal"])(data.Result.Folder) ? data.Result.Folder : ''); + this.messageListSearch(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.Search) ? data.Result.Search : ''); + this.messageListPage(window__WEBPACK_IMPORTED_MODULE_9___default.a.Math.ceil(iOffset / Stores_User_Settings__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messagesPerPage() + 1)); + this.messageListThreadUid(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.ThreadUid) ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pString"])(data.Result.ThreadUid) : ''); + this.messageListEndFolder(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.Folder) ? data.Result.Folder : ''); this.messageListEndSearch(this.messageListSearch()); this.messageListEndThreadUid(this.messageListThreadUid()); this.messageListEndPage(this.messageListPage()); this.messageListDisableAutoSelect(true); this.messageList(list); this.messageListIsNotCompleted(false); - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_16__[/* clearNewMessageCache */ "d"])(); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* clearNewMessageCache */ "d"])(); - if (folder && (cached || unreadCountChange || Stores_User_Settings__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].useThreads())) { - Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().folderInformation(folder.fullNameRaw, list); + if (folder && (cached || unreadCountChange || Stores_User_Settings__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].useThreads())) { + Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__[/* getApp */ "a"])().folderInformation(folder.fullNameRaw, list); } } else { this.messageListCount(0); this.messageList([]); - this.messageListError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_20__["getNotification"])(data && data.ErrorCode ? data.ErrorCode : Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Notification"].CantGetMessageList)); + this.messageListError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_19__["getNotification"])(data && data.ErrorCode ? data.ErrorCode : Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Notification"].CantGetMessageList)); } }; @@ -6215,7 +6198,7 @@ function storeMessageFlagsToCacheBySetAction(folder, uid, setAction) { /* unused harmony export about */ /* unused harmony export admin */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return mailBox; }); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 48); +/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); @@ -6658,26 +6641,25 @@ function mailBox(folder, page, search, threadUid) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 76); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/inheritsLoose */ 10); -/* harmony import */ var _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Consts */ 25); /* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Cache */ 14); /* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Links */ 15); -/* harmony import */ var Common_Base64__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Base64 */ 389); +/* harmony import */ var Common_Base64__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Base64 */ 392); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Storage/Settings */ 5); /* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/User/App */ 31); -/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/Settings */ 37); +/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/Settings */ 38); /* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Helper/Apps/User */ 22); -/* harmony import */ var Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Remote/AbstractAjax */ 256); +/* harmony import */ var Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Remote/AbstractAjax */ 263); @@ -6697,7 +6679,7 @@ function mailBox(folder, page, search, threadUid) { var RemoteUserAjax = /*#__PURE__*/ function (_AbstractAjaxRemote) { - _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_3___default()(RemoteUserAjax, _AbstractAjaxRemote); + Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(RemoteUserAjax, _AbstractAjaxRemote); function RemoteUserAjax() { var _this; @@ -7593,18 +7575,21 @@ function (_AbstractAjaxRemote) { /***/ }), /* 17 */ -/*!***********************************************************************!*\ - !*** ./node_modules/@babel/runtime-corejs3/helpers/defineProperty.js ***! - \***********************************************************************/ -/*! no static exports found */ +/*!***************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js ***! + \***************************************************************************/ +/*! exports provided: default */ /*! exports used: default */ -/***/ (function(module, exports, __webpack_require__) { +/***/ (function(module, __webpack_exports__, __webpack_require__) { -var _Object$defineProperty = __webpack_require__(/*! ../core-js/object/define-property */ 251); +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _defineProperty; }); +/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 160); +/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); function _defineProperty(obj, key, value) { if (key in obj) { - _Object$defineProperty(obj, key, { + _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default()(obj, key, { value: value, enumerable: true, configurable: true, @@ -7617,8 +7602,6 @@ function _defineProperty(obj, key, value) { return obj; } -module.exports = _defineProperty; - /***/ }), /* 18 */ /*!****************************************************************************!*\ @@ -7628,7 +7611,7 @@ module.exports = _defineProperty; /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 330); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 340); /***/ }), /* 19 */ @@ -7639,35 +7622,43 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 330 /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-descriptor */ 355); +module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-descriptor */ 363); /***/ }), /* 20 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/@babel/runtime-corejs3/helpers/applyDecoratedDescriptor.js ***! - \*********************************************************************************/ -/*! no static exports found */ +/*!*************************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor.js ***! + \*************************************************************************************/ +/*! exports provided: default */ /*! exports used: default */ -/***/ (function(module, exports, __webpack_require__) { +/***/ (function(module, __webpack_exports__, __webpack_require__) { -var _Object$defineProperty = __webpack_require__(/*! ../core-js/object/define-property */ 251); +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _applyDecoratedDescriptor; }); +/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 160); +/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/instance/slice */ 258); +/* harmony import */ var _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core-js/instance/reverse */ 259); +/* harmony import */ var _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core-js/instance/reduce */ 260); +/* harmony import */ var _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core-js/object/keys */ 261); +/* harmony import */ var _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../core-js/instance/for-each */ 262); +/* harmony import */ var _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5__); -var _sliceInstanceProperty = __webpack_require__(/*! ../core-js/instance/slice */ 358); -var _reverseInstanceProperty = __webpack_require__(/*! ../core-js/instance/reverse */ 363); -var _reduceInstanceProperty = __webpack_require__(/*! ../core-js/instance/reduce */ 368); -var _Object$keys = __webpack_require__(/*! ../core-js/object/keys */ 370); -var _forEachInstanceProperty = __webpack_require__(/*! ../core-js/instance/for-each */ 374); function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var _context, _context2, _context3; var desc = {}; - _forEachInstanceProperty(_context = _Object$keys(descriptor)).call(_context, function (key) { + _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default()(_context = _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4___default()(descriptor)).call(_context, function (key) { desc[key] = descriptor[key]; }); @@ -7678,7 +7669,7 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, con desc.writable = true; } - desc = _reduceInstanceProperty(_context2 = _reverseInstanceProperty(_context3 = _sliceInstanceProperty(decorators).call(decorators)).call(_context3)).call(_context2, function (desc, decorator) { + desc = _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3___default()(_context2 = _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2___default()(_context3 = _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1___default()(decorators).call(decorators)).call(_context3)).call(_context2, function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); @@ -7688,7 +7679,7 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, con } if (desc.initializer === void 0) { - _Object$defineProperty(target, property, desc); + _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default()(target, property, desc); desc = null; } @@ -7696,8 +7687,6 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, con return desc; } -module.exports = _applyDecoratedDescriptor; - /***/ }), /* 21 */ /*!*****************************!*\ @@ -7724,7 +7713,7 @@ module.exports = window.key; * @returns {AppUser} */ function getApp() { - return __webpack_require__(/*! App/User */ 386).default; + return __webpack_require__(/*! App/User */ 389).default; } /***/ }), @@ -7743,7 +7732,7 @@ function getApp() { /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Plugins */ 38); +/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Plugins */ 39); @@ -7853,10 +7842,35 @@ var DATA_IMAGE_LAZY_PLACEHOLDER_PIC = 'data:image/png;base64,iVBORw0KGgoAAAANSUh /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/bind */ 319); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/bind */ 328); /***/ }), /* 27 */ +/*!**************************************************!*\ + !*** ./node_modules/core-js/internals/global.js ***! + \**************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { + return it && it.Math == Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line no-undef + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + // eslint-disable-next-line no-new-func + Function('return this')(); + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 123))) + +/***/ }), +/* 28 */ /*!***************************************!*\ !*** ./dev/Knoin/AbstractViewNext.js ***! \***************************************/ @@ -7866,8 +7880,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/bind */ 31 "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractViewNext; }); -/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ 17); -/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0); @@ -7881,23 +7894,23 @@ var AbstractViewNext = /*#__PURE__*/ function () { function AbstractViewNext() { - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "bDisabeCloseOnEsc", false); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "bDisabeCloseOnEsc", false); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "sDefaultKeyScope", Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].None); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "sDefaultKeyScope", Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].None); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "sCurrentKeyScope", Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].None); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "sCurrentKeyScope", Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].None); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "viewModelVisibility", ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false)); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "viewModelVisibility", ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false)); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "modalVisibility", ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false).extend({ + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "modalVisibility", ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false).extend({ rateLimit: 0 })); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "viewModelName", ''); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "viewModelName", ''); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "viewModelNames", []); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "viewModelNames", []); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "viewModelDom", null); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "viewModelDom", null); } var _proto = AbstractViewNext.prototype; @@ -7948,32 +7961,6 @@ function () { return AbstractViewNext; }(); -/***/ }), -/* 28 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/global.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {var O = 'object'; -var check = function (it) { - return it && it.Math == Math && it; -}; - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -module.exports = - // eslint-disable-next-line no-undef - check(typeof globalThis == O && globalThis) || - check(typeof window == O && window) || - check(typeof self == O && self) || - check(typeof global == O && global) || - // eslint-disable-next-line no-new-func - Function('return this')(); - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) - /***/ }), /* 29 */ /*!******************************!*\ @@ -8017,12 +8004,12 @@ function () { }); this.google.capa = {}; this.google.capa.auth = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false); - this.google.capa.authFast = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false); + this.google.capa.authGmail = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false); this.google.capa.drive = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false); this.google.capa.preview = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false); this.google.require = {}; this.google.require.clientSettings = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () { - return _this.google.enabled() && (_this.google.capa.auth() || _this.google.capa.drive()); + return _this.google.enabled() && (_this.google.capa.auth() || _this.google.capa.authGmail() || _this.google.capa.drive()); }); this.google.require.apiKeySettings = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () { return _this.google.enabled() && _this.google.capa.drive(); @@ -8059,7 +8046,7 @@ function () { this.google.clientSecret(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('GoogleClientSecret')); this.google.apiKey(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('GoogleApiKey')); this.google.capa.auth(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocialAuth')); - this.google.capa.authFast(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocialAuthFast')); + this.google.capa.authGmail(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocialAuthGmail')); this.google.capa.drive(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocialDrive')); this.google.capa.preview(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocialPreview')); this.facebook.enabled(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowFacebookSocial')); @@ -8099,7 +8086,7 @@ function () { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of */ 306); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of */ 315); /***/ }), /* 31 */ @@ -8111,14 +8098,13 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/inheritsLoose */ 10); -/* harmony import */ var _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/AbstractApp */ 255); +/* harmony import */ var Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/AbstractApp */ 257); @@ -8130,7 +8116,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of * var AppUserStore = /*#__PURE__*/ function (_AbstractAppStore) { - _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_0___default()(AppUserStore, _AbstractAppStore); + Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AppUserStore, _AbstractAppStore); function AppUserStore() { var _this; @@ -8215,29 +8201,36 @@ function (_AbstractAppStore) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 28); -var shared = __webpack_require__(/*! ../internals/shared */ 74); +var global = __webpack_require__(/*! ../internals/global */ 27); +var shared = __webpack_require__(/*! ../internals/shared */ 127); +var has = __webpack_require__(/*! ../internals/has */ 42); var uid = __webpack_require__(/*! ../internals/uid */ 128); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 180); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 130); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 183); +var WellKnownSymbolsStore = shared('wks'); var Symbol = global.Symbol; -var store = shared('wks'); +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; module.exports = function (name) { - return store[name] || (store[name] = NATIVE_SYMBOL && Symbol[name] - || (NATIVE_SYMBOL ? Symbol : uid)('Symbol.' + name)); + if (!has(WellKnownSymbolsStore, name)) { + if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; + else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; }; /***/ }), /* 33 */ -/*!******************************************************************************!*\ - !*** ./node_modules/@babel/runtime-corejs3/helpers/assertThisInitialized.js ***! - \******************************************************************************/ -/*! no static exports found */ +/*!**********************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/assertThisInitialized.js ***! + \**********************************************************************************/ +/*! exports provided: default */ /*! exports used: default */ -/***/ (function(module, exports) { +/***/ (function(module, __webpack_exports__, __webpack_require__) { +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _assertThisInitialized; }); function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); @@ -8246,8 +8239,6 @@ function _assertThisInitialized(self) { return self; } -module.exports = _assertThisInitialized; - /***/ }), /* 34 */ /*!*******************************************************************************!*\ @@ -8257,7 +8248,7 @@ module.exports = _assertThisInitialized; /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ 347); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ 356); /***/ }), /* 35 */ @@ -8273,8 +8264,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return componentExportHelper; }); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ 17); -/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 8); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1); @@ -8291,7 +8281,7 @@ var AbstractComponent = /*#__PURE__*/ function () { function AbstractComponent() { - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(this, "disposable", []); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(this, "disposable", []); } var _proto = AbstractComponent.prototype; @@ -8349,6 +8339,24 @@ var componentExportHelper = function componentExportHelper(ClassObject, template /***/ }), /* 36 */ +/*!*************************************************!*\ + !*** ./node_modules/core-js/internals/fails.js ***! + \*************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), +/* 37 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/an-object.js ***! \*****************************************************/ @@ -8366,7 +8374,7 @@ module.exports = function (it) { /***/ }), -/* 37 */ +/* 38 */ /*!*************************************!*\ !*** ./dev/Stores/User/Settings.js ***! \*************************************/ @@ -8375,20 +8383,17 @@ module.exports = function (it) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_string_sub__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.string.sub */ 135); -/* harmony import */ var core_js_modules_es_string_sub__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_sub__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Consts */ 25); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Globals */ 6); -/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Events */ 24); -/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/Settings */ 5); - +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1); +/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Consts */ 25); +/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0); +/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Globals */ 6); +/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2); +/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Events */ 24); +/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Storage/Settings */ 5); @@ -8404,21 +8409,21 @@ var SettingsUserStore = function () { function SettingsUserStore() { this.iAutoLogoutTimer = 0; - this.layout = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].SidePreview).extend({ - limitedList: [Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].SidePreview, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].BottomPreview, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].NoPreview] + this.layout = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].SidePreview).extend({ + limitedList: [Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].SidePreview, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].BottomPreview, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].NoPreview] }); - this.editorDefaultType = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["EditorDefaultType"].Html).extend({ - limitedList: [Common_Enums__WEBPACK_IMPORTED_MODULE_5__["EditorDefaultType"].Html, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["EditorDefaultType"].Plain, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["EditorDefaultType"].HtmlForced, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["EditorDefaultType"].PlainForced] + this.editorDefaultType = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["EditorDefaultType"].Html).extend({ + limitedList: [Common_Enums__WEBPACK_IMPORTED_MODULE_4__["EditorDefaultType"].Html, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["EditorDefaultType"].Plain, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["EditorDefaultType"].HtmlForced, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["EditorDefaultType"].PlainForced] }); - this.messagesPerPage = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Common_Consts__WEBPACK_IMPORTED_MODULE_4__[/* MESSAGES_PER_PAGE */ "i"]).extend({ - limitedList: Common_Consts__WEBPACK_IMPORTED_MODULE_4__[/* MESSAGES_PER_PAGE_VALUES */ "j"] + this.messagesPerPage = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* MESSAGES_PER_PAGE */ "i"]).extend({ + limitedList: Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* MESSAGES_PER_PAGE_VALUES */ "j"] }); - this.showImages = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false); - this.useCheckboxesInList = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(true); - this.allowDraftAutosave = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(true); - this.useThreads = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false); - this.replySameFolder = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false); - this.autoLogout = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time30mInMin); + this.showImages = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false); + this.useCheckboxesInList = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(true); + this.allowDraftAutosave = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(true); + this.useThreads = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false); + this.replySameFolder = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false); + this.autoLogout = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time30mInMin); this.computers(); this.subscribers(); } @@ -8428,42 +8433,42 @@ function () { _proto.computers = function computers() { var _this = this; - this.usePreviewPane = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () { - return Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].NoPreview !== _this.layout(); + this.usePreviewPane = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () { + return Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].NoPreview !== _this.layout(); }); }; _proto.subscribers = function subscribers() { this.layout.subscribe(function (value) { - Common_Globals__WEBPACK_IMPORTED_MODULE_6__["$html"].toggleClass('rl-no-preview-pane', Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].NoPreview === value); - Common_Globals__WEBPACK_IMPORTED_MODULE_6__["$html"].toggleClass('rl-side-preview-pane', Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].SidePreview === value); - Common_Globals__WEBPACK_IMPORTED_MODULE_6__["$html"].toggleClass('rl-bottom-preview-pane', Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].BottomPreview === value); - Common_Events__WEBPACK_IMPORTED_MODULE_8__[/* pub */ "a"]('layout', [value]); + Common_Globals__WEBPACK_IMPORTED_MODULE_5__["$html"].toggleClass('rl-no-preview-pane', Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].NoPreview === value); + Common_Globals__WEBPACK_IMPORTED_MODULE_5__["$html"].toggleClass('rl-side-preview-pane', Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].SidePreview === value); + Common_Globals__WEBPACK_IMPORTED_MODULE_5__["$html"].toggleClass('rl-bottom-preview-pane', Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].BottomPreview === value); + Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('layout', [value]); }); }; _proto.populate = function populate() { var _this2 = this; - this.layout(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('Layout'))); - this.editorDefaultType(Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('EditorDefaultType')); - this.autoLogout(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('AutoLogout'))); - this.messagesPerPage(Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('MPP')); - this.showImages(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('ShowImages')); - this.useCheckboxesInList(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('UseCheckboxesInList')); - this.allowDraftAutosave(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('AllowDraftAutosave')); - this.useThreads(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('UseThreads')); - this.replySameFolder(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('ReplySameFolder')); - Common_Events__WEBPACK_IMPORTED_MODULE_8__[/* sub */ "b"]('rl.auto-logout-refresh', function () { - window__WEBPACK_IMPORTED_MODULE_2___default.a.clearTimeout(_this2.iAutoLogoutTimer); + this.layout(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('Layout'))); + this.editorDefaultType(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('EditorDefaultType')); + this.autoLogout(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('AutoLogout'))); + this.messagesPerPage(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('MPP')); + this.showImages(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('ShowImages')); + this.useCheckboxesInList(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('UseCheckboxesInList')); + this.allowDraftAutosave(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('AllowDraftAutosave')); + this.useThreads(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('UseThreads')); + this.replySameFolder(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('ReplySameFolder')); + Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* sub */ "b"]('rl.auto-logout-refresh', function () { + window__WEBPACK_IMPORTED_MODULE_1___default.a.clearTimeout(_this2.iAutoLogoutTimer); - if (0 < _this2.autoLogout() && !Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('AccountSignMe')) { - _this2.iAutoLogoutTimer = window__WEBPACK_IMPORTED_MODULE_2___default.a.setTimeout(function () { - Common_Events__WEBPACK_IMPORTED_MODULE_8__[/* pub */ "a"]('rl.auto-logout'); - }, _this2.autoLogout() * Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time1m); + if (0 < _this2.autoLogout() && !Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('AccountSignMe')) { + _this2.iAutoLogoutTimer = window__WEBPACK_IMPORTED_MODULE_1___default.a.setTimeout(function () { + Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('rl.auto-logout'); + }, _this2.autoLogout() * Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time1m); } }); - Common_Events__WEBPACK_IMPORTED_MODULE_8__[/* pub */ "a"]('rl.auto-logout-refresh'); + Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('rl.auto-logout-refresh'); }; return SettingsUserStore; @@ -8472,7 +8477,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new SettingsUserStore()); /***/ }), -/* 38 */ +/* 39 */ /*!*******************************!*\ !*** ./dev/Common/Plugins.js ***! \*******************************/ @@ -8594,24 +8599,6 @@ function settingsGet(pluginSection, name) { return plugins ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(plugins[name]) ? null : plugins[name] : null; } -/***/ }), -/* 39 */ -/*!*************************************************!*\ - !*** ./node_modules/core-js/internals/fails.js ***! - \*************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } -}; - - /***/ }), /* 40 */, /* 41 */ @@ -8623,7 +8610,7 @@ module.exports = function (exec) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 76); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__); @@ -8841,7 +8828,7 @@ function () { var privateKeys = this.findPrivateKeysByEncryptionKeyIds(message.getEncryptionKeyIds(), recipients, true); if (privateKeys && 0 < privateKeys.length) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["showScreenPopup"])(__webpack_require__(/*! View/Popup/MessageOpenPgp */ 519), [function (decryptedKey) { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["showScreenPopup"])(__webpack_require__(/*! View/Popup/MessageOpenPgp */ 522), [function (decryptedKey) { if (decryptedKey) { message.decrypt(decryptedKey).then(function (decryptedMessage) { var privateKey = null; @@ -9037,6 +9024,22 @@ function () { /***/ }), /* 42 */ +/*!***********************************************!*\ + !*** ./node_modules/core-js/internals/has.js ***! + \***********************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; + +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), +/* 43 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/internals/export.js ***! \*******************************************************/ @@ -9046,13 +9049,13 @@ function () { "use strict"; -var global = __webpack_require__(/*! ../internals/global */ 77); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 234).f; -var isForced = __webpack_require__(/*! ../internals/is-forced */ 280); -var path = __webpack_require__(/*! ../internals/path */ 97); -var bind = __webpack_require__(/*! ../internals/bind-context */ 237); -var hide = __webpack_require__(/*! ../internals/hide */ 85); -var has = __webpack_require__(/*! ../internals/has */ 96); +var global = __webpack_require__(/*! ../internals/global */ 75); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 235).f; +var isForced = __webpack_require__(/*! ../internals/is-forced */ 289); +var path = __webpack_require__(/*! ../internals/path */ 96); +var bind = __webpack_require__(/*! ../internals/bind-context */ 238); +var hide = __webpack_require__(/*! ../internals/hide */ 83); +var has = __webpack_require__(/*! ../internals/has */ 95); var wrapConstructor = function (NativeConstructor) { var Wrapper = function (a, b, c) { @@ -9141,71 +9144,6 @@ module.exports = function (options, source) { }; -/***/ }), -/* 43 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/export.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 90).f; -var hide = __webpack_require__(/*! ../internals/hide */ 45); -var redefine = __webpack_require__(/*! ../internals/redefine */ 54); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 92); -var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 176); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); - -/* - options.target - name of the target object - options.global - target is the global object - options.stat - export as static methods of target - options.proto - export as prototype methods of target - options.real - real prototype method for the `pure` version - options.forced - export even if the native feature is available - options.bind - bind methods to the target, required for the `pure` version - options.wrap - wrap constructors to preventing global pollution, required for the `pure` version - options.unsafe - use the simple assignment of property instead of delete + defineProperty - options.sham - add a flag to not completely full polyfills - options.enumerable - export as enumerable property - options.noTargetGet - prevent calling a getter on target -*/ -module.exports = function (options, source) { - var TARGET = options.target; - var GLOBAL = options.global; - var STATIC = options.stat; - var FORCED, target, key, targetProperty, sourceProperty, descriptor; - if (GLOBAL) { - target = global; - } else if (STATIC) { - target = global[TARGET] || setGlobal(TARGET, {}); - } else { - target = (global[TARGET] || {}).prototype; - } - if (target) for (key in source) { - sourceProperty = source[key]; - if (options.noTargetGet) { - descriptor = getOwnPropertyDescriptor(target, key); - targetProperty = descriptor && descriptor.value; - } else targetProperty = target[key]; - FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); - // contained in target - if (!FORCED && targetProperty !== undefined) { - if (typeof sourceProperty === typeof targetProperty) continue; - copyConstructorProperties(sourceProperty, targetProperty); - } - // add a flag to not completely full polyfills - if (options.sham || (targetProperty && targetProperty.sham)) { - hide(sourceProperty, 'sham', true); - } - // extend global - redefine(target, key, sourceProperty, options); - } -}; - - /***/ }), /* 44 */ /*!*****************************************************!*\ @@ -9222,23 +9160,21 @@ module.exports = function (it) { /***/ }), /* 45 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/hide.js ***! - \************************************************/ +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.exec.js ***! + \********************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 50); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 59); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 91); +"use strict"; -module.exports = DESCRIPTORS ? function (object, key, value) { - return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; +var $ = __webpack_require__(/*! ../internals/export */ 48); +var exec = __webpack_require__(/*! ../internals/regexp-exec */ 110); + +$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { + exec: exec +}); /***/ }), @@ -9322,98 +9258,133 @@ function () { /***/ }), /* 47 */ -/*!***********************************************!*\ - !*** ./node_modules/core-js/internals/has.js ***! - \***********************************************/ +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/descriptors.js ***! + \*******************************************************/ /*! no static exports found */ /*! all exports used */ -/***/ (function(module, exports) { +/***/ (function(module, exports, __webpack_require__) { -var hasOwnProperty = {}.hasOwnProperty; +var fails = __webpack_require__(/*! ../internals/fails */ 36); -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; +// Thank's IE8 for his funny defineProperty +module.exports = !fails(function () { + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; +}); /***/ }), /* 48 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/es.regexp.exec.js ***! - \********************************************************/ +/*!**************************************************!*\ + !*** ./node_modules/core-js/internals/export.js ***! + \**************************************************/ /*! no static exports found */ +/*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 43); -var exec = __webpack_require__(/*! ../internals/regexp-exec */ 112); +var global = __webpack_require__(/*! ../internals/global */ 27); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 89).f; +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 179); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); -$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { - exec: exec -}); +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global; + } else if (STATIC) { + target = global[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global[TARGET] || {}).prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty === typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + // extend global + redefine(target, key, sourceProperty, options); + } +}; /***/ }), /* 49 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/classof-raw.js ***! - \*******************************************************/ +/*!**************************************************************************!*\ + !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! + \**************************************************************************/ /*! no static exports found */ /*! all exports used */ -/***/ (function(module, exports) { +/***/ (function(module, exports, __webpack_require__) { -var toString = {}.toString; +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); -module.exports = function (it) { - return toString.call(it).slice(8, -1); +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; }; /***/ }), /* 50 */ /*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/descriptors.js ***! + !*** ./node_modules/core-js/internals/classof-raw.js ***! \*******************************************************/ /*! no static exports found */ /*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 39); - -// Thank's IE8 for his funny defineProperty -module.exports = !fails(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), -/* 51 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/require-object-coercible.js ***! - \********************************************************************/ -/*! no static exports found */ -/*! all exports used */ /***/ (function(module, exports) { -// `RequireObjectCoercible` abstract operation -// https://tc39.github.io/ecma262/#sec-requireobjectcoercible +var toString = {}.toString; + module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; + return toString.call(it).slice(8, -1); }; /***/ }), -/* 52 */ +/* 51 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/es.function.name.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 50); -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 59).f; +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52).f; var FunctionPrototype = Function.prototype; var FunctionPrototypeToString = FunctionPrototype.toString; @@ -9437,23 +9408,38 @@ if (DESCRIPTORS && !(NAME in FunctionPrototype)) { /***/ }), -/* 53 */ -/*!**************************************************************!*\ - !*** ./node_modules/core-js-pure/internals/entry-virtual.js ***! - \**************************************************************/ +/* 52 */ +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/object-define-property.js ***! + \******************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var path = __webpack_require__(/*! ../internals/path */ 97); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 125); +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 124); -module.exports = function (CONSTRUCTOR) { - return path[CONSTRUCTOR + 'Prototype']; +var nativeDefineProperty = Object.defineProperty; + +// `Object.defineProperty` method +// https://tc39.github.io/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return nativeDefineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; }; /***/ }), -/* 54 */ +/* 53 */ /*!****************************************************!*\ !*** ./node_modules/core-js/internals/redefine.js ***! \****************************************************/ @@ -9461,28 +9447,23 @@ module.exports = function (CONSTRUCTOR) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 28); -var shared = __webpack_require__(/*! ../internals/shared */ 74); -var hide = __webpack_require__(/*! ../internals/hide */ 45); -var has = __webpack_require__(/*! ../internals/has */ 47); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 92); -var nativeFunctionToString = __webpack_require__(/*! ../internals/function-to-string */ 127); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 93); +var global = __webpack_require__(/*! ../internals/global */ 27); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var has = __webpack_require__(/*! ../internals/has */ 42); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ 91); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); var getInternalState = InternalStateModule.get; var enforceInternalState = InternalStateModule.enforce; -var TEMPLATE = String(nativeFunctionToString).split('toString'); - -shared('inspectSource', function (it) { - return nativeFunctionToString.call(it); -}); +var TEMPLATE = String(String).split('String'); (module.exports = function (O, key, value, options) { var unsafe = options ? !!options.unsafe : false; var simple = options ? !!options.enumerable : false; var noTargetGet = options ? !!options.noTargetGet : false; if (typeof value == 'function') { - if (typeof key == 'string' && !has(value, 'name')) hide(value, 'name', key); + if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key); enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); } if (O === global) { @@ -9495,32 +9476,44 @@ shared('inspectSource', function (it) { simple = true; } if (simple) O[key] = value; - else hide(O, key, value); + else createNonEnumerableProperty(O, key, value); // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative })(Function.prototype, 'toString', function toString() { - return typeof this == 'function' && getInternalState(this).source || nativeFunctionToString.call(this); + return typeof this == 'function' && getInternalState(this).source || inspectSource(this); }); /***/ }), -/* 55 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/es.object.to-string.js ***! - \*************************************************************/ +/* 54 */ +/*!**************************************************************!*\ + !*** ./node_modules/core-js-pure/internals/entry-virtual.js ***! + \**************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var redefine = __webpack_require__(/*! ../internals/redefine */ 54); -var toString = __webpack_require__(/*! ../internals/object-to-string */ 181); +var path = __webpack_require__(/*! ../internals/path */ 96); -var ObjectPrototype = Object.prototype; +module.exports = function (CONSTRUCTOR) { + return path[CONSTRUCTOR + 'Prototype']; +}; -// `Object.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-object.prototype.tostring -if (toString !== ObjectPrototype.toString) { - redefine(ObjectPrototype, 'toString', toString, { unsafe: true }); -} + +/***/ }), +/* 55 */ +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/require-object-coercible.js ***! + \********************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +// `RequireObjectCoercible` abstract operation +// https://tc39.github.io/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; /***/ }), @@ -9533,14 +9526,14 @@ if (toString !== ObjectPrototype.toString) { "use strict"; -var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 132); -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); -var toObject = __webpack_require__(/*! ../internals/to-object */ 120); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 134); +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); +var toObject = __webpack_require__(/*! ../internals/to-object */ 119); var toLength = __webpack_require__(/*! ../internals/to-length */ 72); -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 80); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 51); -var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 150); -var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 133); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 152); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 135); var max = Math.max; var min = Math.min; @@ -9553,7 +9546,11 @@ var maybeToString = function (it) { }; // @@replace logic -fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative) { +fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) { + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE; + var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0; + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; + return [ // `String.prototype.replace` method // https://tc39.github.io/ecma262/#sec-string.prototype.replace @@ -9567,8 +9564,13 @@ fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, ma // `RegExp.prototype[@@replace]` method // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace function (regexp, replaceValue) { - var res = maybeCallNative(nativeReplace, regexp, this, replaceValue); - if (res.done) return res.value; + if ( + (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) || + (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1) + ) { + var res = maybeCallNative(nativeReplace, regexp, this, replaceValue); + if (res.done) return res.value; + } var rx = anObject(regexp); var S = String(this); @@ -9694,8 +9696,8 @@ module.exports = function (exec) { /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var Common_ClientStorageDriver_Cookie__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/ClientStorageDriver/Cookie */ 416); -/* harmony import */ var Common_ClientStorageDriver_LocalStorage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/ClientStorageDriver/LocalStorage */ 417); +/* harmony import */ var Common_ClientStorageDriver_Cookie__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/ClientStorageDriver/Cookie */ 420); +/* harmony import */ var Common_ClientStorageDriver_LocalStorage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/ClientStorageDriver/LocalStorage */ 421); @@ -9726,32 +9728,23 @@ function get(key) { /***/ }), /* 59 */ -/*!******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-define-property.js ***! - \******************************************************************/ +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/get-built-in.js ***! + \********************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 50); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); +var path = __webpack_require__(/*! ../internals/path */ 148); +var global = __webpack_require__(/*! ../internals/global */ 27); -var nativeDefineProperty = Object.defineProperty; +var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; +}; -// `Object.defineProperty` method -// https://tc39.github.io/ecma262/#sec-object.defineproperty -exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return nativeDefineProperty(O, P, Attributes); - } catch (error) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) + : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; }; @@ -9778,7 +9771,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 8); /* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! moment */ 98); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! moment */ 97); /* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9); @@ -9955,12 +9948,12 @@ module.exports = window.hasher; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return emailArrayToStringClear; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return emailArrayFromJson; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return replyHelper; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 76); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 52); +/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Model/Email */ 81); +/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Model/Email */ 80); @@ -10058,6 +10051,26 @@ function replyHelper(inputEmails, unic, localEmails) { /***/ }), /* 63 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.to-string.js ***! + \*************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 93); +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); +var toString = __webpack_require__(/*! ../internals/object-to-string */ 184); + +// `Object.prototype.toString` method +// https://tc39.github.io/ecma262/#sec-object.prototype.tostring +if (!TO_STRING_TAG_SUPPORT) { + redefine(Object.prototype, 'toString', toString, { unsafe: true }); +} + + +/***/ }), +/* 64 */ /*!************************************!*\ !*** ./dev/Knoin/AbstractModel.js ***! \************************************/ @@ -10069,8 +10082,7 @@ function replyHelper(inputEmails, unic, localEmails) { /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractModel; }); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 69); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ 17); -/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); @@ -10086,9 +10098,9 @@ function () { modelName = ''; } - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(this, "sModelName", ''); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(this, "sModelName", ''); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(this, "disposables", []); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(this, "disposables", []); this.sModelName = modelName || ''; } @@ -10115,29 +10127,7 @@ function () { }(); /***/ }), -/* 64 */, -/* 65 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/get-built-in.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var path = __webpack_require__(/*! ../internals/path */ 109); -var global = __webpack_require__(/*! ../internals/global */ 28); - -var aFunction = function (variable) { - return typeof variable == 'function' ? variable : undefined; -}; - -module.exports = function (namespace, method) { - return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) - : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; -}; - - -/***/ }), +/* 65 */, /* 66 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/a-function.js ***! @@ -10161,9 +10151,9 @@ module.exports = function (it) { /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var $ = __webpack_require__(/*! ../internals/export */ 43); -var global = __webpack_require__(/*! ../internals/global */ 28); -var userAgent = __webpack_require__(/*! ../internals/user-agent */ 105); +var $ = __webpack_require__(/*! ../internals/export */ 48); +var global = __webpack_require__(/*! ../internals/global */ 27); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 104); var slice = [].slice; var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check @@ -10200,10 +10190,10 @@ $({ global: true, bind: true, forced: MSIE }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 77); -var shared = __webpack_require__(/*! ../internals/shared */ 199); -var uid = __webpack_require__(/*! ../internals/uid */ 239); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 290); +var global = __webpack_require__(/*! ../internals/global */ 75); +var shared = __webpack_require__(/*! ../internals/shared */ 202); +var uid = __webpack_require__(/*! ../internals/uid */ 240); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 299); var Symbol = global.Symbol; var store = shared('wks'); @@ -10223,7 +10213,7 @@ module.exports = function (name) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/for-each */ 252); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/for-each */ 253); /***/ }), /* 70 */ @@ -10290,8 +10280,8 @@ function () { /***/ (function(module, exports, __webpack_require__) { // toObject with fallback for non-array-like ES3 strings -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 51); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 118); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); module.exports = function (it) { return IndexedObject(requireObjectCoercible(it)); @@ -10307,7 +10297,7 @@ module.exports = function (it) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 80); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79); var min = Math.min; @@ -10332,58 +10322,6 @@ module.exports = {}; /***/ }), /* 74 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/shared.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 92); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 83); - -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || setGlobal(SHARED, {}); - -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: '3.1.3', - mode: IS_PURE ? 'pure' : 'global', - copyright: '© 2019 Denis Pushkarev (zloirock.ru)' -}); - - -/***/ }), -/* 75 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/modules/es.date.to-string.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(/*! ../internals/redefine */ 54); - -var DatePrototype = Date.prototype; -var INVALID_DATE = 'Invalid Date'; -var TO_STRING = 'toString'; -var nativeDateToString = DatePrototype[TO_STRING]; -var getTime = DatePrototype.getTime; - -// `Date.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-date.prototype.tostring -if (new Date(NaN) + '' != INVALID_DATE) { - redefine(DatePrototype, TO_STRING, function toString() { - var value = getTime.call(this); - // eslint-disable-next-line no-self-compare - return value === value ? nativeDateToString.call(this) : INVALID_DATE; - }); -} - - -/***/ }), -/* 76 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/es.array.join.js ***! \*******************************************************/ @@ -10392,19 +10330,19 @@ if (new Date(NaN) + '' != INVALID_DATE) { "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 43); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); +var $ = __webpack_require__(/*! ../internals/export */ 48); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 118); var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ 275); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 282); var nativeJoin = [].join; var ES3_STRINGS = IndexedObject != Object; -var SLOPPY_METHOD = sloppyArrayMethod('join', ','); +var STRICT_METHOD = arrayMethodIsStrict('join', ','); // `Array.prototype.join` method // https://tc39.github.io/ecma262/#sec-array.prototype.join -$({ target: 'Array', proto: true, forced: ES3_STRINGS || SLOPPY_METHOD }, { +$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, { join: function join(separator) { return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator); } @@ -10412,7 +10350,7 @@ $({ target: 'Array', proto: true, forced: ES3_STRINGS || SLOPPY_METHOD }, { /***/ }), -/* 77 */ +/* 75 */ /*!*******************************************************!*\ !*** ./node_modules/core-js-pure/internals/global.js ***! \*******************************************************/ @@ -10435,10 +10373,10 @@ module.exports = // eslint-disable-next-line no-new-func Function('return this')(); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 123))) /***/ }), -/* 78 */ +/* 76 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/is-object.js ***! \**********************************************************/ @@ -10452,8 +10390,20 @@ module.exports = function (it) { /***/ }), -/* 79 */, -/* 80 */ +/* 77 */, +/* 78 */ +/*!***************************************************!*\ + !*** ./node_modules/core-js/internals/is-pure.js ***! + \***************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = false; + + +/***/ }), +/* 79 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/to-integer.js ***! \******************************************************/ @@ -10472,7 +10422,7 @@ module.exports = function (argument) { /***/ }), -/* 81 */ +/* 80 */ /*!****************************!*\ !*** ./dev/Model/Email.js ***! \****************************/ @@ -10484,13 +10434,13 @@ module.exports = function (argument) { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmailModel", function() { return EmailModel; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return EmailModel; }); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name */ 52); +/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 48); +/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.search */ 266); +/* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.search */ 273); /* harmony import */ var core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__); @@ -10498,11 +10448,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ 17); -/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! emailjs-addressparser */ 160); +/* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! emailjs-addressparser */ 163); /* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(emailjs_addressparser__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Utils */ 2); @@ -10543,13 +10492,13 @@ function () { dkimValue = ''; } - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "email", ''); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"])(this, "email", ''); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "name", ''); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"])(this, "name", ''); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "dkimStatus", ''); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"])(this, "dkimStatus", ''); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_7___default()(this, "dkimValue", ''); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"])(this, "dkimValue", ''); this.email = email; this.name = name; @@ -10758,7 +10707,7 @@ function () { /***/ }), -/* 82 */ +/* 81 */ /*!*****************************!*\ !*** ./dev/Common/Audio.js ***! \*****************************/ @@ -10767,21 +10716,17 @@ function () { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 48); +/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_sub__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.sub */ 135); -/* harmony import */ var core_js_modules_es_string_sub__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_sub__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/defineProperty */ 17); -/* harmony import */ var _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Globals */ 6); -/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Links */ 15); -/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Events */ 24); -/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2); - +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Globals */ 6); +/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Links */ 15); +/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Events */ 24); +/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Utils */ 2); @@ -10797,22 +10742,22 @@ function () { function Audio() { var _this = this; - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(this, "notificator", null); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(this, "notificator", null); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(this, "player", null); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(this, "player", null); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(this, "supported", false); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(this, "supported", false); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(this, "supportedMp3", false); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(this, "supportedMp3", false); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(this, "supportedOgg", false); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(this, "supportedOgg", false); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(this, "supportedWav", false); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(this, "supportedWav", false); - _babel_runtime_corejs3_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3___default()(this, "supportedNotification", false); + Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(this, "supportedNotification", false); this.player = this.createNewObject(); - this.supported = !Common_Globals__WEBPACK_IMPORTED_MODULE_5__["bMobileDevice"] && !Common_Globals__WEBPACK_IMPORTED_MODULE_5__["bSafari"] && !!this.player && !!this.player.play; + this.supported = !Common_Globals__WEBPACK_IMPORTED_MODULE_4__["bMobileDevice"] && !Common_Globals__WEBPACK_IMPORTED_MODULE_4__["bSafari"] && !!this.player && !!this.player.play; if (this.supported && this.player && this.player.canPlayType) { this.supportedMp3 = '' !== this.player.canPlayType('audio/mpeg;').replace(/no/, ''); @@ -10836,7 +10781,7 @@ function () { this.player.addEventListener('ended', stopFn); this.player.addEventListener('error', stopFn); - Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* sub */ "b"]('audio.api.stop', stopFn); + Common_Events__WEBPACK_IMPORTED_MODULE_6__[/* sub */ "b"]('audio.api.stop', stopFn); } } @@ -10844,7 +10789,7 @@ function () { _proto.createNewObject = function createNewObject() { try { - var player = window__WEBPACK_IMPORTED_MODULE_4___default.a.Audio ? new window__WEBPACK_IMPORTED_MODULE_4___default.a.Audio() : null; + var player = window__WEBPACK_IMPORTED_MODULE_3___default.a.Audio ? new window__WEBPACK_IMPORTED_MODULE_3___default.a.Audio() : null; if (player && player.canPlayType && player.pause && player.play) { player.preload = 'none'; @@ -10869,7 +10814,7 @@ function () { this.player.pause(); } - Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('audio.stop'); + Common_Events__WEBPACK_IMPORTED_MODULE_6__[/* pub */ "a"]('audio.stop'); }; _proto.pause = function pause() { @@ -10885,10 +10830,10 @@ function () { ext = ''; } - name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(name); + name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(name); if (ext && '.' + ext === name.toLowerCase().substr((ext.length + 1) * -1)) { - name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(name.substr(0, name.length - 4)); + name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(name.substr(0, name.length - 4)); } return '' === name ? 'audio' : name; @@ -10898,7 +10843,7 @@ function () { if (this.supported && this.supportedMp3) { this.player.src = url; this.player.play(); - Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('audio.start', [this.clearName(name, 'mp3'), 'mp3']); + Common_Events__WEBPACK_IMPORTED_MODULE_6__[/* pub */ "a"]('audio.start', [this.clearName(name, 'mp3'), 'mp3']); } }; @@ -10908,7 +10853,7 @@ function () { this.player.play(); name = this.clearName(name, 'oga'); name = this.clearName(name, 'ogg'); - Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('audio.start', [name, 'ogg']); + Common_Events__WEBPACK_IMPORTED_MODULE_6__[/* pub */ "a"]('audio.start', [name, 'ogg']); } }; @@ -10916,7 +10861,7 @@ function () { if (this.supported && this.supportedWav) { this.player.src = url; this.player.play(); - Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('audio.start', [this.clearName(name, 'wav'), 'wav']); + Common_Events__WEBPACK_IMPORTED_MODULE_6__[/* pub */ "a"]('audio.start', [this.clearName(name, 'wav'), 'wav']); } }; @@ -10924,7 +10869,7 @@ function () { if (this.supported && this.supportedMp3) { if (!this.notificator) { this.notificator = this.createNewObject(); - this.notificator.src = Common_Links__WEBPACK_IMPORTED_MODULE_6__[/* sound */ "D"]('new-mail.mp3'); + this.notificator.src = Common_Links__WEBPACK_IMPORTED_MODULE_5__[/* sound */ "D"]('new-mail.mp3'); } if (this.notificator && this.notificator.play) { @@ -10939,19 +10884,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new Audio()); /***/ }), -/* 83 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/is-pure.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = false; - - -/***/ }), -/* 84 */ +/* 82 */ /*!************************************************************!*\ !*** ./node_modules/core-js-pure/internals/descriptors.js ***! \************************************************************/ @@ -10968,7 +10901,7 @@ module.exports = !fails(function () { /***/ }), -/* 85 */ +/* 83 */ /*!*****************************************************!*\ !*** ./node_modules/core-js-pure/internals/hide.js ***! \*****************************************************/ @@ -10976,9 +10909,9 @@ module.exports = !fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 84); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 134); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 151); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 82); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 136); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 153); module.exports = DESCRIPTORS ? function (object, key, value) { return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); @@ -10989,7 +10922,7 @@ module.exports = DESCRIPTORS ? function (object, key, value) { /***/ }), -/* 86 */ +/* 84 */ /*!****************************************!*\ !*** ./dev/Component/AbstractInput.js ***! \****************************************/ @@ -11002,10 +10935,8 @@ module.exports = DESCRIPTORS ? function (object, key, value) { /* unused harmony export default */ /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/assertThisInitialized */ 33); -/* harmony import */ var _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/inheritsLoose */ 10); -/* harmony import */ var _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 33); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0); @@ -11021,7 +10952,7 @@ module.exports = DESCRIPTORS ? function (object, key, value) { var AbstractInput = /*#__PURE__*/ function (_AbstractComponent) { - _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_2___default()(AbstractInput, _AbstractComponent); + Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(AbstractInput, _AbstractComponent); /** * @param {Object} params @@ -11058,7 +10989,7 @@ function (_AbstractComponent) { if (_this.trigger) { _this.setTriggerState(_this.trigger()); - _this.disposable.push(_this.trigger.subscribe(_this.setTriggerState, _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1___default()(_this))); + _this.disposable.push(_this.trigger.subscribe(_this.setTriggerState, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_this))); } return _this; @@ -11088,173 +11019,8 @@ function (_AbstractComponent) { /***/ }), -/* 87 */, -/* 88 */ -/*!***********************************!*\ - !*** ./dev/Promises/User/Ajax.js ***! - \***********************************/ -/*! exports provided: default */ -/*! exports used: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/inheritsLoose */ 10); -/* harmony import */ var _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Promises/User/Populator */ 390); -/* harmony import */ var Promises_AbstractAjax__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Promises/AbstractAjax */ 419); - - - - - - -var UserAjaxUserPromises = -/*#__PURE__*/ -function (_AbstractAjaxPromises) { - _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_1___default()(UserAjaxUserPromises, _AbstractAjaxPromises); - - function UserAjaxUserPromises() { - var _this; - - _this = _AbstractAjaxPromises.call(this) || this; - _this.foldersTimeout = 0; - return _this; - } - - var _proto = UserAjaxUserPromises.prototype; - - _proto.foldersReload = function foldersReload(fTrigger) { - return this.abort('Folders').postRequest('Folders', fTrigger).then(function (data) { - Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].foldersList(data.Result); - Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].foldersAdditionalParameters(data.Result); - return true; - }); - }; - - _proto.foldersReloadWithTimeout = function foldersReloadWithTimeout(fTrigger) { - var _this2 = this; - - this.setTrigger(fTrigger, true); - window__WEBPACK_IMPORTED_MODULE_2___default.a.clearTimeout(this.foldersTimeout); - this.foldersTimeout = window__WEBPACK_IMPORTED_MODULE_2___default.a.setTimeout(function () { - _this2.foldersReload(fTrigger); - }, 500); - }; - - _proto.folderDelete = function folderDelete(sFolderFullNameRaw, fTrigger) { - return this.postRequest('FolderDelete', fTrigger, { - 'Folder': sFolderFullNameRaw - }); - }; - - _proto.folderCreate = function folderCreate(sNewFolderName, sParentName, fTrigger) { - return this.postRequest('FolderCreate', fTrigger, { - 'Folder': sNewFolderName, - 'Parent': sParentName - }); - }; - - _proto.folderRename = function folderRename(sPrevFolderFullNameRaw, sNewFolderName, fTrigger) { - return this.postRequest('FolderRename', fTrigger, { - 'Folder': sPrevFolderFullNameRaw, - 'NewFolderName': sNewFolderName - }); - }; - - _proto.attachmentsActions = function attachmentsActions(sAction, aHashes, fTrigger) { - return this.postRequest('AttachmentsActions', fTrigger, { - 'Do': sAction, - 'Hashes': aHashes - }); - }; - - _proto.welcomeClose = function welcomeClose() { - return this.postRequest('WelcomeClose'); - }; - - return UserAjaxUserPromises; -}(Promises_AbstractAjax__WEBPACK_IMPORTED_MODULE_4__[/* AbstractAjaxPromises */ "a"]); - -/* harmony default export */ __webpack_exports__["a"] = (new UserAjaxUserPromises()); - -/***/ }), -/* 89 */, -/* 90 */ -/*!******************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! - \******************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 50); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 161); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 91); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); -var has = __webpack_require__(/*! ../internals/has */ 47); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); - -var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// `Object.getOwnPropertyDescriptor` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor -exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { - O = toIndexedObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return nativeGetOwnPropertyDescriptor(O, P); - } catch (error) { /* empty */ } - if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); -}; - - -/***/ }), -/* 91 */ -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - - -/***/ }), -/* 92 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/set-global.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 28); -var hide = __webpack_require__(/*! ../internals/hide */ 45); - -module.exports = function (key, value) { - try { - hide(global, key, value); - } catch (error) { - global[key] = value; - } return value; -}; - - -/***/ }), -/* 93 */ +/* 85 */, +/* 86 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/internal-state.js ***! \**********************************************************/ @@ -11262,13 +11028,13 @@ module.exports = function (key, value) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 175); -var global = __webpack_require__(/*! ../internals/global */ 28); +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 178); +var global = __webpack_require__(/*! ../internals/global */ 27); var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var hide = __webpack_require__(/*! ../internals/hide */ 45); -var objectHas = __webpack_require__(/*! ../internals/has */ 47); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 108); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); +var objectHas = __webpack_require__(/*! ../internals/has */ 42); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 102); var WeakMap = global.WeakMap; var set, get, has; @@ -11305,7 +11071,7 @@ if (NATIVE_WEAK_MAP) { var STATE = sharedKey('state'); hiddenKeys[STATE] = true; set = function (it, metadata) { - hide(it, STATE, metadata); + createNonEnumerableProperty(it, STATE, metadata); return metadata; }; get = function (it) { @@ -11326,43 +11092,213 @@ module.exports = { /***/ }), -/* 94 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***! - \*************************************************************/ +/* 87 */ +/*!***********************************!*\ + !*** ./dev/Promises/User/Ajax.js ***! + \***********************************/ +/*! exports provided: default */ +/*! exports used: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Promises/User/Populator */ 393); +/* harmony import */ var Promises_AbstractAjax__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Promises/AbstractAjax */ 423); + + + + + + +var UserAjaxUserPromises = +/*#__PURE__*/ +function (_AbstractAjaxPromises) { + Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(UserAjaxUserPromises, _AbstractAjaxPromises); + + function UserAjaxUserPromises() { + var _this; + + _this = _AbstractAjaxPromises.call(this) || this; + _this.foldersTimeout = 0; + return _this; + } + + var _proto = UserAjaxUserPromises.prototype; + + _proto.foldersReload = function foldersReload(fTrigger) { + return this.abort('Folders').postRequest('Folders', fTrigger).then(function (data) { + Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].foldersList(data.Result); + Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].foldersAdditionalParameters(data.Result); + return true; + }); + }; + + _proto.foldersReloadWithTimeout = function foldersReloadWithTimeout(fTrigger) { + var _this2 = this; + + this.setTrigger(fTrigger, true); + window__WEBPACK_IMPORTED_MODULE_2___default.a.clearTimeout(this.foldersTimeout); + this.foldersTimeout = window__WEBPACK_IMPORTED_MODULE_2___default.a.setTimeout(function () { + _this2.foldersReload(fTrigger); + }, 500); + }; + + _proto.folderDelete = function folderDelete(sFolderFullNameRaw, fTrigger) { + return this.postRequest('FolderDelete', fTrigger, { + 'Folder': sFolderFullNameRaw + }); + }; + + _proto.folderCreate = function folderCreate(sNewFolderName, sParentName, fTrigger) { + return this.postRequest('FolderCreate', fTrigger, { + 'Folder': sNewFolderName, + 'Parent': sParentName + }); + }; + + _proto.folderRename = function folderRename(sPrevFolderFullNameRaw, sNewFolderName, fTrigger) { + return this.postRequest('FolderRename', fTrigger, { + 'Folder': sPrevFolderFullNameRaw, + 'NewFolderName': sNewFolderName + }); + }; + + _proto.attachmentsActions = function attachmentsActions(sAction, aHashes, fTrigger) { + return this.postRequest('AttachmentsActions', fTrigger, { + 'Do': sAction, + 'Hashes': aHashes + }); + }; + + _proto.welcomeClose = function welcomeClose() { + return this.postRequest('WelcomeClose'); + }; + + return UserAjaxUserPromises; +}(Promises_AbstractAjax__WEBPACK_IMPORTED_MODULE_4__[/* AbstractAjaxPromises */ "a"]); + +/* harmony default export */ __webpack_exports__["a"] = (new UserAjaxUserPromises()); + +/***/ }), +/* 88 */, +/* 89 */ +/*!******************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! + \******************************************************************************/ /*! no static exports found */ +/*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 164); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 71); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 124); +var has = __webpack_require__(/*! ../internals/has */ 42); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 125); -var redefine = __webpack_require__(/*! ../internals/redefine */ 54); -var anObject = __webpack_require__(/*! ../internals/an-object */ 36); -var fails = __webpack_require__(/*! ../internals/fails */ 39); -var flags = __webpack_require__(/*! ../internals/regexp-flags */ 166); +var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; -var TO_STRING = 'toString'; -var RegExpPrototype = RegExp.prototype; -var nativeToString = RegExpPrototype[TO_STRING]; +// `Object.getOwnPropertyDescriptor` method +// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return nativeGetOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); +}; -var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); -// FF44- RegExp#toString has a wrong name -var INCORRECT_NAME = nativeToString.name != TO_STRING; -// `RegExp.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring -if (NOT_GENERIC || INCORRECT_NAME) { - redefine(RegExp.prototype, TO_STRING, function toString() { - var R = anObject(this); - var p = String(R.source); - var rf = R.flags; - var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf); - return '/' + p + '/' + f; - }, { unsafe: true }); +/***/ }), +/* 90 */ +/*!**********************************************************************!*\ + !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! + \**********************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports) { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), +/* 91 */ +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/set-global.js ***! + \******************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(/*! ../internals/global */ 27); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 49); + +module.exports = function (key, value) { + try { + createNonEnumerableProperty(global, key, value); + } catch (error) { + global[key] = value; + } return value; +}; + + +/***/ }), +/* 92 */ +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/inspect-source.js ***! + \**********************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var store = __webpack_require__(/*! ../internals/shared-store */ 126); + +var functionToString = Function.toString; + +// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper +if (typeof store.inspectSource != 'function') { + store.inspectSource = function (it) { + return functionToString.call(it); + }; } +module.exports = store.inspectSource; + /***/ }), -/* 95 */ +/* 93 */ +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! + \*****************************************************************/ +/*! no static exports found */ +/*! all exports used */ +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), +/* 94 */ /*!******************************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-indexed-object.js ***! \******************************************************************/ @@ -11371,8 +11307,8 @@ if (NOT_GENERIC || INCORRECT_NAME) { /***/ (function(module, exports, __webpack_require__) { // toObject with fallback for non-array-like ES3 strings -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 194); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 196); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 197); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 199); module.exports = function (it) { return IndexedObject(requireObjectCoercible(it)); @@ -11380,7 +11316,7 @@ module.exports = function (it) { /***/ }), -/* 96 */ +/* 95 */ /*!****************************************************!*\ !*** ./node_modules/core-js-pure/internals/has.js ***! \****************************************************/ @@ -11396,7 +11332,7 @@ module.exports = function (it, key) { /***/ }), -/* 97 */ +/* 96 */ /*!*****************************************************!*\ !*** ./node_modules/core-js-pure/internals/path.js ***! \*****************************************************/ @@ -11408,7 +11344,7 @@ module.exports = {}; /***/ }), -/* 98 */ +/* 97 */ /*!********************************!*\ !*** external "window.moment" ***! \********************************/ @@ -11419,7 +11355,7 @@ module.exports = {}; module.exports = window.moment; /***/ }), -/* 99 */ +/* 98 */ /*!************************************!*\ !*** external "window.progressJs" ***! \************************************/ @@ -11430,7 +11366,7 @@ module.exports = window.moment; module.exports = window.progressJs; /***/ }), -/* 100 */ +/* 99 */ /*!*************************************!*\ !*** ./dev/Stores/User/Identity.js ***! \*************************************/ @@ -11465,7 +11401,7 @@ var IdentityUserStore = function IdentityUserStore() { /* harmony default export */ __webpack_exports__["a"] = (new IdentityUserStore()); /***/ }), -/* 101 */ +/* 100 */ /*!************************************!*\ !*** ./dev/Stores/User/Contact.js ***! \************************************/ @@ -11524,7 +11460,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new ContactUserStore()); /***/ }), -/* 102 */ +/* 101 */ /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/document-create-element.js ***! \*******************************************************************/ @@ -11532,7 +11468,7 @@ function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 28); +var global = __webpack_require__(/*! ../internals/global */ 27); var isObject = __webpack_require__(/*! ../internals/is-object */ 44); var document = global.document; @@ -11545,7 +11481,7 @@ module.exports = function (it) { /***/ }), -/* 103 */ +/* 102 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/hidden-keys.js ***! \*******************************************************/ @@ -11557,10 +11493,10 @@ module.exports = {}; /***/ }), -/* 104 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/bind-context.js ***! - \********************************************************/ +/* 103 */ +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/function-bind-context.js ***! + \*****************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { @@ -11592,21 +11528,21 @@ module.exports = function (fn, that, length) { /***/ }), -/* 105 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/user-agent.js ***! - \******************************************************/ +/* 104 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/engine-user-agent.js ***! + \*************************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 65); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); module.exports = getBuiltIn('navigator', 'userAgent') || ''; /***/ }), -/* 106 */ +/* 105 */ /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/new-promise-capability.js ***! \******************************************************************/ @@ -11636,7 +11572,7 @@ module.exports.f = function (C) { /***/ }), -/* 107 */ +/* 106 */ /*!*****************************!*\ !*** ./dev/Common/Jassl.js ***! \*****************************/ @@ -11646,9 +11582,9 @@ module.exports.f = function (C) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return jassl; }); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 55); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); +/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 120); /* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); /* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); @@ -11706,7 +11642,7 @@ function jassl(src, async) { } /***/ }), -/* 108 */ +/* 107 */ /*!******************************************************!*\ !*** ./node_modules/core-js/internals/shared-key.js ***! \******************************************************/ @@ -11714,7 +11650,7 @@ function jassl(src, async) { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var shared = __webpack_require__(/*! ../internals/shared */ 74); +var shared = __webpack_require__(/*! ../internals/shared */ 127); var uid = __webpack_require__(/*! ../internals/uid */ 128); var keys = shared('keys'); @@ -11725,19 +11661,7 @@ module.exports = function (key) { /***/ }), -/* 109 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/path.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! ../internals/global */ 28); - - -/***/ }), -/* 110 */ +/* 108 */ /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! \*********************************************************/ @@ -11758,7 +11682,7 @@ module.exports = [ /***/ }), -/* 111 */ +/* 109 */ /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! \*************************************************************/ @@ -11766,8 +11690,8 @@ module.exports = [ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 59).f; -var has = __webpack_require__(/*! ../internals/has */ 47); +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52).f; +var has = __webpack_require__(/*! ../internals/has */ 42); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); @@ -11780,7 +11704,7 @@ module.exports = function (it, TAG, STATIC) { /***/ }), -/* 112 */ +/* 110 */ /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/regexp-exec.js ***! \*******************************************************/ @@ -11790,7 +11714,8 @@ module.exports = function (it, TAG, STATIC) { "use strict"; -var regexpFlags = __webpack_require__(/*! ./regexp-flags */ 166); +var regexpFlags = __webpack_require__(/*! ./regexp-flags */ 170); +var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ 233); var nativeExec = RegExp.prototype.exec; // This always refers to the native implementation, because the @@ -11808,24 +11733,56 @@ var UPDATES_LAST_INDEX_WRONG = (function () { return re1.lastIndex !== 0 || re2.lastIndex !== 0; })(); +var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET; + // nonparticipating capturing group, copied from es5-shim's String#split patch. var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; -var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED; +var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y; if (PATCH) { patchedExec = function exec(str) { var re = this; var lastIndex, reCopy, match, i; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = regexpFlags.call(re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = flags.replace('y', ''); + if (flags.indexOf('g') === -1) { + flags += 'g'; + } + + strCopy = String(str).slice(re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } if (NPCG_INCLUDED) { - reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re)); + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); } if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; - match = nativeExec.call(re, str); + match = nativeExec.call(sticky ? reCopy : re, strCopy); - if (UPDATES_LAST_INDEX_WRONG && match) { + if (sticky) { + if (match) { + match.input = match.input.slice(charsAdded); + match[0] = match[0].slice(charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { re.lastIndex = re.global ? match.index + match[0].length : lastIndex; } if (NPCG_INCLUDED && match && match.length > 1) { @@ -11846,7 +11803,43 @@ module.exports = patchedExec; /***/ }), -/* 113 */ +/* 111 */ +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); +var anObject = __webpack_require__(/*! ../internals/an-object */ 37); +var fails = __webpack_require__(/*! ../internals/fails */ 36); +var flags = __webpack_require__(/*! ../internals/regexp-flags */ 170); + +var TO_STRING = 'toString'; +var RegExpPrototype = RegExp.prototype; +var nativeToString = RegExpPrototype[TO_STRING]; + +var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); +// FF44- RegExp#toString has a wrong name +var INCORRECT_NAME = nativeToString.name != TO_STRING; + +// `RegExp.prototype.toString` method +// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring +if (NOT_GENERIC || INCORRECT_NAME) { + redefine(RegExp.prototype, TO_STRING, function toString() { + var R = anObject(this); + var p = String(R.source); + var rf = R.flags; + var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf); + return '/' + p + '/' + f; + }, { unsafe: true }); +} + + +/***/ }), +/* 112 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-length.js ***! \**********************************************************/ @@ -11854,7 +11847,7 @@ module.exports = patchedExec; /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 198); +var toInteger = __webpack_require__(/*! ../internals/to-integer */ 201); var min = Math.min; @@ -11866,7 +11859,7 @@ module.exports = function (argument) { /***/ }), -/* 114 */ +/* 113 */ /*!*******************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/values.js ***! \*******************************************************************************/ @@ -11874,10 +11867,10 @@ module.exports = function (argument) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/values */ 282); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/values */ 291); /***/ }), -/* 115 */ +/* 114 */ /*!*****************************!*\ !*** ./dev/Stores/Theme.js ***! \*****************************/ @@ -11921,7 +11914,7 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new ThemeStore()); /***/ }), -/* 116 */ +/* 115 */ /*!*****************************************!*\ !*** ./dev/Stores/User/Notification.js ***! \*****************************************/ @@ -11937,7 +11930,7 @@ function () { /* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1); /* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0); /* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Events */ 24); -/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Audio */ 82); +/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Audio */ 81); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Storage/Settings */ 5); @@ -12119,9 +12112,9 @@ function () { /* harmony default export */ __webpack_exports__["a"] = (new NotificationUserStore()); /***/ }), +/* 116 */, /* 117 */, -/* 118 */, -/* 119 */ +/* 118 */ /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/indexed-object.js ***! \**********************************************************/ @@ -12129,8 +12122,8 @@ function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var fails = __webpack_require__(/*! ../internals/fails */ 39); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); +var fails = __webpack_require__(/*! ../internals/fails */ 36); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); var split = ''.split; @@ -12145,7 +12138,7 @@ module.exports = fails(function () { /***/ }), -/* 120 */ +/* 119 */ /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-object.js ***! \*****************************************************/ @@ -12153,7 +12146,7 @@ module.exports = fails(function () { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 51); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 55); // `ToObject` abstract operation // https://tc39.github.io/ecma262/#sec-toobject @@ -12163,7 +12156,7 @@ module.exports = function (argument) { /***/ }), -/* 121 */ +/* 120 */ /*!****************************************************!*\ !*** ./node_modules/core-js/modules/es.promise.js ***! \****************************************************/ @@ -12173,43 +12166,44 @@ module.exports = function (argument) { "use strict"; -var $ = __webpack_require__(/*! ../internals/export */ 43); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 83); -var global = __webpack_require__(/*! ../internals/global */ 28); -var path = __webpack_require__(/*! ../internals/path */ 109); -var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 184); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 111); -var setSpecies = __webpack_require__(/*! ../internals/set-species */ 185); +var $ = __webpack_require__(/*! ../internals/export */ 48); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 78); +var global = __webpack_require__(/*! ../internals/global */ 27); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); +var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 168); +var redefine = __webpack_require__(/*! ../internals/redefine */ 53); +var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 187); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ 188); var isObject = __webpack_require__(/*! ../internals/is-object */ 44); var aFunction = __webpack_require__(/*! ../internals/a-function */ 66); -var anInstance = __webpack_require__(/*! ../internals/an-instance */ 186); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); -var iterate = __webpack_require__(/*! ../internals/iterate */ 141); -var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 190); -var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 142); -var task = __webpack_require__(/*! ../internals/task */ 131).set; -var microtask = __webpack_require__(/*! ../internals/microtask */ 191); -var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 165); -var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 192); -var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 106); -var perform = __webpack_require__(/*! ../internals/perform */ 143); -var userAgent = __webpack_require__(/*! ../internals/user-agent */ 105); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 93); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ 189); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 50); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 92); +var iterate = __webpack_require__(/*! ../internals/iterate */ 142); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 193); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 143); +var task = __webpack_require__(/*! ../internals/task */ 132).set; +var microtask = __webpack_require__(/*! ../internals/microtask */ 194); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 169); +var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 195); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 105); +var perform = __webpack_require__(/*! ../internals/perform */ 144); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 86); var isForced = __webpack_require__(/*! ../internals/is-forced */ 129); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 151); var SPECIES = wellKnownSymbol('species'); var PROMISE = 'Promise'; var getInternalState = InternalStateModule.get; var setInternalState = InternalStateModule.set; var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); -var PromiseConstructor = global[PROMISE]; +var PromiseConstructor = NativePromise; var TypeError = global.TypeError; var document = global.document; var process = global.process; -var $fetch = global.fetch; -var versions = process && process.versions; -var v8 = versions && versions.v8 || ''; +var $fetch = getBuiltIn('fetch'); var newPromiseCapability = newPromiseCapabilityModule.f; var newGenericPromiseCapability = newPromiseCapability; var IS_NODE = classof(process) == 'process'; @@ -12221,24 +12215,32 @@ var FULFILLED = 1; var REJECTED = 2; var HANDLED = 1; var UNHANDLED = 2; -var Internal, OwnPromiseCapability, PromiseWrapper; +var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; var FORCED = isForced(PROMISE, function () { - // correct subclassing with @@species support - var promise = PromiseConstructor.resolve(1); - var empty = function () { /* empty */ }; - var FakePromise = (promise.constructor = {})[SPECIES] = function (exec) { - exec(empty, empty); - }; - // unhandled rejections tracking support, NodeJS Promise without it fails @@species test - return !((IS_NODE || typeof PromiseRejectionEvent == 'function') - && (!IS_PURE || promise['finally']) - && promise.then(empty) instanceof FakePromise - // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); + if (!GLOBAL_CORE_JS_PROMISE) { + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 - // we can't detect it synchronously, so just check versions - && v8.indexOf('6.6') !== 0 - && userAgent.indexOf('Chrome/66') === -1); + // We can't detect it synchronously, so just check versions + if (V8_VERSION === 66) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true; + } + // We need Promise#finally in the pure version for preventing prototype pollution + if (IS_PURE && !PromiseConstructor.prototype['finally']) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false; + // Detect correctness of subclassing with @@species support + var promise = PromiseConstructor.resolve(1); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + return !(promise.then(function () { /* empty */ }) instanceof FakePromise); }); var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { @@ -12446,13 +12448,26 @@ if (FORCED) { : newGenericPromiseCapability(C); }; - // wrap fetch result - if (!IS_PURE && typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { - // eslint-disable-next-line no-unused-vars - fetch: function fetch(input) { - return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); - } - }); + if (!IS_PURE && typeof NativePromise == 'function') { + nativeThen = NativePromise.prototype.then; + + // wrap native Promise#then for native async functions + redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + nativeThen.call(that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + + // wrap fetch result + if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { + // eslint-disable-next-line no-unused-vars + fetch: function fetch(input /* , init */) { + return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); + } + }); + } } $({ global: true, wrap: true, forced: FORCED }, { @@ -12462,7 +12477,7 @@ $({ global: true, wrap: true, forced: FORCED }, { setToStringTag(PromiseConstructor, PROMISE, false, true); setSpecies(PROMISE); -PromiseWrapper = path[PROMISE]; +PromiseWrapper = getBuiltIn(PROMISE); // statics $({ target: PROMISE, stat: true, forced: FORCED }, { @@ -12532,7 +12547,7 @@ $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { /***/ }), -/* 122 */ +/* 121 */ /*!**********************************************************!*\ !*** ./node_modules/core-js-pure/internals/to-object.js ***! \**********************************************************/ @@ -12540,7 +12555,7 @@ $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 196); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 199); // `ToObject` abstract operation // https://tc39.github.io/ecma262/#sec-toobject @@ -12550,7 +12565,7 @@ module.exports = function (argument) { /***/ }), -/* 123 */ +/* 122 */ /*!***********************************!*\ !*** ./dev/View/Popup/Compose.js ***! \***********************************/ @@ -12562,83 +12577,74 @@ module.exports = function (argument) { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComposePopupView", function() { return ComposePopupView; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ComposePopupView; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 76); +/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 74); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.date.to-string */ 75); -/* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.function.name */ 52); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 55); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 48); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 94); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.split */ 168); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.link */ 169); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_es_string_sub__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.string.sub */ 135); -/* harmony import */ var core_js_modules_es_string_sub__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_sub__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 19); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 34); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/assertThisInitialized */ 33); -/* harmony import */ var _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17__); -/* harmony import */ var _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/inheritsLoose */ 10); -/* harmony import */ var _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_18__); -/* harmony import */ var _babel_runtime_corejs3_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/applyDecoratedDescriptor */ 20); -/* harmony import */ var _babel_runtime_corejs3_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_19__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_20__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_21__); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_22__); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! key */ 21); -/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_24__); -/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Jua */ 172); -/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(Jua__WEBPACK_IMPORTED_MODULE_25__); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Common/Consts */ 25); -/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Common/Globals */ 6); -/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Common/Links */ 15); -/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Common/Momentor */ 60); -/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! Common/Cache */ 14); -/* harmony import */ var Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! Common/HtmlEditor */ 204); -/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! Stores/User/App */ 31); -/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! Stores/User/Settings */ 37); -/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! Stores/User/Identity */ 100); -/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! Stores/User/Account */ 46); -/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! Stores/User/Folder */ 11); -/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! Stores/User/Pgp */ 41); -/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! Stores/User/Message */ 13); -/* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! Stores/Social */ 29); -/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! Remote/User/Ajax */ 16); -/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! Common/Events */ 24); -/* harmony import */ var Model_ComposeAttachment__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! Model/ComposeAttachment */ 262); -/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! Helper/Apps/User */ 22); -/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! Knoin/Knoin */ 7); -/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 27); - - +/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); +/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); +/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); +/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); +/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 56); +/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.split */ 171); +/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.link */ 172); +/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/web.timers */ 67); +/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 19); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_11__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 34); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_14__); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 33); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); +/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 20); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! window */ 4); +/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_18__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! _ */ 3); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_19__); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! $ */ 8); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_20__); +/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ko */ 1); +/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! key */ 21); +/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_22__); +/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Jua */ 175); +/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(Jua__WEBPACK_IMPORTED_MODULE_23__); +/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Common/Enums */ 0); +/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Utils */ 2); +/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Consts */ 25); +/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Common/Globals */ 6); +/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Common/Links */ 15); +/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Common/Translator */ 9); +/* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Common/Momentor */ 60); +/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Common/Cache */ 14); +/* harmony import */ var Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Common/HtmlEditor */ 207); +/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! Stores/User/App */ 31); +/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! Stores/User/Settings */ 38); +/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! Stores/User/Identity */ 99); +/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! Stores/User/Account */ 46); +/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! Stores/User/Folder */ 11); +/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! Stores/User/Pgp */ 41); +/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! Stores/User/Message */ 13); +/* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! Stores/Social */ 29); +/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! Remote/User/Ajax */ 16); +/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! Storage/Settings */ 5); +/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! Common/Events */ 24); +/* harmony import */ var Model_ComposeAttachment__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! Model/ComposeAttachment */ 269); +/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! Helper/Apps/User */ 22); +/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! Knoin/Knoin */ 7); +/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 28); @@ -12690,27 +12696,27 @@ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2; -var ComposePopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["popup"])({ +var ComposePopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["popup"])({ name: 'View/Popup/Compose', templateID: 'PopupsCompose' -}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["command"])(function (self) { +}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["command"])(function (self) { return self.canBeSentOrSaved(); -}), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["command"])(function (self) { +}), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["command"])(function (self) { return self.canBeSentOrSaved(); -}), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["command"])(function (self) { +}), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["command"])(function (self) { return self.isDraftFolderMessage(); -}), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["command"])(function (self) { +}), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["command"])(function (self) { return self.canBeSentOrSaved(); -}), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["command"])(function (self) { +}), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["command"])(function (self) { return self.allowContacts; -}), _dec7 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["command"])(function (self) { +}), _dec7 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["command"])(function (self) { return self.dropboxEnabled(); -}), _dec8 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["command"])(function (self) { +}), _dec8 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["command"])(function (self) { return self.driveEnabled(); }), _dec(_class = (_class2 = /*#__PURE__*/ function (_AbstractViewNext) { - _babel_runtime_corejs3_helpers_inheritsLoose__WEBPACK_IMPORTED_MODULE_18___default()(ComposePopupView, _AbstractViewNext); + Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"])(ComposePopupView, _AbstractViewNext); function ComposePopupView() { var _this; @@ -12720,10 +12726,10 @@ function (_AbstractViewNext) { var fEmailOutInHelper = function fEmailOutInHelper(context, identity, name, isIn) { if (identity && context && identity[name]() && (isIn ? true : context[name]())) { var identityEmail = identity[name](); - var list = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(context[name]()).split(/[,]/); - list = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_16___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, list, function (email) { - email = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(email); - return email && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(identityEmail) !== email; + var list = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(context[name]()).split(/[,]/); + list = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_14___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, list, function (email) { + email = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(email); + return email && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(identityEmail) !== email; }); if (isIn) { @@ -12741,24 +12747,24 @@ function (_AbstractViewNext) { _this.bFromDraft = false; _this.sReferences = ''; _this.sLastFocusedField = 'to'; - _this.resizerTrigger = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.resizerTrigger, _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this)); - _this.allowContacts = !!Stores_User_App__WEBPACK_IMPORTED_MODULE_35__[/* default */ "a"].contactsIsAllowed(); - _this.allowFolders = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_44__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_26__["Capa"].Folders); + _this.resizerTrigger = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.resizerTrigger, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this)); + _this.allowContacts = !!Stores_User_App__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].contactsIsAllowed(); + _this.allowFolders = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_42__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_24__["Capa"].Folders); _this.bSkipNextHide = false; - _this.composeInEdit = Stores_User_App__WEBPACK_IMPORTED_MODULE_35__[/* default */ "a"].composeInEdit; - _this.editorDefaultType = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].editorDefaultType; - _this.capaOpenPGP = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_40__[/* default */ "a"].capaOpenPGP; - _this.identitiesDropdownTrigger = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.to = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(''); - _this.to.focused = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.cc = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(''); - _this.cc.focused = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.bcc = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(''); - _this.bcc.focused = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.replyTo = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(''); - _this.replyTo.focused = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); // this.to.subscribe((v) => console.log(v)); - - ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + _this.composeInEdit = Stores_User_App__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].composeInEdit; + _this.editorDefaultType = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_34__[/* default */ "a"].editorDefaultType; + _this.capaOpenPGP = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].capaOpenPGP; + _this.identitiesDropdownTrigger = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.to = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(''); + _this.to.focused = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.cc = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(''); + _this.cc.focused = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.bcc = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(''); + _this.bcc.focused = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.replyTo = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(''); + _this.replyTo.focused = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); // this.to.subscribe((v) => console.log(v)); + + ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { switch (true) { case _this.to.focused(): _this.sLastFocusedField = 'to'; @@ -12776,20 +12782,20 @@ function (_AbstractViewNext) { }).extend({ notify: 'always' }); - _this.subject = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(''); - _this.subject.focused = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.isHtml = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.requestDsn = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.requestReadReceipt = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.markAsImportant = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.sendError = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.sendSuccessButSaveError = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.savedError = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.sendButtonSuccess = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + _this.subject = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(''); + _this.subject.focused = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.isHtml = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.requestDsn = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.requestReadReceipt = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.markAsImportant = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.sendError = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.sendSuccessButSaveError = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.savedError = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.sendButtonSuccess = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { return !_this.sendError() && !_this.sendSuccessButSaveError(); }); - _this.sendErrorDesc = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(''); - _this.savedErrorDesc = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(''); + _this.sendErrorDesc = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(''); + _this.savedErrorDesc = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(''); _this.sendError.subscribe(function (value) { if (!value) { @@ -12809,37 +12815,37 @@ function (_AbstractViewNext) { } }); - _this.savedTime = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(0); - _this.savedTimeText = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { - return 0 < _this.savedTime() ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["i18n"])('COMPOSE/SAVED_TIME', { - 'TIME': Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_32__["format"])(_this.savedTime() - 1, 'LT') + _this.savedTime = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(0); + _this.savedTimeText = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { + return 0 < _this.savedTime() ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('COMPOSE/SAVED_TIME', { + 'TIME': Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_30__["format"])(_this.savedTime() - 1, 'LT') }) : ''; }); - _this.emptyToError = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.emptyToErrorTooltip = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { - return _this.emptyToError() ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["i18n"])('COMPOSE/EMPTY_TO_ERROR_DESC') : ''; + _this.emptyToError = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.emptyToErrorTooltip = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { + return _this.emptyToError() ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('COMPOSE/EMPTY_TO_ERROR_DESC') : ''; }); - _this.attachmentsInProcessError = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.attachmentsInErrorError = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.attachmentsErrorTooltip = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + _this.attachmentsInProcessError = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.attachmentsInErrorError = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.attachmentsErrorTooltip = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { var result = ''; switch (true) { case _this.attachmentsInProcessError(): - result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["i18n"])('COMPOSE/ATTACHMENTS_UPLOAD_ERROR_DESC'); + result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('COMPOSE/ATTACHMENTS_UPLOAD_ERROR_DESC'); break; case _this.attachmentsInErrorError(): - result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["i18n"])('COMPOSE/ATTACHMENTS_ERROR_DESC'); + result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('COMPOSE/ATTACHMENTS_ERROR_DESC'); break; // no default } return result; }); - _this.showCc = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.showBcc = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.showReplyTo = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); + _this.showCc = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.showBcc = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.showReplyTo = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); _this.cc.subscribe(function (value) { if (false === _this.showCc() && 0 < value.length) { @@ -12859,39 +12865,39 @@ function (_AbstractViewNext) { } }); - _this.draftFolder = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(''); - _this.draftUid = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(''); - _this.sending = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.saving = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.attachments = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observableArray([]); - _this.attachmentsInProcess = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { - return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_16___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.attachments(), function (item) { + _this.draftFolder = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(''); + _this.draftUid = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(''); + _this.sending = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.saving = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.attachments = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observableArray([]); + _this.attachmentsInProcess = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { + return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_14___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.attachments(), function (item) { return item && !item.complete(); }); }); - _this.attachmentsInReady = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { - return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_16___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.attachments(), function (item) { + _this.attachmentsInReady = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { + return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_14___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.attachments(), function (item) { return item && item.complete(); }); }); - _this.attachmentsInError = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { - return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_16___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.attachments(), function (item) { + _this.attachmentsInError = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { + return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_14___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.attachments(), function (item) { return item && '' !== item.error(); }); }); - _this.attachmentsCount = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + _this.attachmentsCount = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { return _this.attachments().length; }); - _this.attachmentsInErrorCount = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + _this.attachmentsInErrorCount = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { return _this.attachmentsInError().length; }); - _this.attachmentsInProcessCount = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + _this.attachmentsInProcessCount = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { return _this.attachmentsInProcess().length; }); - _this.isDraftFolderMessage = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + _this.isDraftFolderMessage = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { return '' !== _this.draftFolder() && '' !== _this.draftUid(); }); - _this.attachmentsPlace = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); + _this.attachmentsPlace = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); _this.attachments.subscribe(_this.resizerTrigger); @@ -12903,21 +12909,21 @@ function (_AbstractViewNext) { } }); - _this.composeUploaderButton = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(null); - _this.composeUploaderDropPlace = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(null); - _this.dragAndDropEnabled = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.dragAndDropOver = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false).extend({ + _this.composeUploaderButton = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(null); + _this.composeUploaderDropPlace = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(null); + _this.dragAndDropEnabled = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.dragAndDropOver = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false).extend({ throttle: 1 }); - _this.dragAndDropVisible = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false).extend({ + _this.dragAndDropVisible = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false).extend({ throttle: 1 }); - _this.attacheMultipleAllowed = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.addAttachmentEnabled = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.composeEditorArea = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(null); - _this.identities = Stores_User_Identity__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].identities; - _this.identitiesOptions = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { - return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_14___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, Stores_User_Identity__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].identities(), function (item) { + _this.attacheMultipleAllowed = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.addAttachmentEnabled = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.composeEditorArea = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(null); + _this.identities = Stores_User_Identity__WEBPACK_IMPORTED_MODULE_35__[/* default */ "a"].identities; + _this.identitiesOptions = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { + return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_12___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, Stores_User_Identity__WEBPACK_IMPORTED_MODULE_35__[/* default */ "a"].identities(), function (item) { return { 'item': item, 'optValue': item.id(), @@ -12925,19 +12931,19 @@ function (_AbstractViewNext) { }; }); }); - _this.currentIdentity = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(_this.identities()[0] ? _this.identities()[0] : null); + _this.currentIdentity = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(_this.identities()[0] ? _this.identities()[0] : null); _this.currentIdentity.extend({ - toggleSubscribe: [_babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this), function (identity) { - fEmailOutInHelper(_babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this), identity, 'bcc'); - fEmailOutInHelper(_babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this), identity, 'replyTo'); + toggleSubscribe: [Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this), function (identity) { + fEmailOutInHelper(Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this), identity, 'bcc'); + fEmailOutInHelper(Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this), identity, 'replyTo'); }, function (identity) { - fEmailOutInHelper(_babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this), identity, 'bcc', true); - fEmailOutInHelper(_babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this), identity, 'replyTo', true); + fEmailOutInHelper(Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this), identity, 'bcc', true); + fEmailOutInHelper(Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this), identity, 'replyTo', true); }] }); - _this.currentIdentityView = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + _this.currentIdentityView = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { var item = _this.currentIdentity(); return item ? item.formattedName() : 'unknown'; @@ -12950,12 +12956,12 @@ function (_AbstractViewNext) { }); _this.attachmentsInProcess.subscribe(function (value) { - if (_this.attachmentsInProcessError() && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isArray"])(value) && 0 === value.length) { + if (_this.attachmentsInProcessError() && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isArray"])(value) && 0 === value.length) { _this.attachmentsInProcessError(false); } }); - _this.resizer = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false).extend({ + _this.resizer = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false).extend({ throttle: 50 }); @@ -12965,13 +12971,13 @@ function (_AbstractViewNext) { } }); - _this.canBeSentOrSaved = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].computed(function () { + _this.canBeSentOrSaved = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { return !_this.sending() && !_this.saving(); }); - _this.sendMessageResponse = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.sendMessageResponse, _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this)); - _this.saveMessageResponse = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.saveMessageResponse, _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this)); - Common_Events__WEBPACK_IMPORTED_MODULE_45__[/* sub */ "b"]('interval.2m', function () { - if (_this.modalVisibility() && !Stores_User_Folder__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].draftFolderNotEnabled() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].allowDraftAutosave() && !_this.isEmptyForm(false) && !_this.saving() && !_this.sending() && !_this.savedError()) { + _this.sendMessageResponse = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.sendMessageResponse, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this)); + _this.saveMessageResponse = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.saveMessageResponse, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this)); + Common_Events__WEBPACK_IMPORTED_MODULE_43__[/* sub */ "b"]('interval.2m', function () { + if (_this.modalVisibility() && !Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].draftFolderNotEnabled() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_34__[/* default */ "a"].allowDraftAutosave() && !_this.isEmptyForm(false) && !_this.saving() && !_this.sending() && !_this.savedError()) { _this.saveCommand(); } }); @@ -12982,17 +12988,17 @@ function (_AbstractViewNext) { _this.showReplyTo.subscribe(_this.resizerTrigger); - _this.dropboxEnabled = Stores_Social__WEBPACK_IMPORTED_MODULE_42__[/* default */ "a"].dropbox.enabled; - _this.dropboxApiKey = Stores_Social__WEBPACK_IMPORTED_MODULE_42__[/* default */ "a"].dropbox.apiKey; - _this.driveEnabled = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(Common_Globals__WEBPACK_IMPORTED_MODULE_29__["bXMLHttpRequestSupported"] && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_44__["settingsGet"]('AllowGoogleSocial') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_44__["settingsGet"]('AllowGoogleSocialDrive') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_44__["settingsGet"]('GoogleClientID') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_44__["settingsGet"]('GoogleApiKey')); - _this.driveVisible = ko__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].observable(false); - _this.driveCallback = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.driveCallback, _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this)); - _this.onMessageUploadAttachments = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.onMessageUploadAttachments, _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this)); + _this.dropboxEnabled = Stores_Social__WEBPACK_IMPORTED_MODULE_40__[/* default */ "a"].dropbox.enabled; + _this.dropboxApiKey = Stores_Social__WEBPACK_IMPORTED_MODULE_40__[/* default */ "a"].dropbox.apiKey; + _this.driveEnabled = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(Common_Globals__WEBPACK_IMPORTED_MODULE_27__["bXMLHttpRequestSupported"] && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_42__["settingsGet"]('AllowGoogleSocial') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_42__["settingsGet"]('AllowGoogleSocialDrive') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_42__["settingsGet"]('GoogleClientID') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_42__["settingsGet"]('GoogleApiKey')); + _this.driveVisible = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(false); + _this.driveCallback = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.driveCallback, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this)); + _this.onMessageUploadAttachments = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.onMessageUploadAttachments, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this)); _this.bDisabeCloseOnEsc = true; - _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_26__["KeyState"].Compose; - _this.tryToClosePopup = ___WEBPACK_IMPORTED_MODULE_21___default.a.debounce(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.tryToClosePopup, _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this)), Common_Enums__WEBPACK_IMPORTED_MODULE_26__["Magics"].Time200ms); - _this.emailsSource = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.emailsSource, _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this)); - _this.autosaveFunction = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_15___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, _this.autosaveFunction, _babel_runtime_corejs3_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_17___default()(_this)); + _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_24__["KeyState"].Compose; + _this.tryToClosePopup = ___WEBPACK_IMPORTED_MODULE_19___default.a.debounce(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.tryToClosePopup, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this)), Common_Enums__WEBPACK_IMPORTED_MODULE_24__["Magics"].Time200ms); + _this.emailsSource = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.emailsSource, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this)); + _this.autosaveFunction = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_13___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, _this.autosaveFunction, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"])(_this)); _this.iTimer = 0; return _this; } @@ -13000,10 +13006,10 @@ function (_AbstractViewNext) { var _proto = ComposePopupView.prototype; _proto.sendCommand = function sendCommand() { - var sTo = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(this.to()), - sCc = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(this.cc()), - sBcc = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(this.bcc()); - var sSentFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].sentFolder(); + var sTo = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(this.to()), + sCc = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(this.cc()), + sBcc = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(this.bcc()); + var sSentFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].sentFolder(); this.attachmentsInProcessError(false); this.attachmentsInErrorError(false); this.emptyToError(false); @@ -13021,24 +13027,24 @@ function (_AbstractViewNext) { } if (!this.emptyToError() && !this.attachmentsInErrorError() && !this.attachmentsInProcessError()) { - if (Stores_User_Settings__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].replySameFolder()) { - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isArray"])(this.aDraftInfo) && 3 === this.aDraftInfo.length && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isNormal"])(this.aDraftInfo[2]) && 0 < this.aDraftInfo[2].length) { + if (Stores_User_Settings__WEBPACK_IMPORTED_MODULE_34__[/* default */ "a"].replySameFolder()) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isArray"])(this.aDraftInfo) && 3 === this.aDraftInfo.length && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isNormal"])(this.aDraftInfo[2]) && 0 < this.aDraftInfo[2].length) { sSentFolder = this.aDraftInfo[2]; } } if (!this.allowFolders) { - sSentFolder = Common_Consts__WEBPACK_IMPORTED_MODULE_28__[/* UNUSED_OPTION_VALUE */ "r"]; + sSentFolder = Common_Consts__WEBPACK_IMPORTED_MODULE_26__[/* UNUSED_OPTION_VALUE */ "r"]; } if ('' === sSentFolder) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 267), [Common_Enums__WEBPACK_IMPORTED_MODULE_26__["SetSystemFoldersNotification"].Sent]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 274), [Common_Enums__WEBPACK_IMPORTED_MODULE_24__["SetSystemFoldersNotification"].Sent]); } else { this.sendError(false); this.sending(true); - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isArray"])(this.aDraftInfo) && 3 === this.aDraftInfo.length) { - var flagsCache = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_33__[/* getMessageFlagsFromCache */ "j"])(this.aDraftInfo[2], this.aDraftInfo[1]); + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isArray"])(this.aDraftInfo) && 3 === this.aDraftInfo.length) { + var flagsCache = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_31__[/* getMessageFlagsFromCache */ "j"])(this.aDraftInfo[2], this.aDraftInfo[1]); if (flagsCache) { if ('forward' === this.aDraftInfo[0]) { @@ -13047,16 +13053,16 @@ function (_AbstractViewNext) { flagsCache[2] = true; } - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_33__[/* setMessageFlagsToCache */ "t"])(this.aDraftInfo[2], this.aDraftInfo[1], flagsCache); - Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_47__[/* getApp */ "a"])().reloadFlagsCurrentMessageListAndMessageFromCache(); - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_33__[/* setFolderHash */ "q"])(this.aDraftInfo[2], ''); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_31__[/* setMessageFlagsToCache */ "t"])(this.aDraftInfo[2], this.aDraftInfo[1], flagsCache); + Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_45__[/* getApp */ "a"])().reloadFlagsCurrentMessageListAndMessageFromCache(); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_31__[/* setFolderHash */ "q"])(this.aDraftInfo[2], ''); } } - sSentFolder = Common_Consts__WEBPACK_IMPORTED_MODULE_28__[/* UNUSED_OPTION_VALUE */ "r"] === sSentFolder ? '' : sSentFolder; - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_33__[/* setFolderHash */ "q"])(this.draftFolder(), ''); - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_33__[/* setFolderHash */ "q"])(sSentFolder, ''); - Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_43__[/* default */ "a"].sendMessage(this.sendMessageResponse, this.currentIdentity() ? this.currentIdentity().id() : '', this.draftFolder(), this.draftUid(), sSentFolder, sTo, this.cc(), this.bcc(), this.replyTo(), this.subject(), this.oEditor ? this.oEditor.isHtml() : false, this.oEditor ? this.oEditor.getData(true) : '', this.prepearAttachmentsForSendOrSave(), this.aDraftInfo, this.sInReplyTo, this.sReferences, this.requestDsn(), this.requestReadReceipt(), this.markAsImportant()); + sSentFolder = Common_Consts__WEBPACK_IMPORTED_MODULE_26__[/* UNUSED_OPTION_VALUE */ "r"] === sSentFolder ? '' : sSentFolder; + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_31__[/* setFolderHash */ "q"])(this.draftFolder(), ''); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_31__[/* setFolderHash */ "q"])(sSentFolder, ''); + Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_41__[/* default */ "a"].sendMessage(this.sendMessageResponse, this.currentIdentity() ? this.currentIdentity().id() : '', this.draftFolder(), this.draftUid(), sSentFolder, sTo, this.cc(), this.bcc(), this.replyTo(), this.subject(), this.oEditor ? this.oEditor.isHtml() : false, this.oEditor ? this.oEditor.getData(true) : '', this.prepearAttachmentsForSendOrSave(), this.aDraftInfo, this.sInReplyTo, this.sReferences, this.requestDsn(), this.requestReadReceipt(), this.markAsImportant()); } } }; @@ -13066,14 +13072,14 @@ function (_AbstractViewNext) { return false; } - if (Stores_User_Folder__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].draftFolderNotEnabled()) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 267), [Common_Enums__WEBPACK_IMPORTED_MODULE_26__["SetSystemFoldersNotification"].Draft]); + if (Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].draftFolderNotEnabled()) { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 274), [Common_Enums__WEBPACK_IMPORTED_MODULE_24__["SetSystemFoldersNotification"].Draft]); } else { this.savedError(false); this.saving(true); this.autosaveStart(); - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_33__[/* setFolderHash */ "q"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].draftFolder(), ''); - Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_43__[/* default */ "a"].saveMessage(this.saveMessageResponse, this.currentIdentity() ? this.currentIdentity().id() : '', this.draftFolder(), this.draftUid(), Stores_User_Folder__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].draftFolder(), this.to(), this.cc(), this.bcc(), this.replyTo(), this.subject(), this.oEditor ? this.oEditor.isHtml() : false, this.oEditor ? this.oEditor.getData(true) : '', this.prepearAttachmentsForSendOrSave(), this.aDraftInfo, this.sInReplyTo, this.sReferences, this.markAsImportant()); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_31__[/* setFolderHash */ "q"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].draftFolder(), ''); + Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_41__[/* default */ "a"].saveMessage(this.saveMessageResponse, this.currentIdentity() ? this.currentIdentity().id() : '', this.draftFolder(), this.draftUid(), Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].draftFolder(), this.to(), this.cc(), this.bcc(), this.replyTo(), this.subject(), this.oEditor ? this.oEditor.isHtml() : false, this.oEditor ? this.oEditor.getData(true) : '', this.prepearAttachmentsForSendOrSave(), this.aDraftInfo, this.sInReplyTo, this.sReferences, this.markAsImportant()); } return true; @@ -13082,13 +13088,13 @@ function (_AbstractViewNext) { _proto.deleteCommand = function deleteCommand() { var _this2 = this; - var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 218); + var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 221); - if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["isPopupVisible"])(PopupsAskViewModel) && this.modalVisibility()) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(PopupsAskViewModel, [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["i18n"])('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'), function () { + if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["isPopupVisible"])(PopupsAskViewModel) && this.modalVisibility()) { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(PopupsAskViewModel, [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'), function () { if (_this2.modalVisibility()) { - Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_47__[/* getApp */ "a"])().deleteMessagesFromFolderWithoutCheck(_this2.draftFolder(), [_this2.draftUid()]); - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["hideScreenPopup"])(ComposePopupView); + Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_45__[/* getApp */ "a"])().deleteMessagesFromFolderWithoutCheck(_this2.draftFolder(), [_this2.draftUid()]); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["hideScreenPopup"])(ComposePopupView); } }]); } @@ -13097,7 +13103,7 @@ function (_AbstractViewNext) { _proto.skipCommand = function skipCommand() { this.bSkipNextHide = true; - if (this.modalVisibility() && !this.saving() && !this.sending() && !Stores_User_Folder__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].draftFolderNotEnabled() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].allowDraftAutosave()) { + if (this.modalVisibility() && !this.saving() && !this.sending() && !Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].draftFolderNotEnabled() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_34__[/* default */ "a"].allowDraftAutosave()) { this.saveCommand(); } @@ -13110,17 +13116,17 @@ function (_AbstractViewNext) { if (this.allowContacts) { this.skipCommand(); - ___WEBPACK_IMPORTED_MODULE_21___default.a.delay(function () { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Contacts */ 404), [true, _this3.sLastFocusedField]); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_26__["Magics"].Time200ms); + ___WEBPACK_IMPORTED_MODULE_19___default.a.delay(function () { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Contacts */ 408), [true, _this3.sLastFocusedField]); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_24__["Magics"].Time200ms); } }; _proto.dropboxCommand = function dropboxCommand() { var _this4 = this; - if (window__WEBPACK_IMPORTED_MODULE_20___default.a.Dropbox) { - window__WEBPACK_IMPORTED_MODULE_20___default.a.Dropbox.choose({ + if (window__WEBPACK_IMPORTED_MODULE_18___default.a.Dropbox) { + window__WEBPACK_IMPORTED_MODULE_18___default.a.Dropbox.choose({ success: function success(files) { if (files && files[0] && files[0].link) { _this4.addDropboxAttachment(files[0]); @@ -13140,7 +13146,7 @@ function (_AbstractViewNext) { }; _proto.autosaveFunction = function autosaveFunction() { - if (this.modalVisibility() && !Stores_User_Folder__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].draftFolderNotEnabled() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].allowDraftAutosave() && !this.isEmptyForm(false) && !this.saving() && !this.sending() && !this.savedError()) { + if (this.modalVisibility() && !Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].draftFolderNotEnabled() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_34__[/* default */ "a"].allowDraftAutosave() && !this.isEmptyForm(false) && !this.saving() && !this.sending() && !this.savedError()) { this.saveCommand(); } @@ -13148,17 +13154,17 @@ function (_AbstractViewNext) { }; _proto.autosaveStart = function autosaveStart() { - window__WEBPACK_IMPORTED_MODULE_20___default.a.clearTimeout(this.iTimer); - this.iTimer = window__WEBPACK_IMPORTED_MODULE_20___default.a.setTimeout(this.autosaveFunction, Common_Enums__WEBPACK_IMPORTED_MODULE_26__["Magics"].Time1m); + window__WEBPACK_IMPORTED_MODULE_18___default.a.clearTimeout(this.iTimer); + this.iTimer = window__WEBPACK_IMPORTED_MODULE_18___default.a.setTimeout(this.autosaveFunction, Common_Enums__WEBPACK_IMPORTED_MODULE_24__["Magics"].Time1m); }; _proto.autosaveStop = function autosaveStop() { - window__WEBPACK_IMPORTED_MODULE_20___default.a.clearTimeout(this.iTimer); + window__WEBPACK_IMPORTED_MODULE_18___default.a.clearTimeout(this.iTimer); }; _proto.emailsSource = function emailsSource(oData, fResponse) { - Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_47__[/* getApp */ "a"])().getAutocomplete(oData.term, function (aData) { - fResponse(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_14___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, aData, function (oEmailItem) { + Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_45__[/* getApp */ "a"])().getAutocomplete(oData.term, function (aData) { + fResponse(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_12___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, aData, function (oEmailItem) { return oEmailItem.toLine(false); })); }); @@ -13167,8 +13173,8 @@ function (_AbstractViewNext) { _proto.openOpenPgpPopup = function openOpenPgpPopup() { var _this5 = this; - if (Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_40__[/* default */ "a"].capaOpenPGP() && this.oEditor && !this.oEditor.isHtml()) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/ComposeOpenPgp */ 523), [function (result) { + if (Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].capaOpenPGP() && this.oEditor && !this.oEditor.isHtml()) { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/ComposeOpenPgp */ 526), [function (result) { _this5.editor(function (editor) { editor.setPlain(result); }); @@ -13177,15 +13183,15 @@ function (_AbstractViewNext) { }; _proto.reloadDraftFolder = function reloadDraftFolder() { - var draftFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].draftFolder(); + var draftFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].draftFolder(); - if ('' !== draftFolder && Common_Consts__WEBPACK_IMPORTED_MODULE_28__[/* UNUSED_OPTION_VALUE */ "r"] !== draftFolder) { - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_33__[/* setFolderHash */ "q"])(draftFolder, ''); + if ('' !== draftFolder && Common_Consts__WEBPACK_IMPORTED_MODULE_26__[/* UNUSED_OPTION_VALUE */ "r"] !== draftFolder) { + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_31__[/* setFolderHash */ "q"])(draftFolder, ''); - if (Stores_User_Folder__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].currentFolderFullNameRaw() === draftFolder) { - Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_47__[/* getApp */ "a"])().reloadMessageList(true); + if (Stores_User_Folder__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].currentFolderFullNameRaw() === draftFolder) { + Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_45__[/* getApp */ "a"])().reloadMessageList(true); } else { - Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_47__[/* getApp */ "a"])().folderInformation(draftFolder); + Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_45__[/* getApp */ "a"])().folderInformation(draftFolder); } } }; @@ -13194,7 +13200,7 @@ function (_AbstractViewNext) { var resultIndex = 1000, resultIdentity = null; - var identities = Stores_User_Identity__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].identities(), + var identities = Stores_User_Identity__WEBPACK_IMPORTED_MODULE_35__[/* default */ "a"].identities(), identitiesCache = {}, fEachHelper = function fEachHelper(item) { if (item && item.email && identitiesCache[item.email]) { @@ -13205,29 +13211,29 @@ function (_AbstractViewNext) { } }; - ___WEBPACK_IMPORTED_MODULE_21___default.a.each(identities, function (item, index) { + ___WEBPACK_IMPORTED_MODULE_19___default.a.each(identities, function (item, index) { identitiesCache[item.email()] = [item, index]; }); if (message) { switch (composeType) { - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Empty: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Empty: break; - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Reply: - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].ReplyAll: - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Forward: - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].ForwardAsAttachment: - ___WEBPACK_IMPORTED_MODULE_21___default.a.each(___WEBPACK_IMPORTED_MODULE_21___default.a.union(message.to, message.cc, message.bcc), fEachHelper); + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Reply: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].ReplyAll: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Forward: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].ForwardAsAttachment: + ___WEBPACK_IMPORTED_MODULE_19___default.a.each(___WEBPACK_IMPORTED_MODULE_19___default.a.union(message.to, message.cc, message.bcc), fEachHelper); if (!resultIdentity) { - ___WEBPACK_IMPORTED_MODULE_21___default.a.each(message.deliveredTo, fEachHelper); + ___WEBPACK_IMPORTED_MODULE_19___default.a.each(message.deliveredTo, fEachHelper); } break; - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Draft: - ___WEBPACK_IMPORTED_MODULE_21___default.a.each(___WEBPACK_IMPORTED_MODULE_21___default.a.union(message.from, message.replyTo), fEachHelper); + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Draft: + ___WEBPACK_IMPORTED_MODULE_19___default.a.each(___WEBPACK_IMPORTED_MODULE_19___default.a.union(message.from, message.replyTo), fEachHelper); break; // no default @@ -13249,22 +13255,22 @@ function (_AbstractViewNext) { message = ''; this.sending(false); - if (Common_Enums__WEBPACK_IMPORTED_MODULE_26__["StorageResultType"].Success === statusResult && data && data.Result) { + if (Common_Enums__WEBPACK_IMPORTED_MODULE_24__["StorageResultType"].Success === statusResult && data && data.Result) { result = true; if (this.modalVisibility()) { - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["delegateRun"])(this, 'closeCommand'); + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["delegateRun"])(this, 'closeCommand'); } } if (this.modalVisibility() && !result) { - if (data && Common_Enums__WEBPACK_IMPORTED_MODULE_26__["Notification"].CantSaveMessage === data.ErrorCode) { + if (data && Common_Enums__WEBPACK_IMPORTED_MODULE_24__["Notification"].CantSaveMessage === data.ErrorCode) { this.sendSuccessButSaveError(true); - this.savedErrorDesc(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["i18n"])('COMPOSE/SAVED_ERROR_ON_SEND'))); + this.savedErrorDesc(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('COMPOSE/SAVED_ERROR_ON_SEND'))); } else { - message = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["getNotification"])(data && data.ErrorCode ? data.ErrorCode : Common_Enums__WEBPACK_IMPORTED_MODULE_26__["Notification"].CantSendMessage, data && data.ErrorMessage ? data.ErrorMessage : ''); + message = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["getNotification"])(data && data.ErrorCode ? data.ErrorCode : Common_Enums__WEBPACK_IMPORTED_MODULE_24__["Notification"].CantSendMessage, data && data.ErrorMessage ? data.ErrorMessage : ''); this.sendError(true); - this.sendErrorDesc(message || Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_26__["Notification"].CantSendMessage)); + this.sendErrorDesc(message || Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_24__["Notification"].CantSendMessage)); } } @@ -13275,31 +13281,31 @@ function (_AbstractViewNext) { var result = false; this.saving(false); - if (Common_Enums__WEBPACK_IMPORTED_MODULE_26__["StorageResultType"].Success === statusResult && oData && oData.Result) { + if (Common_Enums__WEBPACK_IMPORTED_MODULE_24__["StorageResultType"].Success === statusResult && oData && oData.Result) { if (oData.Result.NewFolder && oData.Result.NewUid) { result = true; if (this.bFromDraft) { - var message = Stores_User_Message__WEBPACK_IMPORTED_MODULE_41__[/* default */ "a"].message(); + var message = Stores_User_Message__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].message(); if (message && this.draftFolder() === message.folderFullNameRaw && this.draftUid() === message.uid) { - Stores_User_Message__WEBPACK_IMPORTED_MODULE_41__[/* default */ "a"].message(null); + Stores_User_Message__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].message(null); } } this.draftFolder(oData.Result.NewFolder); this.draftUid(oData.Result.NewUid); - this.savedTime(window__WEBPACK_IMPORTED_MODULE_20___default.a.Math.round(new window__WEBPACK_IMPORTED_MODULE_20___default.a.Date().getTime() / 1000)); + this.savedTime(window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.round(new window__WEBPACK_IMPORTED_MODULE_18___default.a.Date().getTime() / 1000)); if (this.bFromDraft) { - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_33__[/* setFolderHash */ "q"])(this.draftFolder(), ''); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_31__[/* setFolderHash */ "q"])(this.draftFolder(), ''); } } } if (!result) { this.savedError(true); - this.savedErrorDesc(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_26__["Notification"].CantSaveMessage)); + this.savedErrorDesc(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_24__["Notification"].CantSaveMessage)); } this.reloadDraftFolder(); @@ -13309,13 +13315,13 @@ function (_AbstractViewNext) { this.autosaveStop(); if (!this.bSkipNextHide) { - Stores_User_App__WEBPACK_IMPORTED_MODULE_35__[/* default */ "a"].composeInEdit(false); + Stores_User_App__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].composeInEdit(false); this.reset(); } this.bSkipNextHide = false; this.to.focused(false); - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["routeOn"])(); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["routeOn"])(); }; _proto.editor = function editor(fOnInit) { @@ -13324,7 +13330,7 @@ function (_AbstractViewNext) { if (fOnInit) { if (!this.oEditor && this.composeEditorArea()) { // _.delay(() => { - this.oEditor = new Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_34__["HtmlEditor"](this.composeEditorArea(), null, function () { + this.oEditor = new Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_32__["HtmlEditor"](this.composeEditorArea(), null, function () { fOnInit(_this6.oEditor); _this6.resizerTrigger(); @@ -13349,7 +13355,7 @@ function (_AbstractViewNext) { if ('' !== fromLine) { signature = signature.replace(/{{FROM-FULL}}/g, fromLine); - if (-1 === _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(fromLine).call(fromLine, ' ') && 0 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(fromLine).call(fromLine, '@')) { + if (-1 === _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_11___default()(fromLine).call(fromLine, ' ') && 0 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_11___default()(fromLine).call(fromLine, '@')) { fromLine = fromLine.replace(/@[\S]+/, ''); } @@ -13361,15 +13367,15 @@ function (_AbstractViewNext) { signature = signature.replace(/{{FROM}}/g, ''); signature = signature.replace(/{{FROM-FULL}}/g, ''); - if (-1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(signature).call(signature, '{{DATE}}')) { - signature = signature.replace(/{{DATE}}/g, Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_32__["format"])(0, 'llll')); + if (-1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_11___default()(signature).call(signature, '{{DATE}}')) { + signature = signature.replace(/{{DATE}}/g, Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_30__["format"])(0, 'llll')); } - if (-1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(signature).call(signature, '{{TIME}}')) { - signature = signature.replace(/{{TIME}}/g, Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_32__["format"])(0, 'LT')); + if (-1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_11___default()(signature).call(signature, '{{TIME}}')) { + signature = signature.replace(/{{TIME}}/g, Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_30__["format"])(0, 'LT')); } - if (-1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(signature).call(signature, '{{MOMENT:')) { + if (-1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_11___default()(signature).call(signature, '{{MOMENT:')) { try { var match = null; @@ -13387,8 +13393,8 @@ function (_AbstractViewNext) { } if (moments && 0 < moments.length) { - ___WEBPACK_IMPORTED_MODULE_21___default.a.each(moments, function (data) { - signature = signature.replace(data[0], Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_32__["format"])(0, data[1])); + ___WEBPACK_IMPORTED_MODULE_19___default.a.each(moments, function (data) { + signature = signature.replace(data[0], Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_30__["format"])(0, data[1])); }); } @@ -13433,14 +13439,14 @@ function (_AbstractViewNext) { _proto.onShow = function onShow(type, oMessageOrArray, aToEmails, aCcEmails, aBccEmails, sCustomSubject, sCustomPlainText) { var _this8 = this; - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["routeOff"])(); + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["routeOff"])(); this.autosaveStart(); - if (Stores_User_App__WEBPACK_IMPORTED_MODULE_35__[/* default */ "a"].composeInEdit()) { - type = type || Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Empty; + if (Stores_User_App__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].composeInEdit()) { + type = type || Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Empty; - if (Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Empty !== type) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Ask */ 218), [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["i18n"])('COMPOSE/DISCARD_UNSAVED_DATA'), function () { + if (Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Empty !== type) { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_46__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Ask */ 221), [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('COMPOSE/DISCARD_UNSAVED_DATA'), function () { _this8.initOnShow(type, oMessageOrArray, aToEmails, aCcEmails, aBccEmails, sCustomSubject, sCustomPlainText); }, null, null, null, false]); } else { @@ -13448,7 +13454,7 @@ function (_AbstractViewNext) { this.addEmailsTo(this.cc, aCcEmails); this.addEmailsTo(this.bcc, aBccEmails); - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isNormal"])(sCustomSubject) && '' !== sCustomSubject && '' === this.subject()) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isNormal"])(sCustomSubject) && '' !== sCustomSubject && '' === this.subject()) { this.subject(sCustomSubject); } } @@ -13471,13 +13477,13 @@ function (_AbstractViewNext) { ; _proto.addEmailsTo = function addEmailsTo(fKoValue, emails) { - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isNonEmptyArray"])(emails)) { - var value = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(fKoValue()), - values = ___WEBPACK_IMPORTED_MODULE_21___default.a.uniq(___WEBPACK_IMPORTED_MODULE_21___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_14___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, emails, function (item) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isNonEmptyArray"])(emails)) { + var value = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(fKoValue()), + values = ___WEBPACK_IMPORTED_MODULE_19___default.a.uniq(___WEBPACK_IMPORTED_MODULE_19___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_12___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, emails, function (item) { return item ? item.toLine(false) : null; }))); - fKoValue(value + ('' === value ? '' : ', ') + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(values.join(', '))); + fKoValue(value + ('' === value ? '' : ', ') + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(values.join(', '))); } } /** @@ -13490,7 +13496,7 @@ function (_AbstractViewNext) { _proto.emailArrayToStringLineHelper = function emailArrayToStringLineHelper(aList, bFriendly) { bFriendly = !!bFriendly; - return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_14___default()(___WEBPACK_IMPORTED_MODULE_21___default.a).call(___WEBPACK_IMPORTED_MODULE_21___default.a, aList, function (item) { + return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_12___default()(___WEBPACK_IMPORTED_MODULE_19___default.a).call(___WEBPACK_IMPORTED_MODULE_19___default.a, aList, function (item) { return item.toLine(bFriendly); }).join(', '); } @@ -13508,7 +13514,7 @@ function (_AbstractViewNext) { _proto.initOnShow = function initOnShow(sType, oMessageOrArray, aToEmails, aCcEmails, aBccEmails, sCustomSubject, sCustomPlainText) { var _this9 = this; - Stores_User_App__WEBPACK_IMPORTED_MODULE_35__[/* default */ "a"].composeInEdit(true); + Stores_User_App__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].composeInEdit(true); var sFrom = '', sTo = '', sCc = '', @@ -13520,12 +13526,12 @@ function (_AbstractViewNext) { aDraftInfo = null, message = null; var excludeEmail = {}, - mEmail = Stores_User_Account__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].email(), - lineComposeType = sType || Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Empty; + mEmail = Stores_User_Account__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].email(), + lineComposeType = sType || Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Empty; oMessageOrArray = oMessageOrArray || null; - if (oMessageOrArray && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isNormal"])(oMessageOrArray)) { - message = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isArray"])(oMessageOrArray) && 1 === oMessageOrArray.length ? oMessageOrArray[0] : !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isArray"])(oMessageOrArray) ? oMessageOrArray : null; + if (oMessageOrArray && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isNormal"])(oMessageOrArray)) { + message = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isArray"])(oMessageOrArray) && 1 === oMessageOrArray.length ? oMessageOrArray[0] : !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isArray"])(oMessageOrArray) ? oMessageOrArray : null; } this.oLastMessage = message; @@ -13541,72 +13547,72 @@ function (_AbstractViewNext) { excludeEmail[identity.email()] = true; } - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isNonEmptyArray"])(aToEmails)) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isNonEmptyArray"])(aToEmails)) { this.to(this.emailArrayToStringLineHelper(aToEmails)); } - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isNonEmptyArray"])(aCcEmails)) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isNonEmptyArray"])(aCcEmails)) { this.cc(this.emailArrayToStringLineHelper(aCcEmails)); } - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isNonEmptyArray"])(aBccEmails)) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isNonEmptyArray"])(aBccEmails)) { this.bcc(this.emailArrayToStringLineHelper(aBccEmails)); } if ('' !== lineComposeType && message) { - sDate = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_32__["format"])(message.dateTimeStampInUTC(), 'FULL'); + sDate = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_30__["format"])(message.dateTimeStampInUTC(), 'FULL'); sSubject = message.subject(); aDraftInfo = message.aDraftInfo; - var clonedText = $__WEBPACK_IMPORTED_MODULE_22___default()(message.body).clone(); + var clonedText = $__WEBPACK_IMPORTED_MODULE_20___default()(message.body).clone(); if (clonedText) { - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["clearBqSwitcher"])(clonedText); + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["clearBqSwitcher"])(clonedText); sText = clonedText.html(); } var resplyAllParts = null; switch (lineComposeType) { - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Empty: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Empty: break; - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Reply: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Reply: this.to(this.emailArrayToStringLineHelper(message.replyEmails(excludeEmail))); - this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["replySubjectAdd"])('Re', sSubject)); + this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["replySubjectAdd"])('Re', sSubject)); this.prepearMessageAttachments(message, lineComposeType); this.aDraftInfo = ['reply', message.uid, message.folderFullNameRaw]; this.sInReplyTo = message.sMessageId; - this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(this.sInReplyTo + ' ' + message.sReferences); + this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(this.sInReplyTo + ' ' + message.sReferences); break; - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].ReplyAll: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].ReplyAll: resplyAllParts = message.replyAllEmails(excludeEmail); this.to(this.emailArrayToStringLineHelper(resplyAllParts[0])); this.cc(this.emailArrayToStringLineHelper(resplyAllParts[1])); - this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["replySubjectAdd"])('Re', sSubject)); + this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["replySubjectAdd"])('Re', sSubject)); this.prepearMessageAttachments(message, lineComposeType); this.aDraftInfo = ['reply', message.uid, message.folderFullNameRaw]; this.sInReplyTo = message.sMessageId; - this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(this.sInReplyTo + ' ' + message.references()); + this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(this.sInReplyTo + ' ' + message.references()); break; - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Forward: - this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["replySubjectAdd"])('Fwd', sSubject)); + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Forward: + this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["replySubjectAdd"])('Fwd', sSubject)); this.prepearMessageAttachments(message, lineComposeType); this.aDraftInfo = ['forward', message.uid, message.folderFullNameRaw]; this.sInReplyTo = message.sMessageId; - this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(this.sInReplyTo + ' ' + message.sReferences); + this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(this.sInReplyTo + ' ' + message.sReferences); break; - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].ForwardAsAttachment: - this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["replySubjectAdd"])('Fwd', sSubject)); + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].ForwardAsAttachment: + this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["replySubjectAdd"])('Fwd', sSubject)); this.prepearMessageAttachments(message, lineComposeType); this.aDraftInfo = ['forward', message.uid, message.folderFullNameRaw]; this.sInReplyTo = message.sMessageId; - this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(this.sInReplyTo + ' ' + message.sReferences); + this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(this.sInReplyTo + ' ' + message.sReferences); break; - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Draft: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Draft: this.to(this.emailArrayToStringLineHelper(message.to)); this.cc(this.emailArrayToStringLineHelper(message.cc)); this.bcc(this.emailArrayToStringLineHelper(message.bcc)); @@ -13616,19 +13622,19 @@ function (_AbstractViewNext) { this.draftUid(message.uid); this.subject(sSubject); this.prepearMessageAttachments(message, lineComposeType); - this.aDraftInfo = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isNonEmptyArray"])(aDraftInfo) && 3 === aDraftInfo.length ? aDraftInfo : null; + this.aDraftInfo = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isNonEmptyArray"])(aDraftInfo) && 3 === aDraftInfo.length ? aDraftInfo : null; this.sInReplyTo = message.sInReplyTo; this.sReferences = message.sReferences; break; - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].EditAsNew: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].EditAsNew: this.to(this.emailArrayToStringLineHelper(message.to)); this.cc(this.emailArrayToStringLineHelper(message.cc)); this.bcc(this.emailArrayToStringLineHelper(message.bcc)); this.replyTo(this.emailArrayToStringLineHelper(message.replyTo)); this.subject(sSubject); this.prepearMessageAttachments(message, lineComposeType); - this.aDraftInfo = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["isNonEmptyArray"])(aDraftInfo) && 3 === aDraftInfo.length ? aDraftInfo : null; + this.aDraftInfo = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["isNonEmptyArray"])(aDraftInfo) && 3 === aDraftInfo.length ? aDraftInfo : null; this.sInReplyTo = message.sInReplyTo; this.sReferences = message.sReferences; break; @@ -13636,24 +13642,24 @@ function (_AbstractViewNext) { } switch (lineComposeType) { - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Reply: - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].ReplyAll: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Reply: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].ReplyAll: sFrom = message.fromToLine(false, true); - sReplyTitle = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_31__["i18n"])('COMPOSE/REPLY_MESSAGE_TITLE', { + sReplyTitle = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_29__["i18n"])('COMPOSE/REPLY_MESSAGE_TITLE', { 'DATETIME': sDate, 'EMAIL': sFrom }); - sText = '
' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_27__["trim"])(sText) + ''; + sText = '
' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(sText) + ''; break; - case Common_Enums__WEBPACK_IMPORTED_MODULE_26__["ComposeType"].Forward: + case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Forward: sFrom = message.fromToLine(false, true); sTo = message.toToLine(false, true); sCc = message.ccToLine(false, true); - sText = '
]*><\/p>/gi,"");try{this.editor.setData(e)}catch(e){}t&&this.focus()}},t.replaceHtml=function(e,t){if(this.editor&&this.__inited&&"wysiwyg"===this.editor.mode)try{this.editor.setData(this.editor.getData().replace(e,t))}catch(e){}},t.setPlain=function(e,t){if(this.editor&&this.__inited){if(this.clearCachedSignature(),this.modeToggle(!1),"plain"===this.editor.mode&&this.editor.plugins.plain&&this.editor.__plain)this.editor.__plain.setRawData(e);else try{this.editor.setData(e)}catch(e){}t&&this.focus()}},t.init=function(){var o=this;if(this.element&&!this.editor){var e=function(){var e=p.htmlEditorDefaultConfig,t=g.settingsGet("Language"),n=!!g.appSettingsGet("allowHtmlEditorSourceButton"),i=!!g.appSettingsGet("allowHtmlEditorBitiButtons");!n&&i||e.toolbarGroups.__cfgInited||(e.toolbarGroups.__cfgInited=!0,n&&(e.removeButtons=e.removeButtons.replace(",Source","")),i||(e.removePlugins+=(e.removePlugins?",":"")+"bidi")),e.enterMode=s.a.CKEDITOR.ENTER_BR,e.shiftEnterMode=s.a.CKEDITOR.ENTER_P,e.language=p.htmlEditorLangsMap[(t||"en").toLowerCase()]||"en",s.a.CKEDITOR.env&&(s.a.CKEDITOR.env.isCompatible=!0),o.editor=s.a.CKEDITOR.appendTo(o.element,e),o.editor.on("key",function(e){return!e||!e.data||f.EventKeyCode.Tab!==e.data.keyCode}),o.editor.on("blur",function(){o.blurTrigger()}),o.editor.on("mode",function(){o.blurTrigger(),o.onModeChange&&o.onModeChange("plain"!==o.editor.mode)}),o.editor.on("focus",function(){o.focusTrigger()}),s.a.FileReader&&o.editor.on("drop",function(e){if(0 ]*><\/p>/gi,"").replace(/"},v=function(e,t,n,i,o,r){var a,s,c,u,l,d=e._o,p=n===d.minYear,f=n===d.maxYear,g=' =d.minYear&&c.push('");return l='i.maxDate||i.disableWeekends&&(0===(O=x.getDay())||6===O)||i.disableDayFn&&i.disableDayFn(x),isEmpty:N,isStartRange:k,isEndRange:L,isInRange:M,showDaysInNextAndPreviousMonths:i.showDaysInNextAndPreviousMonths,enableSelectionDaysInNextAndPreviousMonths:i.enableSelectionDaysInNextAndPreviousMonths};i.pickWholeWeek&&E&&(T=!0),c.push(q(F)),7==++_&&(i.showWeekNumber&&c.unshift((v=C-a,S=t,y=e,w=void 0,w=new Date(y,0,1),''+Math.ceil(((new Date(y,S,v)-w)/864e5+w.getDay()+1)/7)+" ")),s.push((m=c,b=i.isRTL,''+(b?m.reverse():m).join("")+" ")),_=0,T=!(c=[]))}return A=s,''+function(e){var t,n=[];for(e.showWeekNumber&&n.push("
"},isVisible:function(){return this._v},show:function(){this.isVisible()||(this._v=!0,this.draw(),g(this.el,"is-hidden"),this._o.bound&&(c(p,"click",this._onClick),this.adjustPosition()),"function"==typeof this._o.onOpen&&this._o.onOpen.call(this))},hide:function(){var e=this._v;!1!==e&&(this._o.bound&&i(p,"click",this._onClick),this.el.style.position="static",this.el.style.left="auto",this.el.style.top="auto",f(this.el,"is-hidden"),this._v=!1,void 0!==e&&"function"==typeof this._o.onClose&&this._o.onClose.call(this))},destroy:function(){var e=this._o;this.hide(),i(this.el,"mousedown",this._onMouseDown,!0),i(this.el,"touchend",this._onMouseDown,!0),i(this.el,"change",this._onChange),e.keyboardInput&&i(p,"keydown",this._onKeyChange),e.field&&(i(e.field,"change",this._onInputChange),e.bound&&(i(e.trigger,"click",this._onInputClick),i(e.trigger,"focus",this._onInputFocus),i(e.trigger,"blur",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}},S)}()},function(e,t){e.exports=window.Autolinker},function(e,t,n){"use strict";n.d(t,"a",function(){return i});var i={eml:"message/rfc822",mime:"message/rfc822",txt:"text/plain",text:"text/plain",def:"text/plain",list:"text/plain",in:"text/plain",ini:"text/plain",log:"text/plain",sql:"text/plain",cfg:"text/plain",conf:"text/plain",asc:"text/plain",rtx:"text/richtext",vcard:"text/vcard",vcf:"text/vcard",htm:"text/html",html:"text/html",csv:"text/csv",ics:"text/calendar",ifb:"text/calendar",xml:"text/xml",json:"application/json",swf:"application/x-shockwave-flash",hlp:"application/winhlp",wgt:"application/widget",chm:"application/vnd.ms-htmlhelp",p10:"application/pkcs10",p7c:"application/pkcs7-mime",p7m:"application/pkcs7-mime",p7s:"application/pkcs7-signature",torrent:"application/x-bittorrent",js:"application/javascript",pl:"text/perl",css:"text/css",asp:"text/asp",php:"application/x-httpd-php",php3:"application/x-httpd-php",php4:"application/x-httpd-php",php5:"application/x-httpd-php",phtml:"application/x-httpd-php",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",jpe:"image/jpeg",jfif:"image/jpeg",gif:"image/gif",bmp:"image/bmp",cgm:"image/cgm",ief:"image/ief",ico:"image/x-icon",tif:"image/tiff",tiff:"image/tiff",svg:"image/svg+xml",svgz:"image/svg+xml",djv:"image/vnd.djvu",djvu:"image/vnd.djvu",webp:"image/webp",zip:"application/zip","7z":"application/x-7z-compressed",rar:"application/x-rar-compressed",exe:"application/x-msdownload",dll:"application/x-msdownload",scr:"application/x-msdownload",com:"application/x-msdownload",bat:"application/x-msdownload",msi:"application/x-msdownload",cab:"application/vnd.ms-cab-compressed",gz:"application/x-gzip",tgz:"application/x-gzip",bz:"application/x-bzip",bz2:"application/x-bzip2",deb:"application/x-debian-package",psf:"application/x-font-linux-psf",otf:"application/x-font-otf",pcf:"application/x-font-pcf",snf:"application/x-font-snf",ttf:"application/x-font-ttf",ttc:"application/x-font-ttf",mp3:"audio/mpeg",amr:"audio/amr",aac:"audio/x-aac",aif:"audio/x-aiff",aifc:"audio/x-aiff",aiff:"audio/x-aiff",wav:"audio/x-wav",wma:"audio/x-ms-wma",wax:"audio/x-ms-wax",midi:"audio/midi",mp4a:"audio/mp4",ogg:"audio/ogg",weba:"audio/webm",ra:"audio/x-pn-realaudio",ram:"audio/x-pn-realaudio",rmp:"audio/x-pn-realaudio-plugin",m3u:"audio/x-mpegurl",flv:"video/x-flv",qt:"video/quicktime",mov:"video/quicktime",wmv:"video/windows-media",avi:"video/x-msvideo",mpg:"video/mpeg",mpeg:"video/mpeg",mpe:"video/mpeg",m1v:"video/mpeg",m2v:"video/mpeg","3gp":"video/3gpp","3g2":"video/3gpp2",h261:"video/h261",h263:"video/h263",h264:"video/h264",jpgv:"video/jpgv",mp4:"video/mp4",mp4v:"video/mp4",mpg4:"video/mp4",ogv:"video/ogg",webm:"video/webm",m4v:"video/x-m4v",asf:"video/x-ms-asf",asx:"video/x-ms-asf",wm:"video/x-ms-wm",wmx:"video/x-ms-wmx",wvx:"video/x-ms-wvx",movie:"video/x-sgi-movie",pdf:"application/pdf",psd:"image/vnd.adobe.photoshop",ai:"application/postscript",eps:"application/postscript",ps:"application/postscript",doc:"application/msword",dot:"application/msword",rtf:"application/rtf",xls:"application/vnd.ms-excel",ppt:"application/vnd.ms-powerpoint",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",dotx:"application/vnd.openxmlformats-officedocument.wordprocessingml.template",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation",odt:"application/vnd.oasis.opendocument.text",ods:"application/vnd.oasis.opendocument.spreadsheet"}},,function(e,t,n){var i=n(140),o=n(108);e.exports=Object.keys||function(e){return i(e,o)}},function(e,t,n){var i=n(32),o=n(149),r=n(52),a=i("unscopables"),s=Array.prototype;null==s[a]&&r.f(s,a,{configurable:!0,value:o(null)}),e.exports=function(e){s[a][e]=!0}},function(e,t,n){"use strict";var b=n(48),v=n(227),S=n(150),y=n(218),w=n(109),O=n(49),A=n(53),i=n(32),T=n(78),C=n(73),o=n(167),_=o.IteratorPrototype,x=o.BUGGY_SAFARI_ITERATORS,E=i("iterator"),j="values",D=function(){return this};e.exports=function(e,t,n,i,o,r,a){v(n,t,i);var s,c,u,l=function(e){if(e===o&&h)return h;if(!x&&e in f)return f[e];switch(e){case"keys":case j:case"entries":return function(){return new n(this,e)}}return function(){return new n(this)}},d=t+" Iterator",p=!1,f=e.prototype,g=f[E]||f["@@iterator"]||o&&f[o],h=!x&&g||l(o),m="Array"==t&&f.entries||g;if(m&&(s=S(m.call(new e)),_!==Object.prototype&&s.next&&(T||S(s)===_||(y?y(s,_):"function"!=typeof s[E]&&O(s,E,D)),w(s,d,!0,!0),T&&(C[d]=D))),o==j&&g&&g.name!==j&&(p=!0,h=function(){return g.call(this)}),T&&!a||f[E]===h||O(f,E,h),C[t]=h,o)if(c={values:l(j),keys:r?h:l("keys"),entries:l("entries")},a)for(u in c)!x&&!p&&u in f||A(f,u,c[u]);else b({target:t,proto:!0,forced:x||p},c);return c}},function(e,t,n){var o=n(37),r=n(229);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var n,i=!1,e={};try{(n=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(e,[]),i=e instanceof Array}catch(e){}return function(e,t){return o(e),r(t),i?n.call(e,t):e.__proto__=t,e}}():void 0)},function(e,t,n){n(220);var i=n(308),o=n(75),r=n(83),a=n(155),s=n(68)("toStringTag");for(var c in i){var u=o[c],l=u&&u.prototype;l&&!l[s]&&r(l,s,c),a[c]=a.Array}},function(e,t,n){"use strict";var i=n(94),o=n(239),r=n(155),a=n(292),s=n(296),c="Array Iterator",u=a.set,l=a.getterFor(c);e.exports=s(Array,"Array",function(e,t){u(this,{type:c,target:i(e),index:0,kind:t})},function(){var e=l(this),t=e.target,n=e.kind,i=e.index++;return!t||i>=t.length?{value:e.target=void 0,done:!0}:"keys"==n?{value:i,done:!1}:"values"==n?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}},"values"),r.Arguments=r.Array,o("keys"),o("values"),o("entries")},function(e,t,n){"use strict";n.r(t),n.d(t,"AskPopupView",function(){return f}),n.d(t,"default",function(){return f});var i,o=n(10),r=n(1),a=n(21),s=n.n(a),c=n(0),u=n(2),l=n(9),d=n(7),p=n(28),f=Object(d.popup)({name:"View/Popup/Ask",templateID:"PopupsAsk"})(i=function(t){function e(){var e;return(e=t.call(this)||this).askDesc=r.a.observable(""),e.yesButton=r.a.observable(""),e.noButton=r.a.observable(""),e.yesFocus=r.a.observable(!1),e.noFocus=r.a.observable(!1),e.fYesAction=null,e.fNoAction=null,e.bFocusYesOnShow=!0,e.bDisabeCloseOnEsc=!0,e.sDefaultKeyScope=c.KeyState.PopupAsk,e}Object(o.a)(e,t);var n=e.prototype;return n.clearPopup=function(){this.askDesc(""),this.yesButton(Object(l.i18n)("POPUPS_ASK/BUTTON_YES")),this.noButton(Object(l.i18n)("POPUPS_ASK/BUTTON_NO")),this.yesFocus(!1),this.noFocus(!1),this.fYesAction=null,this.fNoAction=null},n.yesClick=function(){this.cancelCommand(),Object(u.isFunc)(this.fYesAction)&&this.fYesAction.call(null)},n.noClick=function(){this.cancelCommand(),Object(u.isFunc)(this.fNoAction)&&this.fNoAction.call(null)},n.onShow=function(e,t,n,i,o,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===i&&(i=""),void 0===o&&(o=""),void 0===r&&(r=!0),this.clearPopup(),this.fYesAction=t||null,this.fNoAction=n||null,this.askDesc(e||""),i&&this.yesButton(i),o&&this.noButton(o),this.bFocusYesOnShow=!!r},n.onShowWithDelay=function(){this.bFocusYesOnShow&&this.yesFocus(!0)},n.onBuild=function(){var e=this;s()("tab, shift+tab, right, left",c.KeyState.PopupAsk,function(){return e.yesFocus()?e.noFocus(!0):e.yesFocus(!0),!1}),s()("esc",c.KeyState.PopupAsk,function(){return e.noClick(),!1})},e}(p.a))||i},,,function(e,t,n){var i=n(47),a=n(52),s=n(37),c=n(215);e.exports=i?Object.defineProperties:function(e,t){s(e);for(var n,i=c(t),o=i.length,r=0;r"),t=0;t<7;t++)n.push(' '+V(e,t,!0)+" ");return""+(e.isRTL?n.reverse():n).join("")+" "}(i)+""+A.join("")+"]*>([\s\S\r\n\t]*)<\/pre>/gim,function(){for(var e=arguments.length,t=new Array(e),n=0;n
').text(a)).html():h&&u.isPgpEncrypted()?w.$div.append(v()('').text(a)).html():"]*>/gim,"\n").replace(/<\/ul>/gi,"\n").replace(/
]*>/gim,"\n_______________________________\n\n").replace(/]*>/gim,"\n__bq__start__\n").replace(/<\/blockquote>/gim,"\n__bq__end__\n").replace(/]*>([\s\S\r\n]*?)<\/a>/gim,function(){for(var e=arguments.length,t=new Array(e),n=0;n
").replace(/\n/g,"
"),t?Pe(e):e}function De(e,t,n,i,o,a,r,s,c,l){var u=null,d=!1,p=0,f=0,h=[];for(l=!k(l)&&!!l,c=q(c)?c:0
").before("
"))})}},t.initOpenPgpControls=function(e,t){e&&m()(e)&&m()(e).call(e,".b-plain-openpgp:not(.inited)").each(function(){L.a.initMessageBodyControls(v()(this),t)})},t.setMessage=function(e,t){var n=!1,i=null,o="",a="",r="",s=!1,c=this.messagesBodiesDom(),l=this.selectorMessageSelected(),u=this.message();if(e&&u&&e.Result&&"Object/Message"===e.Result["@Object"]&&u.folderFullNameRaw===e.Result.Folder){var d=u.threads();if(u.uid!==e.Result.Uid&&1"+r+"
",w.$div.empty(),u.isPgpSigned(s),u.isPgpEncrypted(h)}else r=""+r+"
";else f=!1,r=""+r+"
";w.data.iMessageBodyCacheCount+=1,(i=v()('').hide().addClass("rl-cache-class")).data("rl-cache-count",w.data.iMessageBodyCacheCount),i.html(Object(S.findEmailAndLinks)(r)).addClass("b-text-part "+(f?"html":"plain")),u.isHtml(!!f),u.hasImages(!!e.Result.HasExternals),u.body=i,u.body&&c.append(u.body),u.storeDataInDom(),e.Result.HasInternals&&u.showInternalImages(!0),u.hasImages()&&P.a.showImages()&&u.showExternalImages(!0),this.purgeMessageBodyCacheThrottle()}this.messageActiveDom(u.body),this.hideMessageBodies(),i&&(this.initOpenPgpControls(i,u),this.initBlockquoteSwitcher(i)),u.body.show()}Object(O.n)(u),(u.unseen()||u.hasUnseenSubMessage())&&Object(M.a)().messageListAction(u.folderFullNameRaw,y.MessageSetAction.SetSeen,[u]),n&&(u=this.message(),l&&u&&(u.folderFullNameRaw!==l.folderFullNameRaw||u.uid!==l.uid)?(this.selectorMessageSelected(null),1===this.messageList().length&&this.selectorMessageFocused(null)):!l&&u&&(l=m()(g.a).call(g.a,this.messageList(),function(e){return e&&e.folderFullNameRaw===u.folderFullNameRaw&&e.uid===u.uid}))&&(this.selectorMessageSelected(l),this.selectorMessageFocused(l))),Object(S.windowResize)()}}},t.selectMessage=function(e){e?(this.message(this.staticMessage.populateByMessageListItem(e)),this.populateMessageBody(this.message())):this.message(null)},t.selectMessageByFolderAndUid=function(e,t){e&&t?(this.message(this.staticMessage.populateByMessageListItem(null)),this.message().folderFullNameRaw=e,this.message().uid=t,this.populateMessageBody(this.message())):this.message(null)},t.populateMessageBody=function(e){e&&D.a.message(this.onMessageResponse,e.folderFullNameRaw,e.uid)&&this.messageCurrentLoading(!0)},t.onMessageResponse=function(e,t,n){this.hideMessageBodies(),this.messageCurrentLoading(!1),y.StorageResultType.Success===e&&t&&t.Result?this.setMessage(t,n):y.StorageResultType.Unload===e?(this.message(null),this.messageError("")):y.StorageResultType.Abort!==e&&(this.message(null),this.messageError(t&&t.ErrorCode?Object(C.getNotification)(t.ErrorCode):Object(C.getNotification)(y.Notification.UnknownError)))},t.calculateMessageListHash=function(e){return h()(g.a).call(g.a,e,function(e){return e.hash+"_"+e.threadsLen()+"_"+e.flagHash()}).join("|")},t.setMessageList=function(e,n){if(e&&e.Result&&"Collection/MessageCollection"===e.Result["@Object"]&&e.Result["@Collection"]&&Object(S.isArray)(e.Result["@Collection"])){var i=0,t=!1,o=[],a=Object(A.momentNowUnix)(),r=Object(S.pInt)(e.Result.MessageResultCount),s=Object(S.pInt)(e.Result.Offset),c=Object(O.e)(Object(S.isNormal)(e.Result.Folder)?e.Result.Folder:"");c&&!n&&(c.interval=a,Object(O.q)(e.Result.Folder,e.Result.FolderHash),Object(S.isNormal)(e.Result.MessageCount)&&c.messageCountAll(e.Result.MessageCount),Object(S.isNormal)(e.Result.MessageUnseenCount)&&(Object(S.pInt)(c.messageCountUnread())!==Object(S.pInt)(e.Result.MessageUnseenCount)&&(t=!0),c.messageCountUnread(e.Result.MessageUnseenCount)),this.initUidNextAndNewMessages(c.fullNameRaw,e.Result.UidNext,e.Result.NewMessages)),t&&c&&Object(O.c)(c.fullNameRaw),g.a.each(e.Result["@Collection"],function(e){if(e&&"Object/Message"===e["@Object"]){var t=j.a.newInstanceFromJson(e);t&&(Object(O.l)(t.folderFullNameRaw,t.uid)&&i<=5&&(i+=1,t.newForAnimation(!0)),t.deleted(!1),n?Object(O.n)(t):Object(O.u)(t),o.push(t))}}),this.messageListCount(r),this.messageListSearch(Object(S.isNormal)(e.Result.Search)?e.Result.Search:""),this.messageListPage(l.a.Math.ceil(s/P.a.messagesPerPage()+1)),this.messageListThreadUid(Object(S.isNormal)(e.Result.ThreadUid)?Object(S.pString)(e.Result.ThreadUid):""),this.messageListEndFolder(Object(S.isNormal)(e.Result.Folder)?e.Result.Folder:""),this.messageListEndSearch(this.messageListSearch()),this.messageListEndThreadUid(this.messageListThreadUid()),this.messageListEndPage(this.messageListPage()),this.messageListDisableAutoSelect(!0),this.messageList(o),this.messageListIsNotCompleted(!1),Object(O.d)(),c&&(n||t||P.a.useThreads())&&Object(M.a)().folderInformation(c.fullNameRaw,o)}else this.messageListCount(0),this.messageList([]),this.messageListError(Object(C.getNotification)(e&&e.ErrorCode?e.ErrorCode:y.Notification.CantGetMessageList))},e}();t.a=new k},function(e,t,n){"use strict";n.d(t,"k",function(){return S}),n.d(t,"b",function(){return w}),n.d(t,"m",function(){return T}),n.d(t,"a",function(){return C}),n.d(t,"l",function(){return A}),n.d(t,"d",function(){return E}),n.d(t,"h",function(){return j}),n.d(t,"f",function(){return F}),n.d(t,"p",function(){return R}),n.d(t,"g",function(){return N}),n.d(t,"q",function(){return I}),n.d(t,"i",function(){return L}),n.d(t,"s",function(){return P}),n.d(t,"e",function(){return _}),n.d(t,"r",function(){return M}),n.d(t,"o",function(){return D}),n.d(t,"j",function(){return k}),n.d(t,"t",function(){return x}),n.d(t,"c",function(){return U}),n.d(t,"n",function(){return H}),n.d(t,"u",function(){return G}),n.d(t,"v",function(){return B}),n.d(t,"w",function(){return V});var i=n(12),a=n.n(i),o=n(3),r=n.n(o),s=n(0),c=n(2),l=n(15),u=n(5),d={},p={},f={},h={},m={},b={},g="",v={},y=u.capa(s.Capa.Gravatar);function S(e,t){e=Object(c.trim)(e),t(y&&""!==e?l.h(e):"",e)}function O(e,t){return e+"#"+t}function w(e,t){v[O(e,t)]=!0}function T(e,t){return!0===v[O(e,t)]}function C(e,t){b[O(e,t)]=!0}function A(e,t){return!!b[O(e,t)]&&!(b[O(e,t)]=null)}function E(){b={}}function j(){return""===g?"INBOX":g}function F(e){return""!==e&&p[e]?p[e]:""}function R(e,t){"INBOX"!==(p[e]=t)&&""!==g||(g=t)}function N(e){return""!==e&&f[e]?f[e]:""}function I(e,t){""!==e&&(f[e]=t)}function L(e){return""!==e&&h[e]?h[e]:""}function P(e,t){h[e]=t}function _(e){return""!==e&&d[e]?d[e]:null}function M(e,t){d[e]=t}function D(e){M(e,null)}function k(e,t){return m[e]&&m[e][t]?m[e][t]:null}function x(e,t,n){m[e]||(m[e]={}),m[e][t]=n}function U(e){m[e]={}}function H(n){if(n){var i=n.uid,e=k(n.folderFullNameRaw,i);if(e&&0
"+Object(H.trim)(f)+"";break;case U.ComposeType.Forward:c=g.fromToLine(!1,!0),l=g.toToLine(!1,!0),u=g.ccToLine(!1,!0),f="