Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /proc/thread-self/root/usr/share/jj/static/js/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : //proc/thread-self/root/usr/share/jj/static/js/admin.js

/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
/******/ (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 = 561);
/******/ })
/************************************************************************/
/******/ ([
/* 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_string_link_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.string.link.js */ 204);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ 119);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__ = __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_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-interval */ 57);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 153);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var Opentip__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Opentip */ 228);
/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! pikaday */ 229);
/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(pikaday__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Enums */ 0);















var ko = window__WEBPACK_IMPORTED_MODULE_8___default.a.ko,
    $win = $__WEBPACK_IMPORTED_MODULE_10___default()(window__WEBPACK_IMPORTED_MODULE_8___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_10___default()(element),
        fValue = fValueAccessor(),
        fInit = function fInit() {
      fValue($el.width());

      _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default()(function () {
        fValue($el.width());
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["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 */ 226).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_10___default()(element).text(window__WEBPACK_IMPORTED_MODULE_8___default.a.JSON.stringify(ko.unwrap(fValueAccessor())));
  },
  update: function update(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(window__WEBPACK_IMPORTED_MODULE_8___default.a.JSON.stringify(ko.unwrap(fValueAccessor())));
  }
};
ko.bindingHandlers.scrollerShadows = {
  init: function init(element) {
    var limit = 8,
        $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        cont = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()($el).call($el, '[data-scroller-shadows-content]')[0] || null,
        fFunc = ___WEBPACK_IMPORTED_MODULE_9___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_10___default()(cont).on('scroll resize', fFunc);
      $win.on('resize', fFunc);
      ko.utils.domNodeDisposal.addDisposeCallback(cont, function () {
        $__WEBPACK_IMPORTED_MODULE_10___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_12___default.a) {
      element.__pikaday = new pikaday__WEBPACK_IMPORTED_MODULE_12___default.a({
        field: element
      });
    }
  }
};
ko.bindingHandlers.visibleAnimated = {
  init: function init(element, fValueAccessor) {
    var $el = $__WEBPACK_IMPORTED_MODULE_10___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_10___default()(element);

    if (ko.unwrap(fValueAccessor())) {
      $el.addClass('rl-animated-hidden').show();

      ___WEBPACK_IMPORTED_MODULE_9___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_10___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_9___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue);
      element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_11__[/* 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_10___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_9___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_10___default()(element);
    element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"](element, {
      style: 'rainloopErrorTip',
      hideOn: 'mouseout click',
      element: element,
      tipJoint: $el.data('tooltip-join') || 'top'
    });

    element.__opentip.deactivate();

    $__WEBPACK_IMPORTED_MODULE_10___default()(window__WEBPACK_IMPORTED_MODULE_8___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_10___default()(element),
        fValue = fValueAccessor(),
        value = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_9___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_9___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_13__["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_10___default()(element));
      $__WEBPACK_IMPORTED_MODULE_10___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_10___default()(element);

      if (!$el.hasClass('open')) {
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()($el).call($el, '.dropdown-toggle').dropdown('toggle');
      }

      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___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_10___default()(element).closest('.dropdown').on('click', '.e-item', function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).dropdown('toggle');
    });
  }
};
ko.bindingHandlers.popover = {
  init: function init(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).popover(ko.unwrap(fValueAccessor()));
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___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_10___default()(element).text(ko.unwrap(fValueAccessor()));
  }
};

ko.bindingHandlers.resizecrop = {
  init: function init(element) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('resizecrop').resizecrop({
      'width': '100',
      'height': '100',
      'wrapperCSS': {
        'border-radius': '10px'
      }
    });
  },
  update: function update(element, fValueAccessor) {
    fValueAccessor()();
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).resizecrop({
      'width': '100',
      'height': '100'
    });
  }
};
ko.bindingHandlers.onKeyDown = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) {
    $__WEBPACK_IMPORTED_MODULE_10___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_10___default()(element).off('keydown.koOnKeyDown');
    });
  }
};
ko.bindingHandlers.onEnter = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keypress.koOnEnter', function (event) {
      if (event && 13 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) {
        $__WEBPACK_IMPORTED_MODULE_10___default()(element).trigger('change');
        fValueAccessor().call(viewModel);
      }
    });
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keypress.koOnEnter');
    });
  }
};
ko.bindingHandlers.onSpace = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keyup.koOnSpace', function (event) {
      if (event && 32 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) {
        fValueAccessor().call(viewModel, event);
      }
    });
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keyup.koOnSpace');
    });
  }
};
ko.bindingHandlers.onTab = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keydown.koOnTab', function (event) {
      if (event && 9 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) {
        return fValueAccessor().call(viewModel, !!event.shiftKey);
      }

      return true;
    });
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keydown.koOnTab');
    });
  }
};
ko.bindingHandlers.onEsc = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keyup.koOnEsc', function (event) {
      if (event && 27 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) {
        $__WEBPACK_IMPORTED_MODULE_10___default()(element).trigger('change');
        fValueAccessor().call(viewModel);
      }
    });
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keyup.koOnEsc');
    });
  }
};
ko.bindingHandlers.clickOnTrue = {
  update: function update(element, fValueAccessor) {
    if (ko.unwrap(fValueAccessor())) {
      $__WEBPACK_IMPORTED_MODULE_10___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_4___default()(_context = $__WEBPACK_IMPORTED_MODULE_10___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_4___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_10___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_10___default()(element).modal(ko.unwrap(fValueAccessor()) ? 'show' : 'hide');

    if (Globals.$html.hasClass('rl-anim')) {
      Globals.$html.addClass('rl-modal-animation');

      ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () {
        Globals.$html.removeClass('rl-modal-animation');
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].Time500ms);
    }
  }
};
ko.bindingHandlers.moment = {
  init: function init(element, fValueAccessor) {
    __webpack_require__(/*! Common/Momentor */ 61).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('moment').data('moment-time', ko.unwrap(fValueAccessor())));
  },
  update: function update(element, fValueAccessor) {
    __webpack_require__(/*! Common/Momentor */ 61).momentToNode($__WEBPACK_IMPORTED_MODULE_10___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_10___default()(element).attr('href', ko.unwrap(fValueAccessor()));
  }
};
ko.bindingHandlers.title = {
  update: function update(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).attr('title', ko.unwrap(fValueAccessor()));
  }
};
ko.bindingHandlers.textF = {
  init: function init(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___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_10___default()(element),
        top = values[1] || 0;
    var $container = $__WEBPACK_IMPORTED_MODULE_10___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_10___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_10___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_10___default()(oElement).css({
        'height': value,
        'min-height': value
      });
    }
  }
};
ko.bindingHandlers.appendDom = {
  update: function update(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___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_10___default()(droppableSelector).each(function () {
            var $this = $__WEBPACK_IMPORTED_MODULE_10___default()(this),
                // eslint-disable-line no-invalid-this
            offset = $this.offset(),
                bottomPos = offset.top + $this.height();
            window__WEBPACK_IMPORTED_MODULE_8___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', _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(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', _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(moveDown, 10));
                moveDown();
              }
            }
          });
        };

        conf.stop = function () {
          $__WEBPACK_IMPORTED_MODULE_10___default()(droppableSelector).each(function () {
            var $this = $__WEBPACK_IMPORTED_MODULE_10___default()(this); // eslint-disable-line no-invalid-this

            window__WEBPACK_IMPORTED_MODULE_8___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_10___default()(element).draggable(conf).on('mousedown.koDraggable', function () {
        Utils.removeInFocus();
      });
      ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
        $__WEBPACK_IMPORTED_MODULE_10___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_10___default()(element).droppable(conf);
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
          $__WEBPACK_IMPORTED_MODULE_10___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_10___default()(element).addClass('nano').nanoScroller({
        iOSNativeScrolling: false,
        preventPageScrolling: true
      });
    }
  }
};
ko.bindingHandlers.saveTrigger = {
  init: function init(element) {
    var $el = $__WEBPACK_IMPORTED_MODULE_10___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('&nbsp;&nbsp;' + '<i class="icon-spinner animated"></i>' + '<i class="icon-remove error"></i>' + '<i class="icon-ok success"></i>').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_10___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_4___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___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_4___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___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_4___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___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_4___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___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 */ 82).default,
        $el = $__WEBPACK_IMPORTED_MODULE_10___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_6___default()(Utils).call(Utils, value);

        if (v && -1 < inputDelimiters.indexOf(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_7___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, ___WEBPACK_IMPORTED_MODULE_9___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, input, function (inputValue) {
          var values = EmailModel.parseEmailLine(inputValue);
          return values.length ? values : inputValue;
        })), function (item) {
          return ___WEBPACK_IMPORTED_MODULE_9___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_10___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_10___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_9___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_10___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_6___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_8___default.a.clearTimeout(target.iFalseTimeoutTimeout);
      target.iFalseTimeoutTimeout = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default()(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_8___default.a.clearTimeout(target.iSpecialThrottleTimeout);
            target.iSpecialThrottleTimeout = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default()(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_13__["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_9___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_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ 119);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ 203);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.match.js */ 224);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.link.js */ 204);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 153);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11__ = __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_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__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 */ 175);
/* 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_values__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 122);
/* 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_reduce__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 227);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_16__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_17__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Autolinker */ 230);
/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(Autolinker__WEBPACK_IMPORTED_MODULE_19__);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Common/Mime */ 231);
/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Common/Jassl */ 121);
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "jassl", function() { return Common_Jassl__WEBPACK_IMPORTED_MODULE_23__["a"]; });


























var trim = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_9___default()($__WEBPACK_IMPORTED_MODULE_16___default.a);

var inArray = $__WEBPACK_IMPORTED_MODULE_16___default.a.inArray;
var isArray = ___WEBPACK_IMPORTED_MODULE_17___default.a.isArray;
var isObject = ___WEBPACK_IMPORTED_MODULE_17___default.a.isObject;
var isFunc = ___WEBPACK_IMPORTED_MODULE_17___default.a.isFunction;
var isUnd = ___WEBPACK_IMPORTED_MODULE_17___default.a.isUndefined;
var isNull = ___WEBPACK_IMPORTED_MODULE_17___default.a.isNull;
var has = ___WEBPACK_IMPORTED_MODULE_17___default.a.has;
var bind = ___WEBPACK_IMPORTED_MODULE_17___default.a.bind;

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_15___default.a.parseInt(value, 10) : defaultValur;
  return window__WEBPACK_IMPORTED_MODULE_15___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_15___default.a.encodeURIComponent(component);
}
/**
 * @param {string} component
 * @returns {string}
 */

function decodeURIComponent(component) {
  return window__WEBPACK_IMPORTED_MODULE_15___default.a.decodeURIComponent(component);
}
/**
 * @param {string} url
 * @returns {string}
 */

function decodeURI(url) {
  return window__WEBPACK_IMPORTED_MODULE_15___default.a.decodeURI(url);
}
/**
 * @param {string} url
 * @returns {string}
 */

function encodeURI(url) {
  return window__WEBPACK_IMPORTED_MODULE_15___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_15___default.a.Math.round(window__WEBPACK_IMPORTED_MODULE_15___default.a.Math.random() * lineLen), 1);
  }

  return result;
}
/**
 * @param {string} text
 * @returns {string}
 */

function encodeHtml(text) {
  return isNormal(text) ? ___WEBPACK_IMPORTED_MODULE_17___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 = subText.lastIndexOf(' ');
    newLinePos = subText.lastIndexOf('\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_15___default.a.clearTimeout(timeOuts[action]);
    timeOuts[action] = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(fFunction, timeOut);
  };
}();

var timeOutActionSecond = function () {
  var timeOuts = {};
  return function (action, fFunction, timeOut) {
    if (!timeOuts[action]) {
      timeOuts[action] = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(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_15___default.a.document.activeElement) {
      if (isUnd(window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.__inFocusCache)) {
        window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.__inFocusCache = $__WEBPACK_IMPORTED_MODULE_16___default()(window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement).is('input,textarea,iframe,.cke_editable');
      }

      return !!window__WEBPACK_IMPORTED_MODULE_15___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_15___default.a.document && window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement && window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.blur) {
    try {
      var activeEl = $__WEBPACK_IMPORTED_MODULE_16___default()(window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement);

      if (activeEl && activeEl.is('input,textarea')) {
        window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.blur();
      } else if (force) {
        window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.blur();
      }
    } catch (e) {} // eslint-disable-line no-empty

  }
}
/**
 * @returns {void}
 */

function removeSelection() {
  try {
    if (window__WEBPACK_IMPORTED_MODULE_15___default.a && window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection) {
      var sel = window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection();

      if (sel && sel.removeAllRanges) {
        sel.removeAllRanges();
      }
    } else if (window__WEBPACK_IMPORTED_MODULE_15___default.a.document && window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection.empty) {
      window__WEBPACK_IMPORTED_MODULE_15___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_17___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_15___default.a.Math.round(num * window__WEBPACK_IMPORTED_MODULE_15___default.a.Math.pow(10, dec)) / window__WEBPACK_IMPORTED_MODULE_15___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_15___default.a.console && window__WEBPACK_IMPORTED_MODULE_15___default.a.console.log) {
    window__WEBPACK_IMPORTED_MODULE_15___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_17___default.a.delay(function () {
        object[methodName].apply(object, params);
      }, delay);
    }
  }
}
/**
 * @param {?} event
 */

function killCtrlACtrlS(event) {
  event = event || window__WEBPACK_IMPORTED_MODULE_15___default.a.event;

  if (event && event.ctrlKey && !event.shiftKey && !event.altKey) {
    var key = event.keyCode || event.which;

    if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_21__["EventKeyCode"].S) {
      event.preventDefault();
      return;
    } else if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_21__["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_15___default.a.getSelection) {
        window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection().removeAllRanges();
      } else if (window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection.clear) {
        window__WEBPACK_IMPORTED_MODULE_15___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_18__[/* default */ "a"].observable(true);
  fResult.isCommand = true;

  if (isFunc(fCanExecute)) {
    fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"].computed(function () {
      return fResult && fResult.enabled() && fCanExecute.call(context);
    });
  } else {
    fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"].computed(function () {
      return fResult && fResult.enabled() && !!fCanExecute;
    });
  }

  return fResult;
}
/**
 * @param {string} theme
 * @returns {string}
 */

var convertThemeName = ___WEBPACK_IMPORTED_MODULE_17___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_15___default.a.Date().getTime();
}
/**
 * @returns {number}
 */

function timestamp() {
  return window__WEBPACK_IMPORTED_MODULE_15___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_16___default()('<div class="draggablePlace">' + '<span class="text"></span>&nbsp;' + '<i class="icon-copy icon-white visible-on-ctrl"></i>' + '<i class="icon-mail icon-white hidden-on-ctrl"></i>' + '</div>').appendTo('#rl-hidden');
}
/**
 * @param {object} domOption
 * @param {object} item
 * @returns {void}
 */

function defautOptionsAfterRender(domItem, item) {
  if (item && !isUnd(item.disabled) && domItem) {
    $__WEBPACK_IMPORTED_MODULE_16___default()(domItem).toggleClass('disabled', item.disabled).prop('disabled', item.disabled);
  }
}
/**
 * @param {string} title
 * @param {Object} body
 * @param {boolean} isHtml
 * @param {boolean} print
 */

function clearBqSwitcher(body) {
  _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11___default()(body).call(body, 'blockquote.rl-bq-switcher').removeClass('rl-bq-switcher hidden-bq');

  _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11___default()(body).call(body, '.rlBlockquoteSwitcher').off('.rlBlockquoteSwitcher').remove();

  _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11___default()(body).call(body, '[data-html-editor-font-wrapper]').removeAttr('data-html-editor-font-wrapper');
}
/**
 * @param {object} messageData
 * @param {Object} body
 * @param {boolean} isHtml
 * @param {boolean} print
 * @returns {void}
 */

function previewMessage(_ref, body, isHtml, print) {
  var title = _ref.title,
      subject = _ref.subject,
      date = _ref.date,
      fromCreds = _ref.fromCreds,
      toCreds = _ref.toCreds,
      toLabel = _ref.toLabel,
      ccClass = _ref.ccClass,
      ccCreds = _ref.ccCreds,
      ccLabel = _ref.ccLabel;
  var win = window__WEBPACK_IMPORTED_MODULE_15___default.a.open(''),
      doc = win.document,
      bodyClone = body.clone(),
      bodyClass = isHtml ? 'html' : 'plain';
  clearBqSwitcher(bodyClone);
  var html = bodyClone ? bodyClone.html() : '';
  doc.write(deModule(__webpack_require__(/*! Html/PreviewMessage.html */ 357)).replace('{{title}}', encodeHtml(title)).replace('{{subject}}', encodeHtml(subject)).replace('{{date}}', encodeHtml(date)).replace('{{fromCreds}}', encodeHtml(fromCreds)).replace('{{toCreds}}', encodeHtml(toCreds)).replace('{{toLabel}}', encodeHtml(toLabel)).replace('{{ccClass}}', encodeHtml(ccClass)).replace('{{ccCreds}}', encodeHtml(ccCreds)).replace('{{ccLabel}}', encodeHtml(ccLabel)).replace('{{bodyClass}}', bodyClass).replace('{{html}}', html));
  doc.close();

  if (print) {
    _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(function () {
      return win.print();
    }, 100);
  }
}
/**
 * @param {Function} fCallback
 * @param {?} koTrigger
 * @param {?} context = null
 * @param {number=} timer = 1000
 * @returns {Function}
 */

function settingsSaveHelperFunction(fCallback, koTrigger, context, timer) {
  if (context === void 0) {
    context = null;
  }

  if (timer === void 0) {
    timer = 1000;
  }

  timer = pInt(timer);
  return function (type, data, cached, requestAction, requestParameters) {
    koTrigger.call(context, data && data.Result ? Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].TrueResult : Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].FalseResult);

    if (fCallback) {
      fCallback.call(context, type, data, cached, requestAction, requestParameters);
    }

    ___WEBPACK_IMPORTED_MODULE_17___default.a.delay(function () {
      koTrigger.call(context, Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].Idle);
    }, timer);
  };
}
/**
 * @param {object} koTrigger
 * @param {mixed} context
 * @returns {mixed}
 */

function settingsSaveHelperSimpleFunction(koTrigger, context) {
  return settingsSaveHelperFunction(null, koTrigger, context, 1000);
}
/**
 * @param {object} remote
 * @param {string} settingName
 * @param {string} type
 * @param {function} fTriggerFunction
 * @returns {function}
 */

function settingsSaveHelperSubscribeFunction(remote, settingName, type, fTriggerFunction) {
  return function (value) {
    if (remote) {
      switch (type) {
        case 'bool':
        case 'boolean':
          value = value ? '1' : '0';
          break;

        case 'int':
        case 'integer':
        case 'number':
          value = pInt(value);
          break;

        case 'trim':
          value = trim(value);
          break;

        default:
          value = pString(value);
          break;
      }

      var data = {};
      data[settingName] = value;

      if (remote.saveAdminConfig) {
        remote.saveAdminConfig(fTriggerFunction || null, data);
      } else if (remote.saveSettings) {
        remote.saveSettings(fTriggerFunction || null, data);
      }
    }
  };
}
/**
 * @param {string} html
 * @returns {string}
 */

function findEmailAndLinks(html) {
  return Autolinker__WEBPACK_IMPORTED_MODULE_19___default.a ? Autolinker__WEBPACK_IMPORTED_MODULE_19___default.a.link(html, {
    newWindow: true,
    stripPrefix: false,
    urls: true,
    email: true,
    mention: false,
    phone: false,
    hashtag: false,
    replaceFn: function replaceFn(match) {
      return !(match && 'url' === match.getType() && match.matchedText && 0 !== match.matchedText.indexOf('http'));
    }
  }) : html;
}
/**
 * @param {string} html
 * @returns {string}
 */

function htmlToPlain(html) {
  var pos = 0,
      limit = 0,
      iP1 = 0,
      iP2 = 0,
      iP3 = 0,
      text = '';

  var convertBlockquote = function convertBlockquote(blockquoteText) {
    blockquoteText = '> ' + trim(blockquoteText).replace(/\n/gm, '\n> ');
    return blockquoteText.replace(/(^|\n)([> ]+)/gm, function () {
      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
        args[_key2] = arguments[_key2];
      }

      return args && 2 < args.length ? args[1] + trim(args[2].replace(/[\s]/g, '')) + ' ' : '';
    });
  };

  var convertDivs = function convertDivs() {
    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
      args[_key3] = arguments[_key3];
    }

    if (args && 1 < args.length) {
      var divText = trim(args[1]);

      if (0 < divText.length) {
        divText = divText.replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gim, convertDivs);
        divText = '\n' + trim(divText) + '\n';
      }

      return divText;
    }

    return '';
  };

  var convertPre = function convertPre() {
    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
      args[_key4] = arguments[_key4];
    }

    return args && 1 < args.length ? args[1].toString().replace(/[\n]/gm, '<br />').replace(/[\r]/gm, '') : '';
  },
      fixAttibuteValue = function fixAttibuteValue() {
    for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
      args[_key5] = arguments[_key5];
    }

    return args && 1 < args.length ? '' + args[1] + ___WEBPACK_IMPORTED_MODULE_17___default.a.escape(args[2]) : '';
  },
      convertLinks = function convertLinks() {
    for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
      args[_key6] = arguments[_key6];
    }

    return args && 1 < args.length ? trim(args[1]) : '';
  };

  text = html.replace(/<p[^>]*><\/p>/gi, '').replace(/<pre[^>]*>([\s\S\r\n\t]*)<\/pre>/gim, convertPre).replace(/[\s]+/gm, ' ').replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gim, fixAttibuteValue).replace(/<br[^>]*>/gim, '\n').replace(/<\/h[\d]>/gi, '\n').replace(/<\/p>/gi, '\n\n').replace(/<ul[^>]*>/gim, '\n').replace(/<\/ul>/gi, '\n').replace(/<li[^>]*>/gim, ' * ').replace(/<\/li>/gi, '\n').replace(/<\/td>/gi, '\n').replace(/<\/tr>/gi, '\n').replace(/<hr[^>]*>/gim, '\n_______________________________\n\n').replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gim, convertDivs).replace(/<blockquote[^>]*>/gim, '\n__bq__start__\n').replace(/<\/blockquote>/gim, '\n__bq__end__\n').replace(/<a [^>]*>([\s\S\r\n]*?)<\/a>/gim, convertLinks).replace(/<\/div>/gi, '\n').replace(/&nbsp;/gi, ' ').replace(/&quot;/gi, '"').replace(/<[^>]*>/gm, '');
  text = Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$div"].html(text).text();
  text = text.replace(/\n[ \t]+/gm, '\n').replace(/[\n]{3,}/gm, '\n\n').replace(/&gt;/gi, '>').replace(/&lt;/gi, '<').replace(/&amp;/gi, '&');
  text = splitPlainText(text);
  pos = 0;
  limit = 800;

  while (0 < limit) {
    limit -= 1;
    iP1 = text.indexOf('__bq__start__', pos);

    if (-1 < iP1) {
      iP2 = text.indexOf('__bq__start__', iP1 + 5);
      iP3 = text.indexOf('__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, '&amp;').replace(/>/g, '&gt;').replace(/</g, '&lt;').replace(/~~~blockquote~~~[\s]*/g, '<blockquote>').replace(/[\s]*~~~\/blockquote~~~/g, '</blockquote>').replace(/\n/g, '<br />');
  return findEmailAndLinksInText ? findEmailAndLinks(plain) : plain;
}
window__WEBPACK_IMPORTED_MODULE_15___default.a['rainloop_Utils_htmlToPlain'] = htmlToPlain; // eslint-disable-line dot-notation

window__WEBPACK_IMPORTED_MODULE_15___default.a['rainloop_Utils_plainToHtml'] = plainToHtml; // eslint-disable-line dot-notation

/**
 * @param {Array} aSystem
 * @param {Array} aList
 * @param {Array=} aDisabled
 * @param {Array=} aHeaderLines
 * @param {?number=} iUnDeep
 * @param {Function=} fDisableCallback
 * @param {Function=} fVisibleCallback
 * @param {Function=} fRenameCallback
 * @param {boolean=} bSystem
 * @param {boolean=} bBuildUnvisible
 * @returns {Array}
 */

function folderListOptionsBuilder(aSystem, aList, aDisabled, aHeaderLines, iUnDeep, fDisableCallback, fVisibleCallback, fRenameCallback, bSystem, bBuildUnvisible) {
  var
  /**
  * @type {?FolderModel}
  */
  oItem = null,
      bSep = false,
      iIndex = 0,
      iLen = 0,
      aResult = [];
  var sDeepPrefix = "\xA0\xA0\xA0";
  bBuildUnvisible = isUnd(bBuildUnvisible) ? false : !!bBuildUnvisible;
  bSystem = !isNormal(bSystem) ? 0 < aSystem.length : bSystem;
  iUnDeep = !isNormal(iUnDeep) ? 0 : iUnDeep;
  fDisableCallback = isNormal(fDisableCallback) ? fDisableCallback : null;
  fVisibleCallback = isNormal(fVisibleCallback) ? fVisibleCallback : null;
  fRenameCallback = isNormal(fRenameCallback) ? fRenameCallback : null;

  if (!isArray(aDisabled)) {
    aDisabled = [];
  }

  if (!isArray(aHeaderLines)) {
    aHeaderLines = [];
  }

  for (iIndex = 0, iLen = aHeaderLines.length; iIndex < iLen; iIndex++) {
    aResult.push({
      id: aHeaderLines[iIndex][0],
      name: aHeaderLines[iIndex][1],
      system: false,
      seporator: false,
      disabled: false
    });
  }

  bSep = true;

  for (iIndex = 0, iLen = aSystem.length; iIndex < iLen; iIndex++) {
    oItem = aSystem[iIndex];

    if (fVisibleCallback ? fVisibleCallback(oItem) : true) {
      if (bSep && 0 < aResult.length) {
        aResult.push({
          id: '---',
          name: '---',
          system: false,
          seporator: true,
          disabled: true
        });
      }

      bSep = false;
      aResult.push({
        id: oItem.fullNameRaw,
        name: fRenameCallback ? fRenameCallback(oItem) : oItem.name(),
        system: true,
        seporator: false,
        disabled: !oItem.selectable || -1 < inArray(oItem.fullNameRaw, aDisabled) || (fDisableCallback ? fDisableCallback(oItem) : false)
      });
    }
  }

  bSep = true;

  for (iIndex = 0, iLen = aList.length; iIndex < iLen; iIndex++) {
    oItem = aList[iIndex]; // if (oItem.subScribed() || !oItem.existen || bBuildUnvisible)

    if ((oItem.subScribed() || !oItem.existen || bBuildUnvisible) && (oItem.selectable || oItem.hasSubScribedSubfolders())) {
      if (fVisibleCallback ? fVisibleCallback(oItem) : true) {
        if (Common_Enums__WEBPACK_IMPORTED_MODULE_21__["FolderType"].User === oItem.type() || !bSystem || oItem.hasSubScribedSubfolders()) {
          if (bSep && 0 < aResult.length) {
            aResult.push({
              id: '---',
              name: '---',
              system: false,
              seporator: true,
              disabled: true
            });
          }

          bSep = false;
          aResult.push({
            id: oItem.fullNameRaw,
            name: new window__WEBPACK_IMPORTED_MODULE_15___default.a.Array(oItem.deep + 1 - iUnDeep).join(sDeepPrefix) + (fRenameCallback ? fRenameCallback(oItem) : oItem.name()),
            system: false,
            seporator: false,
            disabled: !oItem.selectable || -1 < inArray(oItem.fullNameRaw, aDisabled) || (fDisableCallback ? fDisableCallback(oItem) : false)
          });
        }
      }
    }

    if (oItem.subScribed() && 0 < oItem.subFolders().length) {
      aResult = _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12___default()(aResult).call(aResult, folderListOptionsBuilder([], oItem.subFolders(), aDisabled, [], iUnDeep, fDisableCallback, fVisibleCallback, fRenameCallback, bSystem, bBuildUnvisible));
    }
  }

  return aResult;
}
/**
 * @param {object} element
 * @returns {void}
 */

function selectElement(element) {
  var sel = null,
      range = null;

  if (window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection) {
    sel = window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection();
    sel.removeAllRanges();
    range = window__WEBPACK_IMPORTED_MODULE_15___default.a.document.createRange();
    range.selectNodeContents(element);
    sel.addRange(range);
  } else if (window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection) {
    range = window__WEBPACK_IMPORTED_MODULE_15___default.a.document.body.createTextRange();
    range.moveToElementText(element);
    range.select();
  }
}
var detectDropdownVisibility = ___WEBPACK_IMPORTED_MODULE_17___default.a.debounce(function () {
  Object(Common_Globals__WEBPACK_IMPORTED_MODULE_20__["dropdownVisibility"])(!!_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11___default()(___WEBPACK_IMPORTED_MODULE_17___default.a).call(___WEBPACK_IMPORTED_MODULE_17___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_20__["data"].aBootstrapDropdowns, function (item) {
    return item.hasClass('open');
  }));
}, 50);
/**
 * @param {boolean=} delay = false
 */

function triggerAutocompleteInputChange(delay) {
  if (delay === void 0) {
    delay = false;
  }

  var fFunc = function fFunc() {
    $__WEBPACK_IMPORTED_MODULE_16___default()('.checkAutocomplete').trigger('change');
  };

  if (delay) {
    ___WEBPACK_IMPORTED_MODULE_17___default.a.delay(fFunc, 100);
  } else {
    fFunc();
  }
}
var configurationScriptTagCache = {};
/**
 * @param {string} configuration
 * @returns {object}
 */

function getConfigurationFromScriptTag(configuration) {
  if (!configurationScriptTagCache[configuration]) {
    configurationScriptTagCache[configuration] = $__WEBPACK_IMPORTED_MODULE_16___default()('script[type="application/json"][data-configuration="' + configuration + '"]');
  }

  try {
    return JSON.parse(configurationScriptTagCache[configuration].text());
  } catch (e) {} // eslint-disable-line no-empty


  return {};
}
/**
 * @param {mixed} mPropOrValue
 * @param {mixed} value
 */

function disposeOne(propOrValue, value) {
  var disposable = value || propOrValue;

  if (disposable && 'function' === typeof disposable.dispose) {
    disposable.dispose();
  }
}
/**
 * @param {Object} object
 */

function disposeObject(object) {
  if (object) {
    if (isArray(object.disposables)) {
      ___WEBPACK_IMPORTED_MODULE_17___default.a.each(object.disposables, disposeOne);
    }

    ko__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"].utils.objectForEach(object, disposeOne);
  }
}
/**
 * @param {Object|Array} objectOrObjects
 * @returns {void}
 */

function delegateRunOnDestroy(objectOrObjects) {
  if (objectOrObjects) {
    if (isArray(objectOrObjects)) {
      ___WEBPACK_IMPORTED_MODULE_17___default.a.each(objectOrObjects, function (item) {
        delegateRunOnDestroy(item);
      });
    } else if (objectOrObjects && objectOrObjects.onDestroy) {
      objectOrObjects.onDestroy();
    }
  }
}
/**
 * @param {object} $styleTag
 * @param {string} css
 * @returns {boolean}
 */

function appendStyles($styleTag, css) {
  if ($styleTag && $styleTag[0]) {
    if ($styleTag[0].styleSheet && !isUnd($styleTag[0].styleSheet.cssText)) {
      $styleTag[0].styleSheet.cssText = css;
    } else {
      $styleTag.text(css);
    }

    return true;
  }

  return false;
}
var __themeTimer = 0,
    __themeAjax = null;
/**
 * @param {string} value
 * @param {function=} themeTrigger = noop
 * @returns {void}
 */

function changeTheme(value, themeTrigger) {
  if (themeTrigger === void 0) {
    themeTrigger = noop;
  }

  var themeLink = $__WEBPACK_IMPORTED_MODULE_16___default()('#app-theme-link'),
      clearTimer = function clearTimer() {
    __themeTimer = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(function () {
      return themeTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].Idle);
    }, 1000);
    __themeAjax = null;
  };

  var themeStyle = $__WEBPACK_IMPORTED_MODULE_16___default()('#app-theme-style'),
      url = themeLink.attr('href');

  if (!url) {
    url = themeStyle.attr('data-href');
  }

  if (url) {
    url = url.toString().replace(/\/-\/[^/]+\/-\//, '/-/' + value + '/-/');
    url = url.replace(/\/Css\/[^/]+\/User\//, '/Css/0/User/');
    url = url.replace(/\/Hash\/[^/]+\//, '/Hash/-/');

    if ('Json/' !== url.substring(url.length - 5, url.length)) {
      url += 'Json/';
    }

    window__WEBPACK_IMPORTED_MODULE_15___default.a.clearTimeout(__themeTimer);
    themeTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].Animate);

    if (__themeAjax && __themeAjax.abort) {
      __themeAjax.abort();
    }

    __themeAjax = $__WEBPACK_IMPORTED_MODULE_16___default.a.ajax({
      url: url,
      dataType: 'json'
    }).then(function (data) {
      if (data && isArray(data) && 2 === data.length) {
        if (themeLink && themeLink[0] && (!themeStyle || !themeStyle[0])) {
          themeStyle = $__WEBPACK_IMPORTED_MODULE_16___default()('<style id="app-theme-style"></style>');
          themeLink.after(themeStyle);
          themeLink.remove();
        }

        if (themeStyle && themeStyle[0]) {
          if (appendStyles(themeStyle, data[1])) {
            themeStyle.attr('data-href', url).attr('data-theme', data[0]);
          }
        }

        themeTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].TrueResult);
      }
    }).then(clearTimer, clearTimer);
  }
}
/**
 * @returns {function}
 */

function computedPagenatorHelper(koCurrentPage, koPageCount) {
  return function () {
    var currentPage = koCurrentPage(),
        pageCount = koPageCount(),
        result = [],
        fAdd = function fAdd(index, push, customName) {
      if (push === void 0) {
        push = true;
      }

      if (customName === void 0) {
        customName = '';
      }

      var data = {
        current: index === currentPage,
        name: '' === customName ? index.toString() : customName.toString(),
        custom: '' !== customName,
        title: '' === customName ? '' : index.toString(),
        value: index.toString()
      };

      if (push) {
        result.push(data);
      } else {
        result.unshift(data);
      }
    };

    var prev = 0,
        next = 0,
        limit = 2;

    if (1 < pageCount || 0 < pageCount && pageCount < currentPage) {
      if (pageCount < currentPage) {
        fAdd(pageCount);
        prev = pageCount;
        next = pageCount;
      } else {
        if (3 >= currentPage || pageCount - 2 <= currentPage) {
          limit += 2;
        }

        fAdd(currentPage);
        prev = currentPage;
        next = currentPage;
      }

      while (0 < limit) {
        prev -= 1;
        next += 1;

        if (0 < prev) {
          fAdd(prev, false);
          limit -= 1;
        }

        if (pageCount >= next) {
          fAdd(next, true);
          limit -= 1;
        } else if (0 >= prev) {
          break;
        }
      }

      if (3 === prev) {
        fAdd(2, false);
      } else if (3 < prev) {
        fAdd(Math.round((prev - 1) / 2), false, '...');
      }

      if (pageCount - 2 === next) {
        fAdd(pageCount - 1, true);
      } else if (pageCount - 2 > next) {
        fAdd(Math.round((pageCount + next) / 2), true, '...');
      } // first and last


      if (1 < prev) {
        fAdd(1, false);
      }

      if (pageCount > next) {
        fAdd(pageCount, true);
      }
    }

    return result;
  };
}
/**
 * @param {string} fileName
 * @returns {string}
 */

function getFileExtension(fileName) {
  fileName = trim(fileName).toLowerCase();
  var result = fileName.split('.').pop();
  return result === fileName ? '' : result;
}
/**
 * @param {string} fileName
 * @returns {string}
 */

function mimeContentType(fileName) {
  var ext = '',
      result = 'application/octet-stream';
  fileName = trim(fileName).toLowerCase();

  if ('winmail.dat' === fileName) {
    return 'application/ms-tnef';
  }

  ext = getFileExtension(fileName);

  if (ext && 0 < ext.length && !isUnd(Common_Mime__WEBPACK_IMPORTED_MODULE_22__[/* Mime */ "a"][ext])) {
    result = Common_Mime__WEBPACK_IMPORTED_MODULE_22__[/* Mime */ "a"][ext];
  }

  return result;
}
/**
 * @param {string} color
 * @returns {boolean}
 */

function isTransparent(color) {
  return 'rgba(0, 0, 0, 0)' === color || 'transparent' === color;
}
/**
 * @param {Object} $el
 * @returns {number}
 */

function getRealHeight($el) {
  $el.clone().show().appendTo(Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$hcont"]);
  var result = Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$hcont"].height();
  Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$hcont"].empty();
  return result;
}
/**
 * @param {string} url
 * @param {number} value
 * @param {Function} fCallback
 */

function resizeAndCrop(url, value, fCallback) {
  var img = new window__WEBPACK_IMPORTED_MODULE_15___default.a.Image();

  img.onload = function () {
    var diff = [0, 0];
    var canvas = window__WEBPACK_IMPORTED_MODULE_15___default.a.document.createElement('canvas'),
        ctx = canvas.getContext('2d');
    canvas.width = value;
    canvas.height = value;

    if (this.width > this.height) {
      diff = [this.width - this.height, 0];
    } else {
      diff = [0, this.height - this.width];
    }

    ctx.fillStyle = '#fff';
    ctx.fillRect(0, 0, value, value);
    ctx.drawImage(this, diff[0] / 2, diff[1] / 2, this.width - diff[0], this.height - diff[1], 0, 0, value, value);
    fCallback(canvas.toDataURL('image/jpeg'));
  };

  img.src = url;
}
/**
 * @param {string} mailToUrl
 * @param {Function} PopupComposeViewModel
 * @returns {boolean}
 */

function mailToHelper(mailToUrl, PopupComposeViewModel) {
  if (mailToUrl && 'mailto:' === mailToUrl.toString().substr(0, 7).toLowerCase()) {
    if (!PopupComposeViewModel) {
      return true;
    }

    mailToUrl = mailToUrl.toString().substr(7);
    var to = [],
        cc = null,
        bcc = null,
        params = {};

    var email = mailToUrl.replace(/\?.+$/, ''),
        query = mailToUrl.replace(/^[^?]*\?/, ''),
        EmailModel = __webpack_require__(/*! Model/Email */ 82).default;

    params = simpleQueryParser(query);

    if (!isUnd(params.to)) {
      to = EmailModel.parseEmailLine(decodeURIComponent(email + ',' + params.to));
      to = _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13___default()(___WEBPACK_IMPORTED_MODULE_17___default.a).call(___WEBPACK_IMPORTED_MODULE_17___default.a, _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_14___default()(to).call(to, function (result, value) {
        if (value) {
          if (result[value.email]) {
            if (!result[value.email].name) {
              result[value.email] = value;
            }
          } else {
            result[value.email] = value;
          }
        }

        return result;
      }, {}));
    } else {
      to = EmailModel.parseEmailLine(email);
    }

    if (!isUnd(params.cc)) {
      cc = EmailModel.parseEmailLine(decodeURIComponent(params.cc));
    }

    if (!isUnd(params.bcc)) {
      bcc = EmailModel.parseEmailLine(decodeURIComponent(params.bcc));
    }

    __webpack_require__(/*! Knoin/Knoin */ 8).showScreenPopup(PopupComposeViewModel, [Common_Enums__WEBPACK_IMPORTED_MODULE_21__["ComposeType"].Empty, null, to, cc, bcc, isUnd(params.subject) ? null : pString(decodeURIComponent(params.subject)), isUnd(params.body) ? null : plainToHtml(pString(decodeURIComponent(params.body)))]);

    return true;
  }

  return false;
}
/**
 * @param {Function} fn
 * @returns {void}
 */

function domReady(fn) {
  $__WEBPACK_IMPORTED_MODULE_16___default()(function () {
    return fn();
  }); //
  //	if ('loading' !== window.document.readyState)
  //	{
  //		fn();
  //	}
  //	else
  //	{
  //		window.document.addEventListener('DOMContentLoaded', fn);
  //	}
}
var windowResize = ___WEBPACK_IMPORTED_MODULE_17___default.a.debounce(function (timeout) {
  if (isUnd(timeout) || isNull(timeout)) {
    Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$win"].resize();
  } else {
    _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(function () {
      Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$win"].resize();
    }, timeout);
  }
}, 50);
/**
 * @returns {void}
 */

function windowResizeCallback() {
  windowResize();
}
var substr = window__WEBPACK_IMPORTED_MODULE_15___default.a.String.substr;

if ('b' !== 'ab'.substr(-1)) {
  substr = function substr(str, start, length) {
    start = 0 > start ? str.length + start : start;
    return str.substr(start, length);
  };

  window__WEBPACK_IMPORTED_MODULE_15___default.a.String.substr = substr;
}

/***/ }),
/* 3 */
/*!***************************!*\
  !*** external "window._" ***!
  \***************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window._;

/***/ }),
/* 4 */
/*!*************************!*\
  !*** external "window" ***!
  \*************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window;

/***/ }),
/* 5 */
/*!*********************************!*\
  !*** ./dev/Storage/Settings.js ***!
  \*********************************/
/*! exports provided: settingsGet, settingsSet, appSettingsGet, capa */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsGet", function() { return settingsGet; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsSet", function() { return settingsSet; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "appSettingsGet", function() { return appSettingsGet; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "capa", function() { return capa; });
/* 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__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);


var SETTINGS = window__WEBPACK_IMPORTED_MODULE_0___default.a.__rlah_data() || null;
SETTINGS = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isNormal"])(SETTINGS) ? SETTINGS : {};
var APP_SETTINGS = SETTINGS.System || null;
APP_SETTINGS = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isNormal"])(APP_SETTINGS) ? APP_SETTINGS : {};
/**
 * @param {string} name
 * @returns {*}
 */

function settingsGet(name) {
  return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(SETTINGS[name]) ? null : SETTINGS[name];
}
/**
 * @param {string} name
 * @param {*} value
 */

function settingsSet(name, value) {
  SETTINGS[name] = value;
}
/**
 * @param {string} name
 * @returns {*}
 */

function appSettingsGet(name) {
  return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(APP_SETTINGS[name]) ? null : APP_SETTINGS[name];
}
/**
 * @param {string} name
 * @returns {boolean}
 */

function capa(name) {
  var values = settingsGet('Capa');
  return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(values) && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isNormal"])(name) && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["inArray"])(name, values);
}

/***/ }),
/* 6 */
/*!*******************************!*\
  !*** ./dev/Common/Globals.js ***!
  \*******************************/
/*! exports provided: $win, $doc, $html, $body, $div, $hcont, startMicrotime, dropdownVisibility, useKeyboardShortcuts, sUserAgent, bIE, bChrome, bSafari, bMobileDevice, bDisableNanoScroll, bAnimationSupported, bXMLHttpRequestSupported, bIsHttps, htmlEditorDefaultConfig, htmlEditorLangsMap, bAllowPdfPreview, VIEW_MODELS, moveAction, leftPanelDisabled, leftPanelType, leftPanelWidth, popupVisibilityNames, popupVisibility, keyScopeReal, keyScopeFake, keyScope, data */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$win", function() { return $win; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$doc", function() { return $doc; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$html", function() { return $html; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$body", function() { return $body; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$div", function() { return $div; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$hcont", function() { return $hcont; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startMicrotime", function() { return startMicrotime; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dropdownVisibility", function() { return dropdownVisibility; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useKeyboardShortcuts", function() { return useKeyboardShortcuts; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sUserAgent", function() { return sUserAgent; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bIE", function() { return bIE; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bChrome", function() { return bChrome; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bSafari", function() { return bSafari; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bMobileDevice", function() { return bMobileDevice; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bDisableNanoScroll", function() { return bDisableNanoScroll; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bAnimationSupported", function() { return bAnimationSupported; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bXMLHttpRequestSupported", function() { return bXMLHttpRequestSupported; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bIsHttps", function() { return bIsHttps; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "htmlEditorDefaultConfig", function() { return htmlEditorDefaultConfig; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "htmlEditorLangsMap", function() { return htmlEditorLangsMap; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bAllowPdfPreview", function() { return bAllowPdfPreview; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIEW_MODELS", function() { return VIEW_MODELS; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "moveAction", function() { return moveAction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "leftPanelDisabled", function() { return leftPanelDisabled; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "leftPanelType", function() { return leftPanelType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "leftPanelWidth", function() { return leftPanelWidth; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "popupVisibilityNames", function() { return popupVisibilityNames; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "popupVisibility", function() { return popupVisibility; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyScopeReal", function() { return keyScopeReal; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyScopeFake", function() { return keyScopeFake; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyScope", function() { return keyScope; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "data", function() { return data; });
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ 314);
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__ = __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_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__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 ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Enums */ 0);








var $win = $__WEBPACK_IMPORTED_MODULE_4___default()(window__WEBPACK_IMPORTED_MODULE_2___default.a);
$win.__sizes = [0, 0];

var $doc = $__WEBPACK_IMPORTED_MODULE_4___default()(window__WEBPACK_IMPORTED_MODULE_2___default.a.document);
var $html = $__WEBPACK_IMPORTED_MODULE_4___default()('html');
var $body = $__WEBPACK_IMPORTED_MODULE_4___default()('body');
var $div = $__WEBPACK_IMPORTED_MODULE_4___default()('<div></div>');
var $hcont = $__WEBPACK_IMPORTED_MODULE_4___default()('<div></div>');
$hcont.attr('area', 'hidden').css({
  position: 'absolute',
  left: -5000
}).appendTo($body);
var startMicrotime = new window__WEBPACK_IMPORTED_MODULE_2___default.a.Date().getTime();
/**
 * @type {?}
 */

var dropdownVisibility = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false).extend({
  rateLimit: 0
});
/**
 * @type {boolean}
 */

var useKeyboardShortcuts = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(true);
/**
 * @type {string}
 */

var sUserAgent = 'navigator' in window__WEBPACK_IMPORTED_MODULE_2___default.a && 'userAgent' in window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator && window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator.userAgent.toLowerCase() || '';
/**
 * @type {boolean}
 */

var bIE = -1 < sUserAgent.indexOf('msie');
/**
 * @type {boolean}
 */

var bChrome = -1 < sUserAgent.indexOf('chrome');
/**
 * @type {boolean}
 */

var bSafari = !bChrome && -1 < sUserAgent.indexOf('safari');
/**
 * @type {boolean}
 */

var bMobileDevice = /android/i.test(sUserAgent) || /iphone/i.test(sUserAgent) || /ipod/i.test(sUserAgent) || /ipad/i.test(sUserAgent) || /blackberry/i.test(sUserAgent);
/**
 * @type {boolean}
 */

var bDisableNanoScroll = bMobileDevice;
/**
 * @type {boolean}
 */

var bAnimationSupported = !bMobileDevice && $html.hasClass('csstransitions') && $html.hasClass('cssanimations');
/**
 * @type {boolean}
 */

var bXMLHttpRequestSupported = !!window__WEBPACK_IMPORTED_MODULE_2___default.a.XMLHttpRequest;
/**
 * @type {boolean}
 */

var bIsHttps = window__WEBPACK_IMPORTED_MODULE_2___default.a.document && window__WEBPACK_IMPORTED_MODULE_2___default.a.document.location ? 'https:' === window__WEBPACK_IMPORTED_MODULE_2___default.a.document.location.protocol : false;
/**
 * @type {Object}
 */

var htmlEditorDefaultConfig = {
  'title': false,
  'stylesSet': false,
  'customConfig': '',
  'contentsCss': '',
  'toolbarGroups': [{
    name: 'spec'
  }, {
    name: 'styles'
  }, {
    name: 'basicstyles',
    groups: ['basicstyles', 'cleanup', 'bidi']
  }, {
    name: 'colors'
  }, bMobileDevice ? {} : {
    name: 'paragraph',
    groups: ['list', 'indent', 'blocks', 'align']
  }, {
    name: 'links'
  }, {
    name: 'insert'
  }, {
    name: 'document',
    groups: ['mode', 'document', 'doctools']
  }, {
    name: 'others'
  }],
  'removePlugins': 'liststyle',
  'removeButtons': 'Format,Undo,Redo,Cut,Copy,Paste,Anchor,Strike,Subscript,Superscript,Image,SelectAll,Source',
  'removeDialogTabs': 'link:advanced;link:target;image:advanced;images:advanced',
  'extraPlugins': 'plain,signature',
  'allowedContent': true,
  'extraAllowedContent': true,
  'fillEmptyBlocks': false,
  'ignoreEmptyParagraph': true,
  'disableNativeSpellChecker': false,
  'colorButton_enableAutomatic': false,
  'colorButton_enableMore': true,
  'font_defaultLabel': 'Arial',
  'fontSize_defaultLabel': '13',
  'fontSize_sizes': '10/10px;12/12px;13/13px;14/14px;16/16px;18/18px;20/20px;24/24px;28/28px;36/36px;48/48px'
};
/**
 * @type {Object}
 */

var htmlEditorLangsMap = {
  'ar_sa': 'ar-sa',
  'bg_bg': 'bg',
  'cs_CZ': 'cs',
  'de_de': 'de',
  'el_gr': 'el',
  'es_es': 'es',
  'et_ee': 'et',
  'fr_fr': 'fr',
  'hu_hu': 'hu',
  'is_is': 'is',
  'it_it': 'it',
  'ja_jp': 'ja',
  'ko_kr': 'ko',
  'lt_lt': 'lt',
  'lv_lv': 'lv',
  'fa_ir': 'fa',
  'nb_no': 'nb',
  'nl_nl': 'nl',
  'pl_pl': 'pl',
  'pt_br': 'pt-br',
  'pt_pt': 'pt',
  'ro_ro': 'ro',
  'ru_ru': 'ru',
  'sk_sk': 'sk',
  'sl_si': 'sl',
  'sv_se': 'sv',
  'tr_tr': 'tr',
  'uk_ua': 'uk',
  'zh_cn': 'zh-cn',
  'zh_tw': 'zh'
};
/**
 * @type {boolean}
 */

var bAllowPdfPreview = !bMobileDevice;

if (bAllowPdfPreview && window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator && window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator.mimeTypes) {
  bAllowPdfPreview = !!_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator.mimeTypes, function (type) {
    return type && 'application/pdf' === type.type;
  });

  if (!bAllowPdfPreview) {
    bAllowPdfPreview = 'undefined' !== typeof window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator.mimeTypes['application/pdf'];
  }
}


var VIEW_MODELS = {
  settings: [],
  'settings-removed': [],
  'settings-disabled': []
};
var moveAction = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
var leftPanelDisabled = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
var leftPanelType = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable('');
var leftPanelWidth = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(0);
leftPanelDisabled.subscribe(function (value) {
  if (value && moveAction()) {
    moveAction(false);
  }
});
moveAction.subscribe(function (value) {
  if (value && leftPanelDisabled()) {
    leftPanelDisabled(false);
  }
}); // popups

var popupVisibilityNames = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observableArray([]);
var popupVisibility = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].computed(function () {
  return 0 < popupVisibilityNames().length;
});
popupVisibility.subscribe(function (bValue) {
  $html.toggleClass('rl-modal', bValue);
}); // keys

var keyScopeReal = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].All);
var keyScopeFake = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].All);
var keyScope = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].computed({
  read: function read() {
    return keyScopeFake();
  },
  write: function write(value) {
    if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].Menu !== value) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].Compose === value) {
        // disableKeyFilter
        key__WEBPACK_IMPORTED_MODULE_5___default.a.filter = function () {
          return useKeyboardShortcuts();
        };
      } else {
        // restoreKeyFilter
        key__WEBPACK_IMPORTED_MODULE_5___default.a.filter = function (event) {
          if (useKeyboardShortcuts()) {
            var el = event.target || event.srcElement,
                tagName = el ? el.tagName.toUpperCase() : '';
            return !('INPUT' === tagName || 'SELECT' === tagName || 'TEXTAREA' === tagName || el && 'DIV' === tagName && ('editorHtmlArea' === el.className || 'true' === '' + el.contentEditable));
          }

          return false;
        };
      }

      keyScopeFake(value);

      if (dropdownVisibility()) {
        value = Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].Menu;
      }
    }

    keyScopeReal(value);
  }
});
keyScopeReal.subscribe(function (value) {
  //	window.console.log('keyScope=' + sValue); // DEBUG
  key__WEBPACK_IMPORTED_MODULE_5___default.a.setScope(value);
});
dropdownVisibility.subscribe(function (value) {
  if (value) {
    keyScope(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].Menu);
  } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].Menu === key__WEBPACK_IMPORTED_MODULE_5___default.a.getScope()) {
    keyScope(keyScopeFake());
  }
});
/**
 * @type {*}
 */

var data = {
  __APP__: null,
  iAjaxErrorCount: 0,
  iTokenErrorCount: 0,
  aBootstrapDropdowns: [],
  iMessageBodyCacheCount: 0,
  bUnload: false
};

/***/ }),
/* 7 */
/*!********************************!*\
  !*** external "window.jQuery" ***!
  \********************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.jQuery;

/***/ }),
/* 8 */
/*!****************************!*\
  !*** ./dev/Knoin/Knoin.js ***!
  \****************************/
/*! exports provided: ViewType, hideLoading, createCommand, addSettingsViewModel, removeSettingsViewModel, disableSettingsViewModel, routeOff, routeOn, screen, getScreenPopup, hideScreenPopup, vmRunHook, buildViewModel, showScreenPopup, warmUpScreenPopup, isPopupVisible, screenOnRoute, startScreens, setHash, commandDecorator, command, viewDecorator, view, viewModel, popupDecorator, popup, settingsMenuKeysHandler */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewType", function() { return ViewType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hideLoading", function() { return hideLoading; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createCommand", function() { return createCommand; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addSettingsViewModel", function() { return addSettingsViewModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeSettingsViewModel", function() { return removeSettingsViewModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "disableSettingsViewModel", function() { return disableSettingsViewModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "routeOff", function() { return routeOff; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "routeOn", function() { return routeOn; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "screen", function() { return screen; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getScreenPopup", function() { return getScreenPopup; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hideScreenPopup", function() { return hideScreenPopup; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "vmRunHook", function() { return vmRunHook; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildViewModel", function() { return buildViewModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showScreenPopup", function() { return showScreenPopup; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "warmUpScreenPopup", function() { return warmUpScreenPopup; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPopupVisible", function() { return isPopupVisible; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "screenOnRoute", function() { return screenOnRoute; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startScreens", function() { return startScreens; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHash", function() { return setHash; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "commandDecorator", function() { return commandDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "command", function() { return commandDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "viewDecorator", function() { return viewDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "view", function() { return viewDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "viewModel", function() { return viewDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "popupDecorator", function() { return popupDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "popup", function() { return popupDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsMenuKeysHandler", function() { return settingsMenuKeysHandler; });
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.match.js */ 224);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3__);
/* 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 $__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var hasher__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! hasher */ 63);
/* harmony import */ var hasher__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(hasher__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! crossroads */ 176);
/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(crossroads__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Utils */ 2);













var currentScreen = null,
    defaultScreenName = '';
var SCREENS = {};
var ViewType = {
  Popup: 'Popups',
  Left: 'Left',
  Right: 'Right',
  Center: 'Center'
};
/**
 * @returns {void}
 */

function hideLoading() {
  $__WEBPACK_IMPORTED_MODULE_5___default()('#rl-content').addClass('rl-content-show');
  $__WEBPACK_IMPORTED_MODULE_5___default()('#rl-loading').hide().remove();
}
/**
 * @param {Function} fExecute
 * @param {(Function|boolean|null)=} fCanExecute = true
 * @returns {Function}
 */

function createCommand(fExecute, fCanExecute) {
  if (fCanExecute === void 0) {
    fCanExecute = true;
  }

  return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["createCommandLegacy"])(null, fExecute, fCanExecute);
}
/**
 * @param {Function} SettingsViewModelClass
 * @param {string} template
 * @param {string} labelName
 * @param {string} route
 * @param {boolean=} isDefault = false
 * @returns {void}
 */

function addSettingsViewModel(SettingsViewModelClass, template, labelName, route, isDefault) {
  if (isDefault === void 0) {
    isDefault = false;
  }

  SettingsViewModelClass.__rlSettingsData = {
    Label: labelName,
    Template: template,
    Route: route,
    IsDefault: !!isDefault
  };
  Common_Globals__WEBPACK_IMPORTED_MODULE_11__["VIEW_MODELS"].settings.push(SettingsViewModelClass);
}
/**
 * @param {Function} SettingsViewModelClass
 * @returns {void}
 */

function removeSettingsViewModel(SettingsViewModelClass) {
  Common_Globals__WEBPACK_IMPORTED_MODULE_11__["VIEW_MODELS"]['settings-removed'].push(SettingsViewModelClass);
}
/**
 * @param {Function} SettingsViewModelClass
 * @returns {void}
 */

function disableSettingsViewModel(SettingsViewModelClass) {
  Common_Globals__WEBPACK_IMPORTED_MODULE_11__["VIEW_MODELS"]['settings-disabled'].push(SettingsViewModelClass);
}
/**
 * @returns {void}
 */

function routeOff() {
  hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.active = false;
}
/**
 * @returns {void}
 */

function routeOn() {
  hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.active = true;
}
/**
 * @param {string} screenName
 * @returns {?Object}
 */

function screen(screenName) {
  return '' !== screenName && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isUnd"])(SCREENS[screenName]) ? SCREENS[screenName] : null;
}
/**
 * @param {Function} ViewModelClassToShow
 * @returns {Function|null}
 */

function getScreenPopup(PopuViewModelClass) {
  var result = null;

  if (PopuViewModelClass) {
    result = PopuViewModelClass;

    if (PopuViewModelClass.default) {
      result = PopuViewModelClass.default;
    }
  }

  return result;
}
/**
 * @param {Function} ViewModelClassToHide
 * @returns {void}
 */

function hideScreenPopup(ViewModelClassToHide) {
  var ModalView = getScreenPopup(ViewModelClassToHide);

  if (ModalView && ModalView.__vm && ModalView.__dom) {
    ModalView.__vm.modalVisibility(false);
  }
}
/**
 * @param {string} hookName
 * @param {Function} ViewModelClass
 * @param {mixed=} params = null
 */

function vmRunHook(hookName, ViewModelClass, params) {
  if (params === void 0) {
    params = null;
  }

  ___WEBPACK_IMPORTED_MODULE_4___default.a.each(ViewModelClass.__names, function (name) {
    Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_10__[/* runHook */ "f"])(hookName, [name, ViewModelClass.__vm, params]);
  });
}
/**
 * @param {Function} ViewModelClass
 * @param {Object=} vmScreen
 * @returns {*}
 */

function buildViewModel(ViewModelClass, vmScreen) {
  if (ViewModelClass && !ViewModelClass.__builded) {
    var vmDom = null;
    var vm = new ViewModelClass(vmScreen),
        position = ViewModelClass.__type || '',
        vmPlace = position ? $__WEBPACK_IMPORTED_MODULE_5___default()('#rl-content #rl-' + position.toLowerCase()) : null;
    ViewModelClass.__builded = true;
    ViewModelClass.__vm = vm;
    vm.onShowTrigger = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    vm.onHideTrigger = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    vm.viewModelName = ViewModelClass.__name;
    vm.viewModelNames = ViewModelClass.__names;
    vm.viewModelTemplateID = ViewModelClass.__templateID;
    vm.viewModelPosition = ViewModelClass.__type;

    if (vmPlace && 1 === vmPlace.length) {
      vmDom = $__WEBPACK_IMPORTED_MODULE_5___default()('<div></div>').addClass('rl-view-model').addClass('RL-' + vm.viewModelTemplateID).hide();
      vmDom.appendTo(vmPlace);
      vm.viewModelDom = vmDom;
      ViewModelClass.__dom = vmDom;

      if (ViewType.Popup === position) {
        vm.cancelCommand = vm.closeCommand = createCommand(function () {
          hideScreenPopup(ViewModelClass);
        });
        vm.modalVisibility.subscribe(function (value) {
          if (value) {
            vm.viewModelDom.show();
            vm.storeAndSetKeyScope();
            Common_Globals__WEBPACK_IMPORTED_MODULE_11__["popupVisibilityNames"].push(vm.viewModelName);
            vm.viewModelDom.css('z-index', 3000 + Object(Common_Globals__WEBPACK_IMPORTED_MODULE_11__["popupVisibilityNames"])().length + 10);

            if (vm.onShowTrigger) {
              vm.onShowTrigger(!vm.onShowTrigger());
            }

            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vm, 'onShowWithDelay', [], 500);
          } else {
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vm, 'onHide');
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vm, 'onHideWithDelay', [], 500);

            if (vm.onHideTrigger) {
              vm.onHideTrigger(!vm.onHideTrigger());
            }

            vm.restoreKeyScope();
            vmRunHook('view-model-on-hide', ViewModelClass);
            Common_Globals__WEBPACK_IMPORTED_MODULE_11__["popupVisibilityNames"].remove(vm.viewModelName);
            vm.viewModelDom.css('z-index', 2000);

            ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
              return vm.viewModelDom.hide();
            }, 300);
          }
        });
      }

      vmRunHook('view-model-pre-build', ViewModelClass, vmDom);
      ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].applyBindingAccessorsToNode(vmDom[0], {
        translatorInit: true,
        template: function template() {
          return {
            name: vm.viewModelTemplateID
          };
        }
      }, vm);
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vm, 'onBuild', [vmDom]);

      if (vm && ViewType.Popup === position) {
        vm.registerPopupKeyDown();
      }

      vmRunHook('view-model-post-build', ViewModelClass, vmDom);
    } else {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["log"])('Cannot find view model position: ' + position);
    }
  }

  return ViewModelClass ? ViewModelClass.__vm : null;
}
/**
 * @param {Function} ViewModelClassToShow
 * @param {Array=} params
 * @returns {void}
 */

function showScreenPopup(ViewModelClassToShow, params) {
  if (params === void 0) {
    params = [];
  }

  var ModalView = getScreenPopup(ViewModelClassToShow);

  if (ModalView) {
    buildViewModel(ModalView);

    if (ModalView.__vm && ModalView.__dom) {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ModalView.__vm, 'onBeforeShow', params || []);

      ModalView.__vm.modalVisibility(true);

      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ModalView.__vm, 'onShow', params || []);
      vmRunHook('view-model-on-show', ModalView, params || []);
    }
  }
}
/**
 * @param {Function} ViewModelClassToShow
 * @returns {void}
 */

function warmUpScreenPopup(ViewModelClassToShow) {
  var ModalView = getScreenPopup(ViewModelClassToShow);

  if (ModalView) {
    buildViewModel(ModalView);

    if (ModalView.__vm && ModalView.__dom) {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ModalView.__vm, 'onWarmUp');
    }
  }
}
/**
 * @param {Function} ViewModelClassToShow
 * @returns {boolean}
 */

function isPopupVisible(ViewModelClassToShow) {
  var ModalView = getScreenPopup(ViewModelClassToShow);
  return ModalView && ModalView.__vm ? ModalView.__vm.modalVisibility() : false;
}
/**
 * @param {string} screenName
 * @param {string} subPart
 * @returns {void}
 */

function screenOnRoute(screenName, subPart) {
  var vmScreen = null,
      isSameScreen = false,
      cross = null;

  if ('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["pString"])(screenName)) {
    screenName = defaultScreenName;
  }

  if ('' !== screenName) {
    vmScreen = screen(screenName);

    if (!vmScreen) {
      vmScreen = screen(defaultScreenName);

      if (vmScreen) {
        subPart = screenName + '/' + subPart;
        screenName = defaultScreenName;
      }
    }

    if (vmScreen && vmScreen.__started) {
      isSameScreen = currentScreen && vmScreen === currentScreen;

      if (!vmScreen.__builded) {
        vmScreen.__builded = true;

        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isNonEmptyArray"])(vmScreen.viewModels())) {
          ___WEBPACK_IMPORTED_MODULE_4___default.a.each(vmScreen.viewModels(), function (ViewModelClass) {
            buildViewModel(ViewModelClass, vmScreen);
          });
        }

        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vmScreen, 'onBuild');
      }

      ___WEBPACK_IMPORTED_MODULE_4___default.a.defer(function () {
        // hide screen
        if (currentScreen && !isSameScreen) {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(currentScreen, 'onHide');
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(currentScreen, 'onHideWithDelay', [], 500);

          if (currentScreen.onHideTrigger) {
            currentScreen.onHideTrigger(!currentScreen.onHideTrigger());
          }

          if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isNonEmptyArray"])(currentScreen.viewModels())) {
            ___WEBPACK_IMPORTED_MODULE_4___default.a.each(currentScreen.viewModels(), function (ViewModelClass) {
              if (ViewModelClass.__vm && ViewModelClass.__dom && ViewType.Popup !== ViewModelClass.__vm.viewModelPosition) {
                ViewModelClass.__dom.hide();

                ViewModelClass.__vm.viewModelVisibility(false);

                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ViewModelClass.__vm, 'onHide');
                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ViewModelClass.__vm, 'onHideWithDelay', [], 500);

                if (ViewModelClass.__vm.onHideTrigger) {
                  ViewModelClass.__vm.onHideTrigger(!ViewModelClass.__vm.onHideTrigger());
                }
              }
            });
          }
        } // --


        currentScreen = vmScreen; // show screen

        if (currentScreen && !isSameScreen) {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(currentScreen, 'onShow');

          if (currentScreen.onShowTrigger) {
            currentScreen.onShowTrigger(!currentScreen.onShowTrigger());
          }

          Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_10__[/* runHook */ "f"])('screen-on-show', [currentScreen.screenName(), currentScreen]);

          if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isNonEmptyArray"])(currentScreen.viewModels())) {
            ___WEBPACK_IMPORTED_MODULE_4___default.a.each(currentScreen.viewModels(), function (ViewModelClass) {
              if (ViewModelClass.__vm && ViewModelClass.__dom && ViewType.Popup !== ViewModelClass.__vm.viewModelPosition) {
                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ViewModelClass.__vm, 'onBeforeShow');

                ViewModelClass.__dom.show();

                ViewModelClass.__vm.viewModelVisibility(true);

                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ViewModelClass.__vm, 'onShow');

                if (ViewModelClass.__vm.onShowTrigger) {
                  ViewModelClass.__vm.onShowTrigger(!ViewModelClass.__vm.onShowTrigger());
                }

                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ViewModelClass.__vm, 'onShowWithDelay', [], 200);
                vmRunHook('view-model-on-show', ViewModelClass);
              }
            });
          }
        } // --


        cross = vmScreen && vmScreen.__cross ? vmScreen.__cross() : null;

        if (cross) {
          cross.parse(subPart);
        }
      });
    }
  }
}
/**
 * @param {Array} screensClasses
 * @returns {void}
 */

function startScreens(screensClasses) {
  ___WEBPACK_IMPORTED_MODULE_4___default.a.each(screensClasses, function (CScreen) {
    if (CScreen) {
      var vmScreen = new CScreen(),
          screenName = vmScreen ? vmScreen.screenName() : '';

      if (vmScreen && '' !== screenName) {
        if ('' === defaultScreenName) {
          defaultScreenName = screenName;
        }

        SCREENS[screenName] = vmScreen;
      }
    }
  });

  ___WEBPACK_IMPORTED_MODULE_4___default.a.each(SCREENS, function (vmScreen) {
    if (vmScreen && !vmScreen.__started && vmScreen.__start) {
      vmScreen.__started = true;

      vmScreen.__start();

      Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_10__[/* runHook */ "f"])('screen-pre-start', [vmScreen.screenName(), vmScreen]);
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vmScreen, 'onStart');
      Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_10__[/* runHook */ "f"])('screen-post-start', [vmScreen.screenName(), vmScreen]);
    }
  });

  var cross = crossroads__WEBPACK_IMPORTED_MODULE_8___default.a.create();
  cross.addRoute(/^([a-zA-Z0-9-]*)\/?(.*)$/, screenOnRoute);
  hasher__WEBPACK_IMPORTED_MODULE_7___default.a.initialized.add(cross.parse, cross);
  hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.add(cross.parse, cross);
  hasher__WEBPACK_IMPORTED_MODULE_7___default.a.init();

  ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
    return Common_Globals__WEBPACK_IMPORTED_MODULE_11__["$html"].removeClass('rl-started-trigger').addClass('rl-started');
  }, 100);

  ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
    return Common_Globals__WEBPACK_IMPORTED_MODULE_11__["$html"].addClass('rl-started-delay');
  }, 200);
}
/**
 * @param {string} sHash
 * @param {boolean=} silence = false
 * @param {boolean=} replace = false
 * @returns {void}
 */

function setHash(hash, silence, replace) {
  if (silence === void 0) {
    silence = false;
  }

  if (replace === void 0) {
    replace = false;
  }

  hash = '#' === hash.substr(0, 1) ? hash.substr(1) : hash;
  hash = '/' === hash.substr(0, 1) ? hash.substr(1) : hash;
  var cmd = replace ? 'replaceHash' : 'setHash';

  if (silence) {
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.active = false;
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a[cmd](hash);
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.active = true;
  } else {
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.active = true;
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a[cmd](hash);
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a.setHash(hash);
  }
}
/**
 * @param {Object} params
 * @returns {Function}
 */

function viewDecorator(_ref) {
  var name = _ref.name,
      type = _ref.type,
      templateID = _ref.templateID;
  return function (target) {
    if (target) {
      if (name) {
        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isArray"])(name)) {
          target.__names = name;
        } else {
          target.__names = [name];
        }

        target.__name = target.__names[0];
      }

      if (type) {
        target.__type = type;
      }

      if (templateID) {
        target.__templateID = templateID;
      }
    }
  };
}
/**
 * @param {Object} params
 * @returns {Function}
 */


function popupDecorator(_ref2) {
  var name = _ref2.name,
      templateID = _ref2.templateID;
  return viewDecorator({
    name: name,
    type: ViewType.Popup,
    templateID: templateID
  });
}
/**
 * @param {Function} canExecute
 * @returns {Function}
 */


function commandDecorator(canExecute) {
  if (canExecute === void 0) {
    canExecute = true;
  }

  return function (target, key, descriptor) {
    if (!key || !key.match(/Command$/)) {
      throw new Error("name \"" + key + "\" should end with Command suffix");
    }

    var value = descriptor.value || descriptor.initializer(),
        normCanExecute = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isFunc"])(canExecute) ? canExecute : function () {
      return !!canExecute;
    };

    descriptor.value = function () {
      if (normCanExecute.call(this, this)) {
        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
          args[_key] = arguments[_key];
        }

        value.apply(this, args);
      }

      return false;
    };

    descriptor.value.__realCanExecute = normCanExecute;
    descriptor.value.isCommand = true;
    return descriptor;
  };
}
/**
 * @param {miced} $items
 * @returns {Function}
 */


function settingsMenuKeysHandler($items) {
  return ___WEBPACK_IMPORTED_MODULE_4___default.a.throttle(function (event, handler) {
    var up = handler && 'up' === handler.shortcut;

    if (event && $items.length) {
      var index = $items.index(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default()($items).call($items, '.selected'));

      if (up && 0 < index) {
        index -= 1;
      } else if (!up && index < $items.length - 1) {
        index += 1;
      }

      var resultHash = $items.eq(index).attr('href');

      if (resultHash) {
        setHash(resultHash, false, true);
      }
    }
  }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time200ms);
}



/***/ }),
/* 9 */
/*!**********************************!*\
  !*** ./dev/Common/Translator.js ***!
  \**********************************/
/*! exports provided: trigger, i18n, i18nToNodes, initNotificationLanguage, initOnStartOrLangChange, getNotification, getNotificationFromResponse, getUploadErrorDescByCode, reload */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trigger", function() { return trigger; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i18n", function() { return i18n; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i18nToNodes", function() { return i18nToNodes; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initNotificationLanguage", function() { return initNotificationLanguage; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initOnStartOrLangChange", function() { return initOnStartOrLangChange; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNotification", function() { return getNotification; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNotificationFromResponse", function() { return getNotificationFromResponse; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUploadErrorDescByCode", function() { return getUploadErrorDescByCode; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reload", function() { return reload; });
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ 62);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 151);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__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 ___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Momentor */ 61);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Links */ 15);













var I18N_DATA = window__WEBPACK_IMPORTED_MODULE_4___default.a.rainloopI18N || {};
var I18N_NOTIFICATION_DATA = {};
var I18N_NOTIFICATION_MAP = [[Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].InvalidToken, 'NOTIFICATIONS/INVALID_TOKEN'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].InvalidToken, 'NOTIFICATIONS/INVALID_TOKEN'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AuthError, 'NOTIFICATIONS/AUTH_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccessError, 'NOTIFICATIONS/ACCESS_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].ConnectionError, 'NOTIFICATIONS/CONNECTION_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CaptchaError, 'NOTIFICATIONS/CAPTCHA_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].SocialFacebookLoginAccessDisable, 'NOTIFICATIONS/SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].SocialTwitterLoginAccessDisable, 'NOTIFICATIONS/SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].SocialGoogleLoginAccessDisable, 'NOTIFICATIONS/SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].DomainNotAllowed, 'NOTIFICATIONS/DOMAIN_NOT_ALLOWED'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccountNotAllowed, 'NOTIFICATIONS/ACCOUNT_NOT_ALLOWED'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccountTwoFactorAuthRequired, 'NOTIFICATIONS/ACCOUNT_TWO_FACTOR_AUTH_REQUIRED'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccountTwoFactorAuthError, 'NOTIFICATIONS/ACCOUNT_TWO_FACTOR_AUTH_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CouldNotSaveNewPassword, 'NOTIFICATIONS/COULD_NOT_SAVE_NEW_PASSWORD'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CurrentPasswordIncorrect, 'NOTIFICATIONS/CURRENT_PASSWORD_INCORRECT'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].NewPasswordShort, 'NOTIFICATIONS/NEW_PASSWORD_SHORT'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].NewPasswordWeak, 'NOTIFICATIONS/NEW_PASSWORD_WEAK'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].NewPasswordForbidden, 'NOTIFICATIONS/NEW_PASSWORD_FORBIDDENT'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].ContactsSyncError, 'NOTIFICATIONS/CONTACTS_SYNC_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantGetMessageList, 'NOTIFICATIONS/CANT_GET_MESSAGE_LIST'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantGetMessage, 'NOTIFICATIONS/CANT_GET_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantDeleteMessage, 'NOTIFICATIONS/CANT_DELETE_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantMoveMessage, 'NOTIFICATIONS/CANT_MOVE_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantCopyMessage, 'NOTIFICATIONS/CANT_MOVE_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSaveMessage, 'NOTIFICATIONS/CANT_SAVE_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSendMessage, 'NOTIFICATIONS/CANT_SEND_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].InvalidRecipients, 'NOTIFICATIONS/INVALID_RECIPIENTS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSaveFilters, 'NOTIFICATIONS/CANT_SAVE_FILTERS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantGetFilters, 'NOTIFICATIONS/CANT_GET_FILTERS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].FiltersAreNotCorrect, 'NOTIFICATIONS/FILTERS_ARE_NOT_CORRECT'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantCreateFolder, 'NOTIFICATIONS/CANT_CREATE_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantRenameFolder, 'NOTIFICATIONS/CANT_RENAME_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantDeleteFolder, 'NOTIFICATIONS/CANT_DELETE_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantDeleteNonEmptyFolder, 'NOTIFICATIONS/CANT_DELETE_NON_EMPTY_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSubscribeFolder, 'NOTIFICATIONS/CANT_SUBSCRIBE_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantUnsubscribeFolder, 'NOTIFICATIONS/CANT_UNSUBSCRIBE_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSaveSettings, 'NOTIFICATIONS/CANT_SAVE_SETTINGS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSavePluginSettings, 'NOTIFICATIONS/CANT_SAVE_PLUGIN_SETTINGS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].DomainAlreadyExists, 'NOTIFICATIONS/DOMAIN_ALREADY_EXISTS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantInstallPackage, 'NOTIFICATIONS/CANT_INSTALL_PACKAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantDeletePackage, 'NOTIFICATIONS/CANT_DELETE_PACKAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].InvalidPluginPackage, 'NOTIFICATIONS/INVALID_PLUGIN_PACKAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].UnsupportedPluginPackage, 'NOTIFICATIONS/UNSUPPORTED_PLUGIN_PACKAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].LicensingServerIsUnavailable, 'NOTIFICATIONS/LICENSING_SERVER_IS_UNAVAILABLE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].LicensingExpired, 'NOTIFICATIONS/LICENSING_EXPIRED'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].LicensingBanned, 'NOTIFICATIONS/LICENSING_BANNED'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].DemoSendMessageError, 'NOTIFICATIONS/DEMO_SEND_MESSAGE_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].DemoAccountError, 'NOTIFICATIONS/DEMO_ACCOUNT_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccountAlreadyExists, 'NOTIFICATIONS/ACCOUNT_ALREADY_EXISTS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccountDoesNotExist, 'NOTIFICATIONS/ACCOUNT_DOES_NOT_EXIST'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].MailServerError, 'NOTIFICATIONS/MAIL_SERVER_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].InvalidInputArgument, 'NOTIFICATIONS/INVALID_INPUT_ARGUMENT'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].UnknownNotification, 'NOTIFICATIONS/UNKNOWN_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].UnknownError, 'NOTIFICATIONS/UNKNOWN_ERROR']];
var trigger = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
/**
 * @param {string} key
 * @param {Object=} valueList
 * @param {string=} defaulValue
 * @returns {string}
 */

function i18n(key, valueList, defaulValue) {
  var valueName = '',
      result = I18N_DATA[key];

  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(result)) {
    result = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(defaulValue) ? key : defaulValue;
  }

  if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(valueList) && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isNull"])(valueList)) {
    for (valueName in valueList) {
      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["has"])(valueList, valueName)) {
        result = result.replace('%' + valueName + '%', valueList[valueName]);
      }
    }
  }

  return result;
}

var i18nToNode = function i18nToNode(element) {
  var $el = $__WEBPACK_IMPORTED_MODULE_6___default()(element),
      key = $el.data('i18n');

  if (key) {
    if ('[' === key.substr(0, 1)) {
      switch (key.substr(0, 6)) {
        case '[html]':
          $el.html(i18n(key.substr(6)));
          break;

        case '[place':
          $el.attr('placeholder', i18n(key.substr(13)));
          break;

        case '[title':
          $el.attr('title', i18n(key.substr(7)));
          break;
        // no default
      }
    } else {
      $el.text(i18n(key));
    }
  }
};
/**
 * @param {Object} elements
 * @param {boolean=} animate = false
 */


function i18nToNodes(elements, animate) {
  if (animate === void 0) {
    animate = false;
  }

  ___WEBPACK_IMPORTED_MODULE_5___default.a.defer(function () {
    $__WEBPACK_IMPORTED_MODULE_6___default()('[data-i18n]', elements).each(function (index, item) {
      i18nToNode(item);
    });

    if (animate && Common_Globals__WEBPACK_IMPORTED_MODULE_10__["bAnimationSupported"]) {
      $__WEBPACK_IMPORTED_MODULE_6___default()('.i18n-animation[data-i18n]', elements).letterfx({
        'fx': 'fall fade',
        'backwards': false,
        'timing': 50,
        'fx_duration': '50ms',
        'letter_end': 'restore',
        'element_end': 'restore'
      });
    }
  });
}

var reloadData = function reloadData() {
  if (window__WEBPACK_IMPORTED_MODULE_4___default.a.rainloopI18N) {
    I18N_DATA = window__WEBPACK_IMPORTED_MODULE_4___default.a.rainloopI18N || {};
    i18nToNodes(window__WEBPACK_IMPORTED_MODULE_4___default.a.document, true);
    Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_11__["reload"])();
    trigger(!trigger());
  }

  window__WEBPACK_IMPORTED_MODULE_4___default.a.rainloopI18N = null;
};
/**
 * @returns {void}
 */


function initNotificationLanguage() {
  I18N_NOTIFICATION_MAP.forEach(function (item) {
    I18N_NOTIFICATION_DATA[item[0]] = i18n(item[1]);
  });
}
/**
 * @param {Function} startCallback
 * @param {Function=} langCallback = null
 */

function initOnStartOrLangChange(startCallback, langCallback) {
  if (langCallback === void 0) {
    langCallback = null;
  }

  if (startCallback) {
    startCallback();
  }

  if (langCallback) {
    trigger.subscribe(function () {
      if (startCallback) {
        startCallback();
      }

      if (langCallback) {
        langCallback();
      }
    });
  } else if (startCallback) {
    trigger.subscribe(startCallback);
  }
}
/**
 * @param {number} code
 * @param {*=} message = ''
 * @param {*=} defCode = null
 * @returns {string}
 */

function getNotification(code, message, defCode) {
  if (message === void 0) {
    message = '';
  }

  if (defCode === void 0) {
    defCode = null;
  }

  code = window__WEBPACK_IMPORTED_MODULE_4___default.a.parseInt(code, 10) || 0;

  if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].ClientViewError === code && message) {
    return message;
  }

  defCode = defCode ? window__WEBPACK_IMPORTED_MODULE_4___default.a.parseInt(defCode, 10) || 0 : 0;
  return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(I18N_NOTIFICATION_DATA[code]) ? defCode && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(I18N_NOTIFICATION_DATA[defCode]) ? I18N_NOTIFICATION_DATA[defCode] : '' : I18N_NOTIFICATION_DATA[code];
}
/**
 * @param {object} response
 * @param {number} defCode = Notification.UnknownNotification
 * @returns {string}
 */

function getNotificationFromResponse(response, defCode) {
  if (defCode === void 0) {
    defCode = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].UnknownNotification;
  }

  return response && response.ErrorCode ? getNotification(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["pInt"])(response.ErrorCode), response.ErrorMessage || '') : getNotification(defCode);
}
/**
 * @param {*} code
 * @returns {string}
 */

function getUploadErrorDescByCode(code) {
  var result = '';

  switch (window__WEBPACK_IMPORTED_MODULE_4___default.a.parseInt(code, 10) || 0) {
    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].FileIsTooBig:
      result = i18n('UPLOAD/ERROR_FILE_IS_TOO_BIG');
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].FilePartiallyUploaded:
      result = i18n('UPLOAD/ERROR_FILE_PARTIALLY_UPLOADED');
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].FileNoUploaded:
      result = i18n('UPLOAD/ERROR_NO_FILE_UPLOADED');
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].MissingTempFolder:
      result = i18n('UPLOAD/ERROR_MISSING_TEMP_FOLDER');
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].FileOnSaveingError:
      result = i18n('UPLOAD/ERROR_ON_SAVING_FILE');
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].FileType:
      result = i18n('UPLOAD/ERROR_FILE_TYPE');
      break;

    default:
      result = i18n('UPLOAD/ERROR_UNKNOWN');
      break;
  }

  return result;
}
/**
 * @param {boolean} admin
 * @param {string} language
 */

function reload(admin, language) {
  var start = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["microtime"])();
  Common_Globals__WEBPACK_IMPORTED_MODULE_10__["$html"].addClass('rl-changing-language');
  return new _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default.a(function (resolve, reject) {
    $__WEBPACK_IMPORTED_MODULE_6___default.a.ajax({
      url: Object(Common_Links__WEBPACK_IMPORTED_MODULE_12__[/* langLink */ "n"])(language, admin),
      dataType: 'script',
      cache: true
    }).then(function () {
      ___WEBPACK_IMPORTED_MODULE_5___default.a.delay(function () {
        reloadData();
        var isRtl = -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["inArray"])((language || '').toLowerCase(), ['ar', 'ar_sa', 'he', 'he_he', 'ur', 'ur_ir']);
        Common_Globals__WEBPACK_IMPORTED_MODULE_10__["$html"].removeClass('rl-changing-language').removeClass('rl-rtl rl-ltr') // .attr('dir', isRtl ? 'rtl' : 'ltr')
        .addClass(isRtl ? 'rl-rtl' : 'rl-ltr');
        resolve();
      }, 500 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["microtime"])() - start ? 1 : 500);
    }, function () {
      Common_Globals__WEBPACK_IMPORTED_MODULE_10__["$html"].removeClass('rl-changing-language');
      window__WEBPACK_IMPORTED_MODULE_4___default.a.rainloopI18N = null;
      reject();
    });
  });
} // init section

Common_Globals__WEBPACK_IMPORTED_MODULE_10__["$html"].addClass('rl-' + (Common_Globals__WEBPACK_IMPORTED_MODULE_10__["$html"].attr('dir') || 'ltr'));

/***/ }),
/* 10 */
/*!**************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/inheritsLoose.js ***!
  \**************************************************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _inheritsLoose; });
/* harmony import */ var _babel_runtime_corejs3_core_js_object_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/object/create */ 293);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_create__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_create__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./setPrototypeOf.js */ 294);


function _inheritsLoose(subClass, superClass) {
  subClass.prototype = _babel_runtime_corejs3_core_js_object_create__WEBPACK_IMPORTED_MODULE_0___default()(superClass.prototype);
  subClass.prototype.constructor = subClass;
  Object(_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(subClass, superClass);
}

/***/ }),
/* 11 */,
/* 12 */
/*!*****************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/find.js ***!
  \*****************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 333);

/***/ }),
/* 13 */,
/* 14 */,
/* 15 */
/*!*****************************!*\
  !*** ./dev/Common/Links.js ***!
  \*****************************/
/*! exports provided: populateAuthSuffix, subQueryPrefix, root, rootAdmin, rootUser, attachmentRaw, attachmentDownload, attachmentPreview, attachmentThumbnailPreview, attachmentPreviewAsPlain, attachmentFramed, serverRequest, upload, uploadContacts, uploadBackground, append, change, ajax, messageViewLink, messageDownloadLink, avatarLink, publicLink, userBackground, phpInfo, langLink, exportContactsVcf, exportContactsCsv, socialGoogle, socialTwitter, socialFacebook, staticPrefix, emptyContactPic, sound, notificationMailIcon, openPgpJs, openPgpWorkerJs, openPgpWorkerPath, themePreviewLink, inbox, settings, about, admin, mailBox */
/*! exports used: ajax, append, attachmentDownload, attachmentFramed, attachmentPreview, attachmentPreviewAsPlain, attachmentThumbnailPreview, avatarLink, change, emptyContactPic, exportContactsCsv, exportContactsVcf, inbox, langLink, mailBox, messageDownloadLink, messageViewLink, notificationMailIcon, openPgpJs, openPgpWorkerJs, phpInfo, populateAuthSuffix, root, rootAdmin, rootUser, settings, socialFacebook, socialGoogle, socialTwitter, sound, subQueryPrefix, themePreviewLink, upload, uploadBackground, uploadContacts, userBackground */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return populateAuthSuffix; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return subQueryPrefix; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return root; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return rootAdmin; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return rootUser; });
/* unused harmony export attachmentRaw */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return attachmentDownload; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return attachmentPreview; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return attachmentThumbnailPreview; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return attachmentPreviewAsPlain; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return attachmentFramed; });
/* unused harmony export serverRequest */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return upload; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return uploadContacts; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return uploadBackground; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return append; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return change; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ajax; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return messageViewLink; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return messageDownloadLink; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return avatarLink; });
/* unused harmony export publicLink */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return userBackground; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return phpInfo; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return langLink; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return exportContactsVcf; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return exportContactsCsv; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return socialGoogle; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return socialTwitter; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return socialFacebook; });
/* unused harmony export staticPrefix */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return emptyContactPic; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return sound; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return notificationMailIcon; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return openPgpJs; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return openPgpWorkerJs; });
/* unused harmony export openPgpWorkerPath */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return themePreviewLink; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return inbox; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return settings; });
/* 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_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__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 Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Storage/Settings */ 5);





var ROOT = './',
    HASH_PREFIX = '#/',
    SERVER_PREFIX = './?',
    SUB_QUERY_PREFIX = '&q[]=',
    VERSION = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('version'),
    WEB_PREFIX = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('webPath') || '',
    VERSION_PREFIX = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('webVersionPath') || 'rainloop/v/' + VERSION + '/',
    STATIC_PREFIX = VERSION_PREFIX + 'static/',
    ADMIN_HOST_USE = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('adminHostUse'),
    ADMIN_PATH = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('adminPath') || 'admin';
var AUTH_PREFIX = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"]('AuthAccountHash') || '0';
/**
 * @returns {void}
 */

function populateAuthSuffix() {
  AUTH_PREFIX = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"]('AuthAccountHash') || '0';
}
/**
 * @returns {string}
 */

function subQueryPrefix() {
  return SUB_QUERY_PREFIX;
}
/**
 * @param {string=} startupUrl
 * @returns {string}
 */

function root(startupUrl) {
  if (startupUrl === void 0) {
    startupUrl = '';
  }

  return HASH_PREFIX + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pString"])(startupUrl);
}
/**
 * @returns {string}
 */

function rootAdmin() {
  return ADMIN_HOST_USE ? ROOT : SERVER_PREFIX + ADMIN_PATH;
}
/**
 * @returns {string}
 */

function rootUser() {
  return ROOT;
}
/**
 * @param {string} type
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentRaw(type, download, customSpecSuffix) {
  customSpecSuffix = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isUnd"])(customSpecSuffix) ? AUTH_PREFIX : customSpecSuffix;
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + customSpecSuffix + '/' + type + '/' + SUB_QUERY_PREFIX + '/' + download;
}
/**
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentDownload(download, customSpecSuffix) {
  return attachmentRaw('Download', download, customSpecSuffix);
}
/**
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentPreview(download, customSpecSuffix) {
  return attachmentRaw('View', download, customSpecSuffix);
}
/**
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentThumbnailPreview(download, customSpecSuffix) {
  return attachmentRaw('ViewThumbnail', download, customSpecSuffix);
}
/**
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentPreviewAsPlain(download, customSpecSuffix) {
  return attachmentRaw('ViewAsPlain', download, customSpecSuffix);
}
/**
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentFramed(download, customSpecSuffix) {
  return attachmentRaw('FramedView', download, customSpecSuffix);
}
/**
 * @param {string} type
 * @returns {string}
 */

function serverRequest(type) {
  return SERVER_PREFIX + '/' + type + '/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/';
}
/**
 * @returns {string}
 */

function upload() {
  return serverRequest('Upload');
}
/**
 * @returns {string}
 */

function uploadContacts() {
  return serverRequest('UploadContacts');
}
/**
 * @returns {string}
 */

function uploadBackground() {
  return serverRequest('UploadBackground');
}
/**
 * @returns {string}
 */

function append() {
  return serverRequest('Append');
}
/**
 * @param {string} email
 * @returns {string}
 */

function change(email) {
  return serverRequest('Change') + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["encodeURIComponent"])(email) + '/';
}
/**
 * @param {string} add
 * @returns {string}
 */

function ajax(add) {
  return serverRequest('Ajax') + add;
}
/**
 * @param {string} requestHash
 * @returns {string}
 */

function messageViewLink(requestHash) {
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/ViewAsPlain/' + SUB_QUERY_PREFIX + '/' + requestHash;
}
/**
 * @param {string} requestHash
 * @returns {string}
 */

function messageDownloadLink(requestHash) {
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/Download/' + SUB_QUERY_PREFIX + '/' + requestHash;
}
/**
 * @param {string} email
 * @returns {string}
 */

function avatarLink(email) {
  return SERVER_PREFIX + '/Raw/0/Avatar/' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["encodeURIComponent"])(email) + '/';
}
/**
 * @param {string} hash
 * @returns {string}
 */

function publicLink(hash) {
  return SERVER_PREFIX + '/Raw/0/Public/' + hash + '/';
}
/**
 * @param {string} hash
 * @returns {string}
 */

function userBackground(hash) {
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/UserBackground/' + SUB_QUERY_PREFIX + '/' + hash;
}
/**
 * @returns {string}
 */

function phpInfo() {
  return SERVER_PREFIX + '/Info';
}
/**
 * @param {string} lang
 * @param {boolean} isAdmin
 * @returns {string}
 */

function langLink(lang, isAdmin) {
  return SERVER_PREFIX + '/Lang/0/' + (isAdmin ? 'Admin' : 'App') + '/' + window__WEBPACK_IMPORTED_MODULE_2___default.a.encodeURI(lang) + '/' + VERSION + '/';
}
/**
 * @returns {string}
 */

function exportContactsVcf() {
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/ContactsVcf/';
}
/**
 * @returns {string}
 */

function exportContactsCsv() {
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/ContactsCsv/';
}
/**
 * @param {boolean} xauth = false
 * @returns {string}
 */

function socialGoogle(xauth) {
  if (xauth === void 0) {
    xauth = false;
  }

  return SERVER_PREFIX + 'SocialGoogle' + ('' !== AUTH_PREFIX ? '/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/' : '') + (xauth ? '&xauth=1' : '');
}
/**
 * @returns {string}
 */

function socialTwitter() {
  return SERVER_PREFIX + 'SocialTwitter' + ('' !== AUTH_PREFIX ? '/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/' : '');
}
/**
 * @returns {string}
 */

function socialFacebook() {
  return SERVER_PREFIX + 'SocialFacebook' + ('' !== AUTH_PREFIX ? '/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/' : '');
}
/**
 * @param {string} path
 * @returns {string}
 */

function staticPrefix(path) {
  return STATIC_PREFIX + path;
}
/**
 * @returns {string}
 */

function emptyContactPic() {
  return staticPrefix('css/images/empty-contact.png');
}
/**
 * @param {string} fileName
 * @returns {string}
 */

function sound(fileName) {
  return staticPrefix('sounds/' + fileName);
}
/**
 * @returns {string}
 */

function notificationMailIcon() {
  return staticPrefix('css/images/icom-message-notification.png');
}
/**
 * @returns {string}
 */

function openPgpJs() {
  return staticPrefix('js/min/openpgp.min.js');
}
/**
 * @returns {string}
 */

function openPgpWorkerJs() {
  return staticPrefix('js/min/openpgp.worker.min.js');
}
/**
 * @returns {string}
 */

function openPgpWorkerPath() {
  return staticPrefix('js/min/');
}
/**
 * @param {string} theme
 * @returns {string}
 */

function themePreviewLink(theme) {
  var prefix = VERSION_PREFIX;

  if ('@custom' === theme.substr(-7)) {
    theme = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(theme.substring(0, theme.length - 7));
    prefix = WEB_PREFIX;
  }

  return prefix + 'themes/' + window__WEBPACK_IMPORTED_MODULE_2___default.a.encodeURI(theme) + '/images/preview.png';
}
/**
 * @param {string} inboxFolderName = 'INBOX'
 * @returns {string}
 */

function inbox(inboxFolderName) {
  if (inboxFolderName === void 0) {
    inboxFolderName = 'INBOX';
  }

  return HASH_PREFIX + 'mailbox/' + inboxFolderName;
}
/**
 * @param {string=} screenName = ''
 * @returns {string}
 */

function settings(screenName) {
  if (screenName === void 0) {
    screenName = '';
  }

  return HASH_PREFIX + 'settings' + (screenName ? '/' + screenName : '');
}
/**
 * @returns {string}
 */

function about() {
  return HASH_PREFIX + 'about';
}
/**
 * @param {string} screenName
 * @returns {string}
 */

function admin(screenName) {
  var result = HASH_PREFIX;

  switch (screenName) {
    case 'AdminDomains':
      result += 'domains';
      break;

    case 'AdminSecurity':
      result += 'security';
      break;

    case 'AdminLicensing':
      result += 'licensing';
      break;
    // no default
  }

  return result;
}
/**
 * @param {string} folder
 * @param {number=} page = 1
 * @param {string=} search = ''
 * @param {string=} threadUid = ''
 * @returns {string}
 */

function mailBox(folder, page, search, threadUid) {
  if (page === void 0) {
    page = 1;
  }

  if (search === void 0) {
    search = '';
  }

  if (threadUid === void 0) {
    threadUid = '';
  }

  page = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isNormal"])(page) ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(page) : 1;
  search = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pString"])(search);
  var result = HASH_PREFIX + 'mailbox/';

  if ('' !== folder) {
    var resultThreadUid = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(threadUid);
    result += window__WEBPACK_IMPORTED_MODULE_2___default.a.encodeURI(folder) + (0 < resultThreadUid ? '~' + resultThreadUid : '');
  }

  if (1 < page) {
    result = result.replace(/[/]+$/, '');
    result += '/p' + page;
  }

  if ('' !== search) {
    result = result.replace(/[/]+$/, '');
    result += '/' + window__WEBPACK_IMPORTED_MODULE_2___default.a.encodeURI(search);
  }

  return result;
}

/***/ }),
/* 16 */,
/* 17 */
/*!****************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 348);

/***/ }),
/* 18 */
/*!**********************************!*\
  !*** ./dev/Remote/Admin/Ajax.js ***!
  \**********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* 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 Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Remote/AbstractAjax */ 303);



var RemoteAdminAjax = /*#__PURE__*/function (_AbstractAjaxRemote) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(RemoteAdminAjax, _AbstractAjaxRemote);

  function RemoteAdminAjax() {
    var _this;

    _this = _AbstractAjaxRemote.call(this) || this;
    _this.oRequests = {};
    return _this;
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sLogin
   * @param {string} sPassword
   */


  var _proto = RemoteAdminAjax.prototype;

  _proto.adminLogin = function adminLogin(fCallback, sLogin, sPassword) {
    this.defaultRequest(fCallback, 'AdminLogin', {
      'Login': sLogin,
      'Password': sPassword
    });
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.adminLogout = function adminLogout(fCallback) {
    this.defaultRequest(fCallback, 'AdminLogout');
  }
  /**
   * @param {?Function} fCallback
   * @param {?} oData
   */
  ;

  _proto.saveAdminConfig = function saveAdminConfig(fCallback, oData) {
    this.defaultRequest(fCallback, 'AdminSettingsUpdate', oData);
  }
  /**
   * @param {string} key
   * @param {?Function} valueFn
   * @param {?Function} fn
   */
  ;

  _proto.saveAdminConfigHelper = function saveAdminConfigHelper(key, valueFn, fn) {
    var _this2 = this;

    return function (value) {
      var data = {};
      data[key] = valueFn ? valueFn(value) : value;

      _this2.saveAdminConfig(fn || null, data);
    };
  }
  /**
   * @param {?Function} fCallback
   * @param {boolean=} bIncludeAliases = true
   */
  ;

  _proto.domainList = function domainList(fCallback, bIncludeAliases) {
    if (bIncludeAliases === void 0) {
      bIncludeAliases = true;
    }

    this.defaultRequest(fCallback, 'AdminDomainList', {
      'IncludeAliases': bIncludeAliases ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.pluginList = function pluginList(fCallback) {
    this.defaultRequest(fCallback, 'AdminPluginList');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.packagesList = function packagesList(fCallback) {
    this.defaultRequest(fCallback, 'AdminPackagesList');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.coreData = function coreData(fCallback) {
    this.defaultRequest(fCallback, 'AdminCoreData');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.updateCoreData = function updateCoreData(fCallback) {
    this.defaultRequest(fCallback, 'AdminUpdateCoreData', {}, 90000);
  }
  /**
   * @param {?Function} fCallback
   * @param {Object} oPackage
   */
  ;

  _proto.packageInstall = function packageInstall(fCallback, oPackage) {
    this.defaultRequest(fCallback, 'AdminPackageInstall', {
      'Id': oPackage.id,
      'Type': oPackage.type,
      'File': oPackage.file
    }, 60000);
  }
  /**
   * @param {?Function} fCallback
   * @param {Object} oPackage
   */
  ;

  _proto.packageDelete = function packageDelete(fCallback, oPackage) {
    this.defaultRequest(fCallback, 'AdminPackageDelete', {
      'Id': oPackage.id
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sName
   */
  ;

  _proto.domain = function domain(fCallback, sName) {
    this.defaultRequest(fCallback, 'AdminDomainLoad', {
      'Name': sName
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sName
   */
  ;

  _proto.plugin = function plugin(fCallback, sName) {
    this.defaultRequest(fCallback, 'AdminPluginLoad', {
      'Name': sName
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sName
   */
  ;

  _proto.domainDelete = function domainDelete(fCallback, sName) {
    this.defaultRequest(fCallback, 'AdminDomainDelete', {
      'Name': sName
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sName
   * @param {boolean} bDisabled
   */
  ;

  _proto.domainDisable = function domainDisable(fCallback, sName, bDisabled) {
    return this.defaultRequest(fCallback, 'AdminDomainDisable', {
      Name: sName,
      Disabled: bDisabled ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {Object} oConfig
   */
  ;

  _proto.pluginSettingsUpdate = function pluginSettingsUpdate(fCallback, oConfig) {
    return this.defaultRequest(fCallback, 'AdminPluginSettingsUpdate', oConfig);
  }
  /**
   * @param {?Function} fCallback
   * @param {boolean} bForce
   */
  ;

  _proto.licensing = function licensing(fCallback, bForce) {
    return this.defaultRequest(fCallback, 'AdminLicensing', {
      Force: bForce ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sDomain
   * @param {string} sKey
   */
  ;

  _proto.licensingActivate = function licensingActivate(fCallback, sDomain, sKey) {
    return this.defaultRequest(fCallback, 'AdminLicensingActivate', {
      Domain: sDomain,
      Key: sKey
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sName
   * @param {boolean} bDisabled
   */
  ;

  _proto.pluginDisable = function pluginDisable(fCallback, sName, bDisabled) {
    return this.defaultRequest(fCallback, 'AdminPluginDisable', {
      Name: sName,
      Disabled: bDisabled ? '1' : '0'
    });
  };

  _proto.createDomainAlias = function createDomainAlias(fCallback, sName, sAlias) {
    this.defaultRequest(fCallback, 'AdminDomainAliasSave', {
      Name: sName,
      Alias: sAlias
    });
  };

  _proto.createOrUpdateDomain = function createOrUpdateDomain(fCallback, bCreate, sName, sIncHost, iIncPort, sIncSecure, bIncShortLogin, bUseSieve, sSieveAllowRaw, sSieveHost, iSievePort, sSieveSecure, sOutHost, iOutPort, sOutSecure, bOutShortLogin, bOutAuth, bOutPhpMail, sWhiteList) {
    this.defaultRequest(fCallback, 'AdminDomainSave', {
      'Create': bCreate ? '1' : '0',
      'Name': sName,
      'IncHost': sIncHost,
      'IncPort': iIncPort,
      'IncSecure': sIncSecure,
      'IncShortLogin': bIncShortLogin ? '1' : '0',
      'UseSieve': bUseSieve ? '1' : '0',
      'SieveAllowRaw': sSieveAllowRaw ? '1' : '0',
      'SieveHost': sSieveHost,
      'SievePort': iSievePort,
      'SieveSecure': sSieveSecure,
      'OutHost': sOutHost,
      'OutPort': iOutPort,
      'OutSecure': sOutSecure,
      'OutShortLogin': bOutShortLogin ? '1' : '0',
      'OutAuth': bOutAuth ? '1' : '0',
      'OutUsePhpMail': bOutPhpMail ? '1' : '0',
      'WhiteList': sWhiteList
    });
  };

  _proto.testConnectionForDomain = function testConnectionForDomain(fCallback, sName, sIncHost, iIncPort, sIncSecure, bUseSieve, sSieveHost, iSievePort, sSieveSecure, sOutHost, iOutPort, sOutSecure, bOutAuth, bOutPhpMail) {
    this.defaultRequest(fCallback, 'AdminDomainTest', {
      'Name': sName,
      'IncHost': sIncHost,
      'IncPort': iIncPort,
      'IncSecure': sIncSecure,
      'UseSieve': bUseSieve ? '1' : '0',
      'SieveHost': sSieveHost,
      'SievePort': iSievePort,
      'SieveSecure': sSieveSecure,
      'OutHost': sOutHost,
      'OutPort': iOutPort,
      'OutSecure': sOutSecure,
      'OutAuth': bOutAuth ? '1' : '0',
      'OutUsePhpMail': bOutPhpMail ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {?} oData
   */
  ;

  _proto.testContacts = function testContacts(fCallback, oData) {
    this.defaultRequest(fCallback, 'AdminContactsTest', oData);
  }
  /**
   * @param {?Function} fCallback
   * @param {?} oData
   */
  ;

  _proto.saveNewAdminPassword = function saveNewAdminPassword(fCallback, oData) {
    this.defaultRequest(fCallback, 'AdminPasswordUpdate', oData);
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.adminPing = function adminPing(fCallback) {
    this.defaultRequest(fCallback, 'AdminPing');
  };

  return RemoteAdminAjax;
}(Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_1__[/* AbstractAjaxRemote */ "a"]);

/* harmony default export */ __webpack_exports__["a"] = (new RemoteAdminAjax());

/***/ }),
/* 19 */
/*!*************************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor.js ***!
  \*************************************************************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _applyDecoratedDescriptor; });
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/for-each */ 297);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/object/keys */ 298);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/reduce */ 299);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/reverse */ 300);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/slice */ 301);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/object/define-property */ 302);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_5__);






function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
  var _context, _context2, _context3;

  var desc = {};

  _babel_runtime_corejs3_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default()(_context = _babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_1___default()(descriptor)).call(_context, function (key) {
    desc[key] = descriptor[key];
  });

  desc.enumerable = !!desc.enumerable;
  desc.configurable = !!desc.configurable;

  if ('value' in desc || desc.initializer) {
    desc.writable = true;
  }

  desc = _babel_runtime_corejs3_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_2___default()(_context2 = _babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_3___default()(_context3 = _babel_runtime_corejs3_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_4___default()(decorators).call(decorators)).call(_context3)).call(_context2, function (desc, decorator) {
    return decorator(target, property, desc) || desc;
  }, desc);

  if (context && desc.initializer !== void 0) {
    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
    desc.initializer = undefined;
  }

  if (desc.initializer === void 0) {
    _babel_runtime_corejs3_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_5___default()(target, property, desc);

    desc = null;
  }

  return desc;
}

/***/ }),
/* 20 */
/*!**************************************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js ***!
  \**************************************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-descriptor */ 389);

/***/ }),
/* 21 */
/*!*****************************!*\
  !*** external "window.key" ***!
  \*****************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.key;

/***/ }),
/* 22 */,
/* 23 */
/*!******************************!*\
  !*** ./dev/Common/Events.js ***!
  \******************************/
/*! exports provided: sub, pub */
/*! exports used: pub, sub */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return sub; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return pub; });
/* 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 */ 36);



var SUBS = {};
/**
 * @param {string|Object} name
 * @param {Function} func
 * @param {Object=} context
 */

function sub(name, func, context) {
  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isObject"])(name)) {
    context = func || null;
    func = null;

    ___WEBPACK_IMPORTED_MODULE_0___default.a.each(name, function (subFunc, subName) {
      sub(subName, subFunc, context);
    });
  } else {
    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(SUBS[name])) {
      SUBS[name] = [];
    }

    SUBS[name].push([func, context]);
  }
}
/**
 * @param {string} name
 * @param {Array=} args
 */

function pub(name, args) {
  Common_Plugins__WEBPACK_IMPORTED_MODULE_2__[/* runHook */ "f"]('rl-pub', [name, args]);

  if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(SUBS[name])) {
    ___WEBPACK_IMPORTED_MODULE_0___default.a.each(SUBS[name], function (items) {
      if (items[0]) {
        items[0].apply(items[1] || null, args || []);
      }
    });
  }
}

/***/ }),
/* 24 */
/*!******************************!*\
  !*** ./dev/Common/Consts.js ***!
  \******************************/
/*! exports provided: MESSAGES_PER_PAGE, MESSAGES_PER_PAGE_VALUES, CONTACTS_PER_PAGE, DEFAULT_AJAX_TIMEOUT, SEARCH_AJAX_TIMEOUT, SEND_MESSAGE_AJAX_TIMEOUT, SAVE_MESSAGE_AJAX_TIMEOUT, CONTACTS_SYNC_AJAX_TIMEOUT, UNUSED_OPTION_VALUE, CLIENT_SIDE_STORAGE_INDEX_NAME, IMAP_DEFAULT_PORT, IMAP_DEFAULT_SECURE_PORT, SMTP_DEFAULT_PORT, SMTP_DEFAULT_SECURE_PORT, SIEVE_DEFAULT_PORT, MESSAGE_BODY_CACHE_LIMIT, AJAX_ERROR_LIMIT, TOKEN_ERROR_LIMIT, RAINLOOP_TRIAL_KEY, DATA_IMAGE_USER_DOT_PIC, DATA_IMAGE_TRANSP_PIC, DATA_IMAGE_LAZY_PLACEHOLDER_PIC */
/*! exports used: AJAX_ERROR_LIMIT, CLIENT_SIDE_STORAGE_INDEX_NAME, CONTACTS_PER_PAGE, CONTACTS_SYNC_AJAX_TIMEOUT, DATA_IMAGE_LAZY_PLACEHOLDER_PIC, DATA_IMAGE_USER_DOT_PIC, DEFAULT_AJAX_TIMEOUT, IMAP_DEFAULT_PORT, MESSAGES_PER_PAGE, MESSAGES_PER_PAGE_VALUES, MESSAGE_BODY_CACHE_LIMIT, SAVE_MESSAGE_AJAX_TIMEOUT, SEARCH_AJAX_TIMEOUT, SEND_MESSAGE_AJAX_TIMEOUT, SIEVE_DEFAULT_PORT, SMTP_DEFAULT_PORT, TOKEN_ERROR_LIMIT, UNUSED_OPTION_VALUE */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return MESSAGES_PER_PAGE; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return MESSAGES_PER_PAGE_VALUES; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return CONTACTS_PER_PAGE; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return DEFAULT_AJAX_TIMEOUT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return SEARCH_AJAX_TIMEOUT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return SEND_MESSAGE_AJAX_TIMEOUT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return SAVE_MESSAGE_AJAX_TIMEOUT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return CONTACTS_SYNC_AJAX_TIMEOUT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return UNUSED_OPTION_VALUE; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return CLIENT_SIDE_STORAGE_INDEX_NAME; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return IMAP_DEFAULT_PORT; });
/* unused harmony export IMAP_DEFAULT_SECURE_PORT */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return SMTP_DEFAULT_PORT; });
/* unused harmony export SMTP_DEFAULT_SECURE_PORT */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return SIEVE_DEFAULT_PORT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return MESSAGE_BODY_CACHE_LIMIT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AJAX_ERROR_LIMIT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return TOKEN_ERROR_LIMIT; });
/* unused harmony export RAINLOOP_TRIAL_KEY */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return DATA_IMAGE_USER_DOT_PIC; });
/* unused harmony export DATA_IMAGE_TRANSP_PIC */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return DATA_IMAGE_LAZY_PLACEHOLDER_PIC; });
var MESSAGES_PER_PAGE = 20;
var MESSAGES_PER_PAGE_VALUES = [10, 20, 30, 50, 100];
var CONTACTS_PER_PAGE = 50;
var DEFAULT_AJAX_TIMEOUT = 30000;
var SEARCH_AJAX_TIMEOUT = 300000;
var SEND_MESSAGE_AJAX_TIMEOUT = 300000;
var SAVE_MESSAGE_AJAX_TIMEOUT = 200000;
var CONTACTS_SYNC_AJAX_TIMEOUT = 200000;
var UNUSED_OPTION_VALUE = '__UNUSE__';
var CLIENT_SIDE_STORAGE_INDEX_NAME = 'rlcsc';
var IMAP_DEFAULT_PORT = 143;
var IMAP_DEFAULT_SECURE_PORT = 993;
var SMTP_DEFAULT_PORT = 25;
var SMTP_DEFAULT_SECURE_PORT = 465;
var SIEVE_DEFAULT_PORT = 4190;
var MESSAGE_BODY_CACHE_LIMIT = 15;
var AJAX_ERROR_LIMIT = 7;
var TOKEN_ERROR_LIMIT = 10;
var RAINLOOP_TRIAL_KEY = 'RAINLOOP-TRIAL-KEY';
/* eslint max-len: 0 */

var DATA_IMAGE_USER_DOT_PIC = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAYAAABXuSs3AAAHHklEQVRoQ7VZW08bVxCeXRuwIbTGXIwNtBBaqjwgVUiR8lDlbza9qe1DpVZ9aNQ/0KpPeaJK07SpcuEeCEmUAObm21bfrL9lONjexSYrWfbunj37zXdmvpkz9oIgCKTD0Wg0xPd94TDP83Q0zvWa50vzklSrdanVanqf4/D84GBGr+F+Op3S8fqoJxLOdnZgTvsO/nYhenHA+UC7CWF1uXwkb9++ldPTUwVerVbVqFQqpR8YPjQ0JCMjI5LNDijoRgP3PQVu5+5Eor2XGLg7IV4GkIdHJ/LmzRs5ODiIwNbrdR0O0GCcq4Xz4eFhmZyclP7+tDQaIik/BG5XKQn4SwG3zJTLZXn9+rUclI8UHD5YVoDDN8bSzXhONwL48fFxGR4eilzFZT1uFRIB5yT8BqCdnR3Z3d0VP9Un6XRawYJpggVrZBv38ME4XKtUKnLt2jUplUoy1PR/l3U7T6sVSAQcgMAkj8PDQ9ne3pajoyMRL7zeKsYZWHgWYDGmv78/mmdwcFA+mJlSgziHDWrERrsjEXDXegTi1tZW+DLxI2bxIrqFNYTXyDyCFweMAHCwb8e4RnTNuOsqe3t7sra21pTD0Kct666E8XlcZyzw9/RUUXK5nK5oUinUQI6TQ3cynO/v78vq6qrKXCNwlTiJJpyNGc3nZHp6uqV2dwrQWOCtZBDAV1ZWwsQk7f0wiQn5kffbAu/0/KWBYzIC1+XukfGx0RGZmppKlC2tIV0Bh4aDcZW7HhkfH8urLLZL7T2pihvlkMNnz56FiadHxicL41IsFpN41bkxsYxbRdFo9jwB8KdPn14J8KnSpBQKhQs63nPmbCVRcBUAR2Lq1VVmpksyMTFxAXjcEsQybiegESionjx5osCZOeNe1O4+EhCAX7bQSgQcxRHTMgAgcz5+/Dis/hL4uHU3/B4YGNASGHIKxuEql0k+l05AeIAF1vPnz5VxFFmdDlaJrMtZITJeSsXCOTlMunKxjLtMYOKNjQ158eJFuAuKkUOb5sEwgff19SkJUBVkThZUbnXZrtCKBQ6gbnWIkjZpyne3ejAWoGnA7Icz6irvBLgbOMicCM6TkxPx/LAkbXfgWcsazuE2kFRsKD5Z+CiqDumKncpZvieWcS6dDVD8xiYCNflpJdwcdwJOf9airLmVQ7DPzMxIYWLsXGXoVqLt5k0M3K3JUVPDZdbWNzsCp48TPFdvdnZWUz32nDha7bJ63kgAJPzSdRks9/Kf9xMJAQ1gq2NpaUmy2Yz4zar4nQC3xb99AQwCcGzLAAwuhG8YiWvcOKts+r4GOe5nMhm5efOm9lUA3E3vSZJRrKvE0fnPv//Jy5cvo5cTHIPQbSjhOoqq69evS19f6lxDKK4+sVhigZPtKJqbrQeqxd5+WR4+fKgqgT0k2XX3nhiPgETWXFhYkFzuPZ2yVq1GTSOXpE47/VjgNnD4m4GG7/LhsTx69EiwD4Vr2MwIIxgbAH18fKx1yfz8vEogNvGtWnCuhLZa9UTAreVWFsHy/b/+Vrbdl7E5REMQD2jDoUbByty+/ZnU64GkU2HzyJLhktU1cLv8nARgkYS2d3ajAgwG8qU2oLmDZ92CMaOjo7K4uCiZgbDWaRWgnZhPxLhrMUCvr69riwKZk1LHF7XqrWAO9hJxH6ozNzcnCx/PqztZg9mf6SQMscCtm2C5ke4BGMlHWTUp36036AJajDVrFMzBrhhWslQsSrFYiOqVpMriNYIgqFRq2j3FAb/zffT6zuxFXxsNzs3NTXn16lW4gYiW96w1FyedF+83xG/2FNGCRpU4NjamMsn+OZ9xE5RXqdaDdPpib6RWCzuwKF9RxqI2AVNQBwQYJoK0wdBejnqtEikP3pfP51XjUTESl12FqJEKxsEorARYDD44ONTeID7YpsEnrRvQfWAI2e8WfDaTUSIwJ0iBCmFOtOUAHvVMPp/TPwvYFVYFIuP8l+DBgwdaa2Miqwa0GgYwfeMltovbDfh6c1vIgMYcliSsKv4IWFr6VDHxvldvBAH+1sA+cnl5WYOPmmr9ir+1l9I0Cgz0yjhXjfJJ0JROnmezWbl165ayr/5fqwcBNr7IfhjMqKcvESSM4eRcCasQ3bDNObmKPLdGUGpZsN24cUNLBm9zazu4d++e6qpNBFaTuUS26U5dpuR1CxyA7J9ddrMRqlz4pwLLYawymPd++/2PADt2ugcGwq9gCCdhQ96C6xWwa6j1ceuq+I0EhW0i8MAIVJfeL3d/DVD8EKi12P6/2S2jV/EccVB54O/ejz/9HGCpoBBMta5rXMXLu53D1XAwjhXwvvv+h4BAXVe4bOu3O3ChxF08LiZFG3fel199G9CH3fLyqv24NcB44MRhpdK788U3CpyKwsCw590xmfSpzsBt0Fqc3ud3vtZigxWcVZCklVpSiN0w3q5E/h9TGMIUuA3+EQAAAABJRU5ErkJggg==';
var DATA_IMAGE_TRANSP_PIC = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII=';
var DATA_IMAGE_LAZY_PLACEHOLDER_PIC = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC';

/***/ }),
/* 25 */
/*!***************************************!*\
  !*** ./dev/Knoin/AbstractViewNext.js ***!
  \***************************************/
/*! exports provided: AbstractViewNext */
/*! exports used: AbstractViewNext */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractViewNext; });
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* 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);




var AbstractViewNext = /*#__PURE__*/function () {
  function AbstractViewNext() {
    this.bDisabeCloseOnEsc = false;
    this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_2__["KeyState"].None;
    this.sCurrentKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_2__["KeyState"].None;
    this.viewModelVisibility = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.modalVisibility = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
      rateLimit: 0
    });
    this.viewModelName = '';
    this.viewModelNames = [];
    this.viewModelDom = null;
  }

  var _proto = AbstractViewNext.prototype;

  /**
   * @returns {void}
   */
  _proto.storeAndSetKeyScope = function storeAndSetKeyScope() {
    this.sCurrentKeyScope = Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])();
    Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])(this.sDefaultKeyScope);
  }
  /**
   * @returns {void}
   */
  ;

  _proto.restoreKeyScope = function restoreKeyScope() {
    Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])(this.sCurrentKeyScope);
  }
  /**
   * @returns {void}
   */
  ;

  _proto.registerPopupKeyDown = function registerPopupKeyDown() {
    var _this = this;

    Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$win"].on('keydown', function (event) {
      if (event && _this.modalVisibility && _this.modalVisibility()) {
        if (!_this.bDisabeCloseOnEsc && Common_Enums__WEBPACK_IMPORTED_MODULE_2__["EventKeyCode"].Esc === event.keyCode) {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["delegateRun"])(_this, 'cancelCommand');
          return false;
        } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_2__["EventKeyCode"].Backspace === event.keyCode && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["inFocus"])()) {
          return false;
        }
      }

      return true;
    });
  };

  _proto.cancelCommand = function cancelCommand() {} // eslint-disable-line no-empty-function
  ;

  _proto.closeCommand = function closeCommand() {} // eslint-disable-line no-empty-function
  ;

  return AbstractViewNext;
}();

/***/ }),
/* 26 */
/*!******************************!*\
  !*** ./dev/Stores/Social.js ***!
  \******************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* 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__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Storage/Settings */ 5);





var SocialStore = /*#__PURE__*/function () {
  function SocialStore() {
    var _this = this;

    this.google = {};
    this.twitter = {};
    this.facebook = {};
    this.dropbox = {}; // Google

    this.google.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.google.clientID = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.google.clientSecret = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.google.apiKey = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.google.loading = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.google.userName = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.google.loggined = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return '' !== _this.google.userName();
    });
    this.google.capa = {};
    this.google.capa.auth = 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.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();
    }); // Facebook

    this.facebook.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.facebook.appID = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.facebook.appSecret = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.facebook.loading = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.facebook.userName = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.facebook.supported = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.facebook.loggined = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return '' !== _this.facebook.userName();
    }); // Twitter

    this.twitter.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.twitter.consumerKey = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.twitter.consumerSecret = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.twitter.loading = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.twitter.userName = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.twitter.loggined = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return '' !== _this.twitter.userName();
    }); // Dropbox

    this.dropbox.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.dropbox.apiKey = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
  }

  var _proto = SocialStore.prototype;

  _proto.populate = function populate() {
    this.google.enabled(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocial'));
    this.google.clientID(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('GoogleClientID'));
    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.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'));
    this.facebook.appID(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('FacebookAppID'));
    this.facebook.appSecret(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('FacebookAppSecret'));
    this.facebook.supported(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('SupportedFacebookSocial'));
    this.twitter.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowTwitterSocial'));
    this.twitter.consumerKey = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('TwitterConsumerKey'));
    this.twitter.consumerSecret = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('TwitterConsumerSecret'));
    this.dropbox.enabled(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowDropboxSocial'));
    this.dropbox.apiKey(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('DropboxApiKey'));
  };

  _proto.appendDropbox = function appendDropbox() {
    if (!window__WEBPACK_IMPORTED_MODULE_0___default.a.Dropbox && this.dropbox.enabled() && this.dropbox.apiKey()) {
      if (!window__WEBPACK_IMPORTED_MODULE_0___default.a.document.getElementById('dropboxjs')) {
        var script = window__WEBPACK_IMPORTED_MODULE_0___default.a.document.createElement('script');
        script.type = 'text/javascript';
        script.src = 'https://www.dropbox.com/static/api/2/dropins.js';
        $__WEBPACK_IMPORTED_MODULE_2___default()(script).attr('id', 'dropboxjs').attr('data-app-key', this.dropbox.apiKey());
        window__WEBPACK_IMPORTED_MODULE_0___default.a.document.body.appendChild(script);
      }
    }
  };

  return SocialStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new SocialStore());

/***/ }),
/* 27 */,
/* 28 */
/*!*******************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ 358);

/***/ }),
/* 29 */
/*!**********************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/assertThisInitialized.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (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");
  }

  return self;
}

/***/ }),
/* 30 */
/*!**************************************************!*\
  !*** ./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 es/no-global-this -- safe
  check(typeof globalThis == 'object' && globalThis) ||
  check(typeof window == 'object' && window) ||
  // eslint-disable-next-line no-restricted-globals -- safe
  check(typeof self == 'object' && self) ||
  check(typeof global == 'object' && global) ||
  // eslint-disable-next-line no-new-func -- fallback
  (function () { return this; })() || Function('return this')();

/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 126)))

/***/ }),
/* 31 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/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; })() || Function('return this')();

/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 126)))

/***/ }),
/* 32 */
/*!***********************************!*\
  !*** ./dev/Component/Abstract.js ***!
  \***********************************/
/*! exports provided: AbstractComponent, componentExportHelper */
/*! exports used: AbstractComponent, componentExportHelper */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractComponent; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return componentExportHelper; });
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 151);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* 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);






var AbstractComponent = /*#__PURE__*/function () {
  function AbstractComponent() {
    this.disposable = [];
  }

  var _proto = AbstractComponent.prototype;

  _proto.dispose = function dispose() {
    this.disposable.forEach(function (funcToDispose) {
      if (funcToDispose && funcToDispose.dispose) {
        funcToDispose.dispose();
      }
    });
  };

  return AbstractComponent;
}();
/**
 * @param {*} ClassObject
 * @param {string} templateID = ''
 * @returns {Object}
 */


var componentExportHelper = function componentExportHelper(ClassObject, templateID) {
  if (templateID === void 0) {
    templateID = '';
  }

  return {
    template: templateID ? {
      element: templateID
    } : '<b></b>',
    viewModel: {
      createViewModel: function createViewModel(params, componentInfo) {
        params = params || {};
        params.element = null;

        if (componentInfo && componentInfo.element) {
          params.component = componentInfo;
          params.element = $__WEBPACK_IMPORTED_MODULE_1___default()(componentInfo.element);
          Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18nToNodes"])(params.element);

          if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isUnd"])(params.inline) && ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].unwrap(params.inline)) {
            params.element.css('display', 'inline-block');
          }
        }

        return new ClassObject(params);
      }
    }
  };
};



/***/ }),
/* 33 */
/*!***************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js ***!
  \***************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/set-timeout */ 248);

/***/ }),
/* 34 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/internals/export.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var global = __webpack_require__(/*! ../internals/global */ 31);
var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 157).f;
var isForced = __webpack_require__(/*! ../internals/is-forced */ 187);
var path = __webpack_require__(/*! ../internals/path */ 51);
var bind = __webpack_require__(/*! ../internals/function-bind-context */ 116);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var has = __webpack_require__(/*! ../internals/has */ 54);

var wrapConstructor = function (NativeConstructor) {
  var Wrapper = function (a, b, c) {
    if (this instanceof NativeConstructor) {
      switch (arguments.length) {
        case 0: return new NativeConstructor();
        case 1: return new NativeConstructor(a);
        case 2: return new NativeConstructor(a, b);
      } return new NativeConstructor(a, b, c);
    } return NativeConstructor.apply(this, arguments);
  };
  Wrapper.prototype = NativeConstructor.prototype;
  return Wrapper;
};

/*
  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 PROTO = options.proto;

  var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;

  var target = GLOBAL ? path : path[TARGET] || (path[TARGET] = {});
  var targetPrototype = target.prototype;

  var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;
  var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;

  for (key in source) {
    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
    // contains in native
    USE_NATIVE = !FORCED && nativeSource && has(nativeSource, key);

    targetProperty = target[key];

    if (USE_NATIVE) if (options.noTargetGet) {
      descriptor = getOwnPropertyDescriptor(nativeSource, key);
      nativeProperty = descriptor && descriptor.value;
    } else nativeProperty = nativeSource[key];

    // export native or implementation
    sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];

    if (USE_NATIVE && typeof targetProperty === typeof sourceProperty) continue;

    // bind timers to global for call from export context
    if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);
    // wrap global constructors for prevent changs in this version
    else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);
    // make static versions for prototype methods
    else if (PROTO && typeof sourceProperty == 'function') resultProperty = bind(Function.call, sourceProperty);
    // default case
    else resultProperty = sourceProperty;

    // add a flag to not completely full polyfills
    if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {
      createNonEnumerableProperty(resultProperty, 'sham', true);
    }

    target[key] = resultProperty;

    if (PROTO) {
      VIRTUAL_PROTOTYPE = TARGET + 'Prototype';
      if (!has(path, VIRTUAL_PROTOTYPE)) {
        createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});
      }
      // export virtual prototype methods
      path[VIRTUAL_PROTOTYPE][key] = sourceProperty;
      // export real prototype methods
      if (options.real && targetPrototype && !targetPrototype[key]) {
        createNonEnumerableProperty(targetPrototype, key, sourceProperty);
      }
    }
  }
};


/***/ }),
/* 35 */,
/* 36 */
/*!*******************************!*\
  !*** ./dev/Common/Plugins.js ***!
  \*******************************/
/*! exports provided: addHook, runHook, mainSettingsGet, remoteRequest, addSettingsViewModel, addSettingsViewModelForAdmin, runSettingsViewModelHooks, settingsGet */
/*! exports used: addHook, addSettingsViewModel, addSettingsViewModelForAdmin, mainSettingsGet, remoteRequest, runHook, runSettingsViewModelHooks, settingsGet */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return addHook; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return runHook; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return mainSettingsGet; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return remoteRequest; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return addSettingsViewModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return addSettingsViewModelForAdmin; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return runSettingsViewModelHooks; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return settingsGet; });
/* 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_Globals__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Storage/Settings */ 5);




var SIMPLE_HOOKS = {},
    USER_VIEW_MODELS_HOOKS = [],
    ADMIN_VIEW_MODELS_HOOKS = [];
/**
 * @param {string} name
 * @param {Function} callback
 */

function addHook(name, callback) {
  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isFunc"])(callback)) {
    if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(SIMPLE_HOOKS[name])) {
      SIMPLE_HOOKS[name] = [];
    }

    SIMPLE_HOOKS[name].push(callback);
  }
}
/**
 * @param {string} name
 * @param {Array=} args = []
 */

function runHook(name, args) {
  if (args === void 0) {
    args = [];
  }

  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(SIMPLE_HOOKS[name])) {
    ___WEBPACK_IMPORTED_MODULE_0___default.a.each(SIMPLE_HOOKS[name], function (callback) {
      callback.apply(void 0, args);
    });
  }
}
/**
 * @param {string} name
 * @returns {?}
 */

function mainSettingsGet(name) {
  return Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"](name);
}
/**
 * @param {Function} callback
 * @param {string} action
 * @param {Object=} parameters
 * @param {?number=} timeout
 */

function remoteRequest(callback, action, parameters, timeout) {
  if (Common_Globals__WEBPACK_IMPORTED_MODULE_2__["data"].__APP__) {
    Common_Globals__WEBPACK_IMPORTED_MODULE_2__["data"].__APP__.remote().defaultRequest(callback, 'Plugin' + action, parameters, timeout);
  }
}
/**
 * @param {Function} SettingsViewModelClass
 * @param {string} labelName
 * @param {string} template
 * @param {string} route
 */

function addSettingsViewModel(SettingsViewModelClass, template, labelName, route) {
  USER_VIEW_MODELS_HOOKS.push([SettingsViewModelClass, template, labelName, route]);
}
/**
 * @param {Function} SettingsViewModelClass
 * @param {string} labelName
 * @param {string} template
 * @param {string} route
 */

function addSettingsViewModelForAdmin(SettingsViewModelClass, template, labelName, route) {
  ADMIN_VIEW_MODELS_HOOKS.push([SettingsViewModelClass, template, labelName, route]);
}
/**
 * @param {boolean} admin
 */

function runSettingsViewModelHooks(admin) {
  var Knoin = __webpack_require__(/*! Knoin/Knoin */ 8);

  ___WEBPACK_IMPORTED_MODULE_0___default.a.each(admin ? ADMIN_VIEW_MODELS_HOOKS : USER_VIEW_MODELS_HOOKS, function (view) {
    Knoin.addSettingsViewModel(view[0], view[1], view[2], view[3]);
  });
}
/**
 * @param {string} pluginSection
 * @param {string} name
 * @returns {?}
 */

function settingsGet(pluginSection, name) {
  var plugins = Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('Plugins');
  plugins = plugins && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(plugins[pluginSection]) ? plugins[pluginSection] : null;
  return plugins ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(plugins[name]) ? null : plugins[name] : null;
}

/***/ }),
/* 37 */
/*!*************************************************!*\
  !*** ./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;
  }
};


/***/ }),
/* 38 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/well-known-symbol.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var shared = __webpack_require__(/*! ../internals/shared */ 188);
var has = __webpack_require__(/*! ../internals/has */ 54);
var uid = __webpack_require__(/*! ../internals/uid */ 189);
var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 192);
var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 261);

var WellKnownSymbolsStore = shared('wks');
var Symbol = global.Symbol;
var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;

module.exports = function (name) {
  if (!has(WellKnownSymbolsStore, name)) {
    if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];
    else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
  } return WellKnownSymbolsStore[name];
};


/***/ }),
/* 39 */
/*!*************************************************************!*\
  !*** ./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 */ 30);
var shared = __webpack_require__(/*! ../internals/shared */ 104);
var has = __webpack_require__(/*! ../internals/has */ 44);
var uid = __webpack_require__(/*! ../internals/uid */ 136);
var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 137);
var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 213);

var WellKnownSymbolsStore = shared('wks');
var Symbol = global.Symbol;
var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;

module.exports = function (name) {
  if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {
    if (NATIVE_SYMBOL && has(Symbol, name)) {
      WellKnownSymbolsStore[name] = Symbol[name];
    } else {
      WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
    }
  } return WellKnownSymbolsStore[name];
};


/***/ }),
/* 40 */
/*!**********************************!*\
  !*** ./dev/Stores/Admin/Core.js ***!
  \**********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);


var CoreAdminStore = function CoreAdminStore() {
  this.coreReal = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
  this.coreChannel = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('stable');
  this.coreType = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('stable');
  this.coreUpdatable = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
  this.coreAccess = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
  this.coreWarning = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
  this.coreChecking = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
    throttle: 100
  });
  this.coreUpdating = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
    throttle: 100
  });
  this.coreVersion = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
  this.coreRemoteVersion = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
  this.coreRemoteRelease = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
  this.coreVersionCompare = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(-2);
};

/* harmony default export */ __webpack_exports__["a"] = (new CoreAdminStore());

/***/ }),
/* 41 */,
/* 42 */
/*!*****************************************************!*\
  !*** ./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 */ 49);

module.exports = function (it) {
  if (!isObject(it)) {
    throw TypeError(String(it) + ' is not an object');
  } return it;
};


/***/ }),
/* 43 */
/*!******************************************************!*\
  !*** ./node_modules/core-js-pure/internals/fails.js ***!
  \******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (error) {
    return true;
  }
};


/***/ }),
/* 44 */
/*!***********************************************!*\
  !*** ./node_modules/core-js/internals/has.js ***!
  \***********************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toObject = __webpack_require__(/*! ../internals/to-object */ 89);

var hasOwnProperty = {}.hasOwnProperty;

module.exports = function hasOwn(it, key) {
  return hasOwnProperty.call(toObject(it), key);
};


/***/ }),
/* 45 */
/*!********************************************************!*\
  !*** ./node_modules/core-js/modules/es.regexp.exec.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 65);
var exec = __webpack_require__(/*! ../internals/regexp-exec */ 162);

// `RegExp.prototype.exec` method
// https://tc39.es/ecma262/#sec-regexp.prototype.exec
$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {
  exec: exec
});


/***/ }),
/* 46 */,
/* 47 */
/*!**************************************************************************!*\
  !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***!
  \**************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 55);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 66);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 95);

module.exports = DESCRIPTORS ? function (object, key, value) {
  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),
/* 48 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/modules/es.function.name.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 55);
var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 66).f;

var FunctionPrototype = Function.prototype;
var FunctionPrototypeToString = FunctionPrototype.toString;
var nameRE = /^\s*function ([^ (]*)/;
var NAME = 'name';

// Function instances `.name` property
// https://tc39.es/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 '';
      }
    }
  });
}


/***/ }),
/* 49 */
/*!*****************************************************!*\
  !*** ./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';
};


/***/ }),
/* 50 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/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';
};


/***/ }),
/* 51 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js-pure/internals/path.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 52 */
/*!*******************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/create-non-enumerable-property.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 81);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90);

module.exports = DESCRIPTORS ? function (object, key, value) {
  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),
/* 53 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/descriptors.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);

// Detect IE8's incomplete defineProperty implementation
module.exports = !fails(function () {
  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
});


/***/ }),
/* 54 */
/*!****************************************************!*\
  !*** ./node_modules/core-js-pure/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);
};


/***/ }),
/* 55 */
/*!*******************************************************!*\
  !*** ./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 */ 37);

// Detect IE8's incomplete defineProperty implementation
module.exports = !fails(function () {
  // eslint-disable-next-line es/no-object-defineproperty -- required for testing
  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
});


/***/ }),
/* 56 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js/internals/require-object-coercible.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// `RequireObjectCoercible` abstract operation
// https://tc39.es/ecma262/#sec-requireobjectcoercible
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on " + it);
  return it;
};


/***/ }),
/* 57 */
/*!****************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/set-interval.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/set-interval */ 283);

/***/ }),
/* 58 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/an-object.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 50);

module.exports = function (it) {
  if (!isObject(it)) {
    throw TypeError(String(it) + ' is not an object');
  } return it;
};


/***/ }),
/* 59 */
/*!***********************************************************!*\
  !*** ./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 */ 149);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var toLength = __webpack_require__(/*! ../internals/to-length */ 84);
var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);
var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 171);
var getSubstitution = __webpack_require__(/*! ../internals/get-substitution */ 282);
var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 150);

var max = Math.max;
var min = Math.min;

var maybeToString = function (it) {
  return it === undefined ? it : String(it);
};

// @@replace logic
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.es/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.es/ecma262/#sec-regexp.prototype-@@replace
    function (regexp, replaceValue) {
      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);

      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);
    }
  ];
});


/***/ }),
/* 60 */,
/* 61 */
/*!********************************!*\
  !*** ./dev/Common/Momentor.js ***!
  \********************************/
/*! exports provided: momentNow, momentNowUnix, searchSubtractFormatDateHelper, format, momentToNode, reload */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "momentNow", function() { return momentNow; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "momentNowUnix", function() { return momentNowUnix; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "searchSubtractFormatDateHelper", function() { return searchSubtractFormatDateHelper; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "format", function() { return format; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "momentToNode", function() { return momentToNode; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reload", function() { return reload; });
/* 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__);
/* 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 $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* 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 */ 100);
/* 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);





var _moment = null;
var _momentNow = 0;

var updateMomentNow = ___WEBPACK_IMPORTED_MODULE_1___default.a.debounce(function () {
  _moment = moment__WEBPACK_IMPORTED_MODULE_3___default()();
}, 500, true);

var updateMomentNowUnix = ___WEBPACK_IMPORTED_MODULE_1___default.a.debounce(function () {
  _momentNow = moment__WEBPACK_IMPORTED_MODULE_3___default()().unix();
}, 500, true);
/**
 * @returns {moment}
 */


function momentNow() {
  updateMomentNow();
  return _moment || moment__WEBPACK_IMPORTED_MODULE_3___default()();
}
/**
 * @returns {number}
 */

function momentNowUnix() {
  updateMomentNowUnix();
  return _momentNow || 0;
}
/**
 * @param {number} date
 * @returns {string}
 */

function searchSubtractFormatDateHelper(date) {
  return momentNow().clone().subtract(date, 'days').format('YYYY.MM.DD');
}
/**
 * @param {Object} m
 * @returns {string}
 */

function formatCustomShortDate(m) {
  var now = momentNow();

  if (m && now) {
    switch (true) {
      case 4 >= now.diff(m, 'hours'):
        return m.fromNow();

      case now.format('L') === m.format('L'):
        return Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('MESSAGE_LIST/TODAY_AT', {
          TIME: m.format('LT')
        });

      case now.clone().subtract(1, 'days').format('L') === m.format('L'):
        return Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('MESSAGE_LIST/YESTERDAY_AT', {
          TIME: m.format('LT')
        });

      case now.year() === m.year():
        return m.format('D MMM.');
      // no default
    }
  }

  return m ? m.format('LL') : '';
}
/**
 * @param {number} timeStampInUTC
 * @param {string} formatStr
 * @returns {string}
 */


function format(timeStampInUTC, formatStr) {
  var m = null,
      result = '';
  var now = momentNowUnix();
  timeStampInUTC = 0 < timeStampInUTC ? timeStampInUTC : 0 === timeStampInUTC ? now : 0;
  timeStampInUTC = now < timeStampInUTC ? now : timeStampInUTC;
  m = 0 < timeStampInUTC ? moment__WEBPACK_IMPORTED_MODULE_3___default.a.unix(timeStampInUTC) : null;

  if (m && 1970 === m.year()) {
    m = null;
  }

  if (m) {
    switch (formatStr) {
      case 'FROMNOW':
        result = m.fromNow();
        break;

      case 'SHORT':
        result = formatCustomShortDate(m);
        break;

      case 'FULL':
        result = m.format('LLL');
        break;

      default:
        result = m.format(formatStr);
        break;
    }
  }

  return result;
}
/**
 * @param {Object} element
 * @returns {void}
 */

function momentToNode(element) {
  var key = '',
      time = 0;
  var $el = $__WEBPACK_IMPORTED_MODULE_2___default()(element);
  time = $el.data('moment-time');

  if (time) {
    key = $el.data('moment-format');

    if (key) {
      $el.text(format(time, key));
    }

    key = $el.data('moment-format-title');

    if (key) {
      $el.attr('title', format(time, key));
    }
  }
}
/**
 * @returns {void}
 */

function reload() {
  ___WEBPACK_IMPORTED_MODULE_1___default.a.defer(function () {
    $__WEBPACK_IMPORTED_MODULE_2___default()('.moment', window__WEBPACK_IMPORTED_MODULE_0___default.a.document).each(function (index, item) {
      momentToNode(item);
    });
  });
}

/***/ }),
/* 62 */
/*!***********************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/promise */ 251);

/***/ }),
/* 63 */
/*!********************************!*\
  !*** external "window.hasher" ***!
  \********************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.hasher;

/***/ }),
/* 64 */,
/* 65 */
/*!**************************************************!*\
  !*** ./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 */ 30);
var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 127).f;
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var redefine = __webpack_require__(/*! ../internals/redefine */ 69);
var setGlobal = __webpack_require__(/*! ../internals/set-global */ 96);
var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 209);
var isForced = __webpack_require__(/*! ../internals/is-forced */ 182);

/*
  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);
  }
};


/***/ }),
/* 66 */
/*!******************************************************************!*\
  !*** ./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 */ 55);
var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 134);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 133);

// eslint-disable-next-line es/no-object-defineproperty -- safe
var $defineProperty = Object.defineProperty;

// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
exports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return $defineProperty(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;
};


/***/ }),
/* 67 */,
/* 68 */
/*!**********************************!*\
  !*** ./dev/Helper/Apps/Admin.js ***!
  \**********************************/
/*! exports provided: getApp */
/*! exports used: getApp */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getApp; });
/**
 * @returns {AppAdmin}
 */
function getApp() {
  return __webpack_require__(/*! App/Admin */ 403).default;
}

/***/ }),
/* 69 */
/*!****************************************************!*\
  !*** ./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 */ 30);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var has = __webpack_require__(/*! ../internals/has */ 44);
var setGlobal = __webpack_require__(/*! ../internals/set-global */ 96);
var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 129);
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 130);

var getInternalState = InternalStateModule.get;
var enforceInternalState = InternalStateModule.enforce;
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;
  var state;
  if (typeof value == 'function') {
    if (typeof key == 'string' && !has(value, 'name')) {
      createNonEnumerableProperty(value, 'name', key);
    }
    state = enforceInternalState(value);
    if (!state.source) {
      state.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 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 || inspectSource(this);
});


/***/ }),
/* 70 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/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;
};


/***/ }),
/* 71 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/entry-virtual.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(/*! ../internals/path */ 51);

module.exports = function (CONSTRUCTOR) {
  return path[CONSTRUCTOR + 'Prototype'];
};


/***/ }),
/* 72 */
/*!********************************!*\
  !*** ./dev/Stores/Language.js ***!
  \********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/Settings */ 5);




var LanguageStore = /*#__PURE__*/function () {
  function LanguageStore() {
    this.languages = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]);
    this.languagesAdmin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]);
    this.language = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('').extend({
      limitedList: this.languages
    }).extend({
      reversible: true
    });
    this.languageAdmin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('').extend({
      limitedList: this.languagesAdmin
    }).extend({
      reversible: true
    });
    this.userLanguage = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
    this.userLanguageAdmin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
  }

  var _proto = LanguageStore.prototype;

  _proto.populate = function populate() {
    var aLanguages = Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["appSettingsGet"]('languages'),
        aLanguagesAdmin = Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["appSettingsGet"]('languagesAdmin');
    this.languages(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(aLanguages) ? aLanguages : []);
    this.languagesAdmin(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(aLanguagesAdmin) ? aLanguagesAdmin : []);
    this.language(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('Language'));
    this.languageAdmin(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('LanguageAdmin'));
    this.userLanguage(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('UserLanguage'));
    this.userLanguageAdmin(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('UserLanguageAdmin'));
  };

  return LanguageStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new LanguageStore());

/***/ }),
/* 73 */
/*!*************************************************************!*\
  !*** ./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 */ 128);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);

module.exports = function (it) {
  return IndexedObject(requireObjectCoercible(it));
};


/***/ }),
/* 74 */
/*!*******************************************************!*\
  !*** ./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);
};


/***/ }),
/* 75 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/get-built-in.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(/*! ../internals/path */ 51);
var global = __webpack_require__(/*! ../internals/global */ 31);

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];
};


/***/ }),
/* 76 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/iterators.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 77 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/modules/es.array.join.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 65);
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 128);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 73);
var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 284);

var nativeJoin = [].join;

var ES3_STRINGS = IndexedObject != Object;
var STRICT_METHOD = arrayMethodIsStrict('join', ',');

// `Array.prototype.join` method
// https://tc39.es/ecma262/#sec-array.prototype.join
$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {
  join: function join(separator) {
    return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);
  }
});


/***/ }),
/* 78 */
/*!********************************************************!*\
  !*** ./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 */ 165);
var global = __webpack_require__(/*! ../internals/global */ 30);

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];
};


/***/ }),
/* 79 */
/*!******************************************************!*\
  !*** ./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.es/ecma262/#sec-tointeger
module.exports = function (argument) {
  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
};


/***/ }),
/* 80 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/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 */ 170);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 115);

module.exports = function (it) {
  return IndexedObject(requireObjectCoercible(it));
};


/***/ }),
/* 81 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-define-property.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 186);
var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 158);

var nativeDefineProperty = Object.defineProperty;

// `Object.defineProperty` method
// https://tc39.es/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;
};


/***/ }),
/* 82 */
/*!****************************!*\
  !*** ./dev/Model/Email.js ***!
  \****************************/
/*! exports provided: EmailModel, 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__, "EmailModel", function() { return EmailModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return EmailModel; });
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.search.js */ 315);
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 151);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! emailjs-addressparser */ 178);
/* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2);










var EmailModel = /*#__PURE__*/function () {
  /**
   * @param {string=} email = ''
   * @param {string=} name = ''
   * @param {string=} dkimStatus = 'none'
   * @param {string=} dkimValue = ''
   */
  function EmailModel(email, name, dkimStatus, dkimValue) {
    if (email === void 0) {
      email = '';
    }

    if (name === void 0) {
      name = '';
    }

    if (dkimStatus === void 0) {
      dkimStatus = 'none';
    }

    if (dkimValue === void 0) {
      dkimValue = '';
    }

    this.email = '';
    this.name = '';
    this.dkimStatus = '';
    this.dkimValue = '';
    this.email = email;
    this.name = name;
    this.dkimStatus = dkimStatus;
    this.dkimValue = dkimValue;
    this.clearDuplicateName();
  }
  /**
   * @static
   * @param {AjaxJsonEmail} json
   * @returns {?EmailModel}
   */


  EmailModel.newInstanceFromJson = function newInstanceFromJson(json) {
    var email = new EmailModel();
    return email.initByJson(json) ? email : null;
  }
  /**
   * @returns {void}
   */
  ;

  var _proto = EmailModel.prototype;

  _proto.clear = function clear() {
    this.email = '';
    this.name = '';
    this.dkimStatus = 'none';
    this.dkimValue = '';
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.validate = function validate() {
    return '' !== this.name || '' !== this.email;
  }
  /**
   * @param {boolean} withoutName = false
   * @returns {string}
   */
  ;

  _proto.hash = function hash(withoutName) {
    if (withoutName === void 0) {
      withoutName = false;
    }

    return '#' + (withoutName ? '' : this.name) + '#' + this.email + '#';
  }
  /**
   * @returns {void}
   */
  ;

  _proto.clearDuplicateName = function clearDuplicateName() {
    if (this.name === this.email) {
      this.name = '';
    }
  }
  /**
   * @param {string} query
   * @returns {boolean}
   */
  ;

  _proto.search = function search(query) {
    return -1 < (this.name + ' ' + this.email).toLowerCase().indexOf(query.toLowerCase());
  }
  /**
   * @param {AjaxJsonEmail} oJsonEmail
   * @returns {boolean}
   */
  ;

  _proto.initByJson = function initByJson(json) {
    var result = false;

    if (json && 'Object/Email' === json['@Object']) {
      this.name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(json.Name);
      this.email = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(json.Email);
      this.dkimStatus = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(json.DkimStatus || '');
      this.dkimValue = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(json.DkimValue || '');
      result = '' !== this.email;
      this.clearDuplicateName();
    }

    return result;
  }
  /**
   * @param {boolean} friendlyView
   * @param {boolean=} wrapWithLink = false
   * @param {boolean=} useEncodeHtml = false
   * @returns {string}
   */
  ;

  _proto.toLine = function toLine(friendlyView, wrapWithLink, useEncodeHtml) {
    if (wrapWithLink === void 0) {
      wrapWithLink = false;
    }

    if (useEncodeHtml === void 0) {
      useEncodeHtml = false;
    }

    var result = '';

    if ('' !== this.email) {
      if (friendlyView && '' !== this.name) {
        result = wrapWithLink ? '<a href="mailto:' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.email) + '?to=' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])('"' + this.name + '" <' + this.email + '>') + '" target="_blank" tabindex="-1">' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.name) + '</a>' : useEncodeHtml ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.name) : this.name; // result = wrapWithLink ? '<a href="mailto:' + encodeHtml('"' + this.name + '" <' + this.email + '>') +
        // 	'" target="_blank" tabindex="-1">' + encodeHtml(this.name) + '</a>' : (useEncodeHtml ? encodeHtml(this.name) : this.name);
      } else {
        result = this.email;

        if ('' !== this.name) {
          if (wrapWithLink) {
            result = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])('"' + this.name + '" <') + '<a href="mailto:' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.email) + '?to=' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])('"' + this.name + '" <' + this.email + '>') + '" target="_blank" tabindex="-1">' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(result) + '</a>' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])('>'); // result = encodeHtml('"' + this.name + '" <') + '<a href="mailto:' +
            // 	encodeHtml('"' + this.name + '" <' + this.email + '>') +
            // 	'" target="_blank" tabindex="-1">' +
            // 	encodeHtml(result) +
            // 	'</a>' +
            // 	encodeHtml('>');
          } else {
            result = '"' + this.name + '" <' + result + '>';

            if (useEncodeHtml) {
              result = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(result);
            }
          }
        } else if (wrapWithLink) {
          result = '<a href="mailto:' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.email) + '" target="_blank" tabindex="-1">' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.email) + '</a>';
        }
      }
    }

    return result;
  };

  EmailModel.splitEmailLine = function splitEmailLine(line) {
    var parsedResult = emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7___default()(line);

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(parsedResult)) {
      var result = [];
      var exists = false;
      parsedResult.forEach(function (item) {
        var address = item.address ? new EmailModel(item.address.replace(/^[<]+(.*)[>]+$/g, '$1'), item.name || '') : null;

        if (address && address.email) {
          exists = true;
        }

        result.push(address ? address.toLine(false) : item.name);
      });
      return exists ? result : null;
    }

    return null;
  };

  EmailModel.parseEmailLine = function parseEmailLine(line) {
    var parsedResult = emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7___default()(line);

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(parsedResult)) {
      return ___WEBPACK_IMPORTED_MODULE_6___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, parsedResult, function (item) {
        return item.address ? new EmailModel(item.address.replace(/^[<]+(.*)[>]+$/g, '$1'), item.name || '') : null;
      }));
    }

    return [];
  }
  /**
   * @param {string} emailAddress
   * @returns {boolean}
   */
  ;

  _proto.parse = function parse(emailAddress) {
    emailAddress = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(emailAddress);

    if ('' === emailAddress) {
      return false;
    }

    var result = emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7___default()(emailAddress);

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(result) && result[0]) {
      this.name = result[0].name || '';
      this.email = result[0].address || '';
      this.clearDuplicateName();
      return true;
    }

    return false;
  };

  return EmailModel;
}();



/***/ }),
/* 83 */,
/* 84 */
/*!*****************************************************!*\
  !*** ./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 */ 79);

var min = Math.min;

// `ToLength` abstract operation
// https://tc39.es/ecma262/#sec-tolength
module.exports = function (argument) {
  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
};


/***/ }),
/* 85 */
/*!*************************************************************!*\
  !*** ./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 */ 99);
var redefine = __webpack_require__(/*! ../internals/redefine */ 69);
var toString = __webpack_require__(/*! ../internals/object-to-string */ 216);

// `Object.prototype.toString` method
// https://tc39.es/ecma262/#sec-object.prototype.tostring
if (!TO_STRING_TAG_SUPPORT) {
  redefine(Object.prototype, 'toString', toString, { unsafe: true });
}


/***/ }),
/* 86 */
/*!********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/is-pure.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = true;


/***/ }),
/* 87 */
/*!****************************************!*\
  !*** ./dev/Component/AbstractInput.js ***!
  \****************************************/
/*! exports provided: AbstractInput, default */
/*! exports used: AbstractInput */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractInput; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* 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 _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__ = __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_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__);
/* 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);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Component/Abstract */ 32);








var AbstractInput = /*#__PURE__*/function (_AbstractComponent) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AbstractInput, _AbstractComponent);

  /**
   * @param {Object} params
   */
  function AbstractInput(params) {
    var _this;

    _this = _AbstractComponent.call(this) || this;
    _this.value = params.value || '';
    _this.size = params.size || 0;
    _this.label = params.label || '';
    _this.preLabel = params.preLabel || '';
    _this.enable = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isUnd"])(params.enable) ? true : params.enable;
    _this.trigger = params.trigger && params.trigger.subscribe ? params.trigger : null;
    _this.placeholder = params.placeholder || '';
    _this.labeled = !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isUnd"])(params.label);
    _this.preLabeled = !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isUnd"])(params.preLabel);
    _this.triggered = !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isUnd"])(params.trigger) && !!_this.trigger;
    _this.classForTrigger = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.className = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      var size = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].unwrap(_this.size),
          suffixValue = _this.trigger ? ' ' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["trim"])('settings-saved-trigger-input ' + _this.classForTrigger()) : '';
      return (0 < size ? 'span' + size : '') + suffixValue;
    });

    if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isUnd"])(params.width) && params.element) {
      var _context;

      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context = params.element).call(_context, 'input,select,textarea').css('width', params.width);
    }

    _this.disposable.push(_this.className);

    if (_this.trigger) {
      _this.setTriggerState(_this.trigger());

      _this.disposable.push(_this.trigger.subscribe(_this.setTriggerState, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this)));
    }

    return _this;
  }

  var _proto = AbstractInput.prototype;

  _proto.setTriggerState = function setTriggerState(value) {
    switch (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pInt"])(value)) {
      case Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].TrueResult:
        this.classForTrigger('success');
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].FalseResult:
        this.classForTrigger('error');
        break;

      default:
        this.classForTrigger('');
        break;
    }
  };

  return AbstractInput;
}(Component_Abstract__WEBPACK_IMPORTED_MODULE_6__[/* AbstractComponent */ "a"]);



/***/ }),
/* 88 */
/*!**********************************!*\
  !*** ./dev/Stores/Admin/Capa.js ***!
  \**********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/Settings */ 5);




var CapaAdminStore = /*#__PURE__*/function () {
  function CapaAdminStore() {
    this.additionalAccounts = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.identities = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.gravatar = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.attachmentThumbnails = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.sieve = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.filters = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.themes = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
    this.userBackground = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.openPGP = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.twoFactorAuth = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.twoFactorAuthForce = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.templates = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
  }

  var _proto = CapaAdminStore.prototype;

  _proto.populate = function populate() {
    this.additionalAccounts(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].AdditionalAccounts));
    this.identities(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Identities));
    this.gravatar(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Gravatar));
    this.attachmentThumbnails(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].AttachmentThumbnails));
    this.sieve(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Sieve));
    this.filters(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Filters));
    this.themes(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Themes));
    this.userBackground(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].UserBackground));
    this.openPGP(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].OpenPGP));
    this.twoFactorAuth(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].TwoFactor));
    this.twoFactorAuthForce(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].TwoFactorForce));
    this.templates(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Templates));
  };

  return CapaAdminStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new CapaAdminStore());

/***/ }),
/* 89 */
/*!*****************************************************!*\
  !*** ./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 */ 56);

// `ToObject` abstract operation
// https://tc39.es/ecma262/#sec-toobject
module.exports = function (argument) {
  return Object(requireObjectCoercible(argument));
};


/***/ }),
/* 90 */
/*!***************************************************************************!*\
  !*** ./node_modules/core-js-pure/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-pure/internals/to-length.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(/*! ../internals/to-integer */ 142);

var min = Math.min;

// `ToLength` abstract operation
// https://tc39.es/ecma262/#sec-tolength
module.exports = function (argument) {
  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
};


/***/ }),
/* 92 */
/*!********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/classof.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 */ 144);
var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 114);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

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 = TO_STRING_TAG_SUPPORT ? classofRaw : 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;
};


/***/ }),
/* 93 */,
/* 94 */
/*!*************************************!*\
  !*** ./dev/Stores/Admin/Package.js ***!
  \*************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);


var PackageAdminStore = function PackageAdminStore() {
  this.packages = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]);
  this.packages.loading = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
    throttle: 100
  });
  this.packagesReal = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
  this.packagesMainUpdatable = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
};

/* harmony default export */ __webpack_exports__["a"] = (new PackageAdminStore());

/***/ }),
/* 95 */
/*!**********************************************************************!*\
  !*** ./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
  };
};


/***/ }),
/* 96 */
/*!******************************************************!*\
  !*** ./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 */ 30);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);

module.exports = function (key, value) {
  try {
    createNonEnumerableProperty(global, key, value);
  } catch (error) {
    global[key] = value;
  } return value;
};


/***/ }),
/* 97 */
/*!********************************************************!*\
  !*** ./node_modules/core-js/internals/shared-store.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var setGlobal = __webpack_require__(/*! ../internals/set-global */ 96);

var SHARED = '__core-js_shared__';
var store = global[SHARED] || setGlobal(SHARED, {});

module.exports = store;


/***/ }),
/* 98 */
/*!***************************************************!*\
  !*** ./node_modules/core-js/internals/is-pure.js ***!
  \***************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = false;


/***/ }),
/* 99 */
/*!*****************************************************************!*\
  !*** ./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 */ 39);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var test = {};

test[TO_STRING_TAG] = 'z';

module.exports = String(test) === '[object z]';


/***/ }),
/* 100 */
/*!********************************!*\
  !*** external "window.moment" ***!
  \********************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = window.moment;

/***/ }),
/* 101 */
/*!************************************!*\
  !*** external "window.progressJs" ***!
  \************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.progressJs;

/***/ }),
/* 102 */,
/* 103 */,
/* 104 */
/*!**************************************************!*\
  !*** ./node_modules/core-js/internals/shared.js ***!
  \**************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 98);
var store = __webpack_require__(/*! ../internals/shared-store */ 97);

(module.exports = function (key, value) {
  return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
  version: '3.12.0',
  mode: IS_PURE ? 'pure' : 'global',
  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'
});


/***/ }),
/* 105 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/hidden-keys.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 106 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/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 */ 75);

module.exports = getBuiltIn('navigator', 'userAgent') || '';


/***/ }),
/* 107 */
/*!********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/iterate.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 260);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);
var bind = __webpack_require__(/*! ../internals/function-bind-context */ 116);
var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 262);
var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ 263);

var Result = function (stopped, result) {
  this.stopped = stopped;
  this.result = result;
};

module.exports = function (iterable, unboundFunction, options) {
  var that = options && options.that;
  var AS_ENTRIES = !!(options && options.AS_ENTRIES);
  var IS_ITERATOR = !!(options && options.IS_ITERATOR);
  var INTERRUPTED = !!(options && options.INTERRUPTED);
  var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);
  var iterator, iterFn, index, length, result, next, step;

  var stop = function (condition) {
    if (iterator) iteratorClose(iterator);
    return new Result(true, condition);
  };

  var callFn = function (value) {
    if (AS_ENTRIES) {
      anObject(value);
      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
    } return INTERRUPTED ? fn(value, stop) : fn(value);
  };

  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 = callFn(iterable[index]);
        if (result && result instanceof Result) return result;
      } return new Result(false);
    }
    iterator = iterFn.call(iterable);
  }

  next = iterator.next;
  while (!(step = next.call(iterator)).done) {
    try {
      result = callFn(step.value);
    } catch (error) {
      iteratorClose(iterator);
      throw error;
    }
    if (typeof result == 'object' && result && result instanceof Result) return result;
  } return new Result(false);
};


/***/ }),
/* 108 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/redefine.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);

module.exports = function (target, key, value, options) {
  if (options && options.enumerable) target[key] = value;
  else createNonEnumerableProperty(target, key, value);
};


/***/ }),
/* 109 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js-pure/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 */ 70);

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);
};


/***/ }),
/* 110 */
/*!*********************************!*\
  !*** ./dev/Stores/Admin/App.js ***!
  \*********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* 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 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 $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* 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);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/AbstractApp */ 296);







var AppAdminStore = /*#__PURE__*/function (_AbstractAppStore) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AppAdminStore, _AbstractAppStore);

  function AppAdminStore() {
    var _this;

    _this = _AbstractAppStore.call(this) || this;
    _this.determineUserLanguage = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.determineUserDomain = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.weakPassword = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.useLocalProxyForExternalImages = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.dataFolderAccess = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    return _this;
  }

  var _proto = AppAdminStore.prototype;

  _proto.populate = function populate() {
    var _this2 = this;

    _AbstractAppStore.prototype.populate.call(this);

    this.determineUserLanguage(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"])('DetermineUserLanguage'));
    this.determineUserDomain(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"])('DetermineUserDomain'));
    this.weakPassword(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"])('WeakPassword'));
    this.useLocalProxyForExternalImages(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"])('UseLocalProxyForExternalImages'));

    if (Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"])('Auth')) {
      $__WEBPACK_IMPORTED_MODULE_2___default.a.get('./data/VERSION?' + window__WEBPACK_IMPORTED_MODULE_1___default.a.Math.random()).then(function () {
        return _this2.dataFolderAccess(true);
      });
    }
  };

  return AppAdminStore;
}(Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_5__[/* AbstractAppStore */ "a"]);

/* harmony default export */ __webpack_exports__["a"] = (new AppAdminStore());

/***/ }),
/* 111 */
/*!******************************************************!*\
  !*** ./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 */ 104);
var uid = __webpack_require__(/*! ../internals/uid */ 136);

var keys = shared('keys');

module.exports = function (key) {
  return keys[key] || (keys[key] = uid(key));
};


/***/ }),
/* 112 */
/*!*********************************************************!*\
  !*** ./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'
];


/***/ }),
/* 113 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/iterators.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 114 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/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);
};


/***/ }),
/* 115 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/require-object-coercible.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// `RequireObjectCoercible` abstract operation
// https://tc39.es/ecma262/#sec-requireobjectcoercible
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on " + it);
  return it;
};


/***/ }),
/* 116 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/function-bind-context.js ***!
  \**********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);

// 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);
  };
};


/***/ }),
/* 117 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/to-object.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 115);

// `ToObject` abstract operation
// https://tc39.es/ecma262/#sec-toobject
module.exports = function (argument) {
  return Object(requireObjectCoercible(argument));
};


/***/ }),
/* 118 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/engine-is-node.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(/*! ../internals/classof-raw */ 114);
var global = __webpack_require__(/*! ../internals/global */ 31);

module.exports = classof(global.process) == 'process';


/***/ }),
/* 119 */
/*!*************************************************************!*\
  !*** ./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 */ 69);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var fails = __webpack_require__(/*! ../internals/fails */ 37);
var flags = __webpack_require__(/*! ../internals/regexp-flags */ 202);

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.es/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 });
}


/***/ }),
/* 120 */
/*!****************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-method-uses-to-length.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var has = __webpack_require__(/*! ../internals/has */ 54);

var defineProperty = Object.defineProperty;
var cache = {};

var thrower = function (it) { throw it; };

module.exports = function (METHOD_NAME, options) {
  if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];
  if (!options) options = {};
  var method = [][METHOD_NAME];
  var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;
  var argument0 = has(options, 0) ? options[0] : thrower;
  var argument1 = has(options, 1) ? options[1] : undefined;

  return cache[METHOD_NAME] = !!method && !fails(function () {
    if (ACCESSORS && !DESCRIPTORS) return true;
    var O = { length: -1 };

    if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });
    else O[1] = 1;

    method.call(O, argument0, argument1);
  });
};


/***/ }),
/* 121 */
/*!*****************************!*\
  !*** ./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 _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ 62);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__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__);

 // 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 (!_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default.a || !_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default.a.all) {
    throw new Error('Promises are not available your environment.');
  }

  if (!src) {
    throw new Error('src should not be empty.');
  }

  return new _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default.a(function (resolve, reject) {
    var element = window__WEBPACK_IMPORTED_MODULE_1___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_1___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;
  })*/
  ;
}

/***/ }),
/* 122 */
/*!*******************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/values.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/values */ 341);

/***/ }),
/* 123 */
/*!*****************************!*\
  !*** ./dev/Stores/Theme.js ***!
  \*****************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/Settings */ 5);




var ThemeStore = /*#__PURE__*/function () {
  function ThemeStore() {
    this.themes = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]);
    this.themeBackgroundName = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
    this.themeBackgroundHash = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
    this.theme = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('').extend({
      limitedList: this.themes
    });
  }

  var _proto = ThemeStore.prototype;

  _proto.populate = function populate() {
    var themes = Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["appSettingsGet"]('themes');
    this.themes(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(themes) ? themes : []);
    this.theme(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('Theme'));
    this.themeBackgroundName(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('UserBackgroundName'));
    this.themeBackgroundHash(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('UserBackgroundHash'));
  };

  return ThemeStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new ThemeStore());

/***/ }),
/* 124 */,
/* 125 */
/*!************************************!*\
  !*** ./dev/Stores/Admin/Plugin.js ***!
  \************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);


var PluginAdminStore = function PluginAdminStore() {
  this.plugins = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]);
  this.plugins.loading = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
    throttle: 100
  });
  this.plugins.error = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
};

/* harmony default export */ __webpack_exports__["a"] = (new PluginAdminStore());

/***/ }),
/* 126 */
/*!***********************************!*\
  !*** (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;


/***/ }),
/* 127 */
/*!******************************************************************************!*\
  !*** ./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 */ 55);
var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 179);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 95);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 73);
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 133);
var has = __webpack_require__(/*! ../internals/has */ 44);
var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 134);

// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
  O = toIndexedObject(O);
  P = toPrimitive(P, true);
  if (IE8_DOM_DEFINE) try {
    return $getOwnPropertyDescriptor(O, P);
  } catch (error) { /* empty */ }
  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);
};


/***/ }),
/* 128 */
/*!**********************************************************!*\
  !*** ./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 */ 37);
var classof = __webpack_require__(/*! ../internals/classof-raw */ 74);

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 -- safe
  return !Object('z').propertyIsEnumerable(0);
}) ? function (it) {
  return classof(it) == 'String' ? split.call(it, '') : Object(it);
} : Object;


/***/ }),
/* 129 */
/*!**********************************************************!*\
  !*** ./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 */ 97);

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;


/***/ }),
/* 130 */
/*!**********************************************************!*\
  !*** ./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 */ 208);
var global = __webpack_require__(/*! ../internals/global */ 30);
var isObject = __webpack_require__(/*! ../internals/is-object */ 49);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var objectHas = __webpack_require__(/*! ../internals/has */ 44);
var shared = __webpack_require__(/*! ../internals/shared-store */ 97);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 111);
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 105);

var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
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 = shared.state || (shared.state = new WeakMap());
  var wmget = store.get;
  var wmhas = store.has;
  var wmset = store.set;
  set = function (it, metadata) {
    if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
    metadata.facade = it;
    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) {
    if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
    metadata.facade = it;
    createNonEnumerableProperty(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
};


/***/ }),
/* 131 */
/*!******************************************************!*\
  !*** ./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;
};


/***/ }),
/* 132 */,
/* 133 */
/*!********************************************************!*\
  !*** ./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 */ 49);

// `ToPrimitive` abstract operation
// https://tc39.es/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");
};


/***/ }),
/* 134 */
/*!**********************************************************!*\
  !*** ./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 */ 55);
var fails = __webpack_require__(/*! ../internals/fails */ 37);
var createElement = __webpack_require__(/*! ../internals/document-create-element */ 135);

// Thank's IE8 for his funny defineProperty
module.exports = !DESCRIPTORS && !fails(function () {
  // eslint-disable-next-line es/no-object-defineproperty -- requied for testing
  return Object.defineProperty(createElement('div'), 'a', {
    get: function () { return 7; }
  }).a != 7;
});


/***/ }),
/* 135 */
/*!*******************************************************************!*\
  !*** ./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 */ 30);
var isObject = __webpack_require__(/*! ../internals/is-object */ 49);

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) : {};
};


/***/ }),
/* 136 */
/*!***********************************************!*\
  !*** ./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);
};


/***/ }),
/* 137 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/native-symbol.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

/* eslint-disable es/no-symbol -- required for testing */
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 156);
var fails = __webpack_require__(/*! ../internals/fails */ 37);

// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing
module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
  return !String(Symbol()) ||
    // Chrome 38 Symbol has incorrect toString conversion
    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
    !Symbol.sham && V8_VERSION && V8_VERSION < 41;
});


/***/ }),
/* 138 */
/*!************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/document-create-element.js ***!
  \************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);

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) : {};
};


/***/ }),
/* 139 */
/*!************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-get-prototype-of.js ***!
  \************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(/*! ../internals/has */ 54);
var toObject = __webpack_require__(/*! ../internals/to-object */ 117);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 140);
var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 255);

var IE_PROTO = sharedKey('IE_PROTO');
var ObjectPrototype = Object.prototype;

// `Object.getPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.getprototypeof
module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectPrototype : null;
};


/***/ }),
/* 140 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/shared-key.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var shared = __webpack_require__(/*! ../internals/shared */ 188);
var uid = __webpack_require__(/*! ../internals/uid */ 189);

var keys = shared('keys');

module.exports = function (key) {
  return keys[key] || (keys[key] = uid(key));
};


/***/ }),
/* 141 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/shared-store.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var setGlobal = __webpack_require__(/*! ../internals/set-global */ 254);

var SHARED = '__core-js_shared__';
var store = global[SHARED] || setGlobal(SHARED, {});

module.exports = store;


/***/ }),
/* 142 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/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.es/ecma262/#sec-tointeger
module.exports = function (argument) {
  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
};


/***/ }),
/* 143 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/hidden-keys.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 144 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js-pure/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 */ 38);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var test = {};

test[TO_STRING_TAG] = 'z';

module.exports = String(test) === '[object z]';


/***/ }),
/* 145 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/set-to-string-tag.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 */ 144);
var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 81).f;
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var has = __webpack_require__(/*! ../internals/has */ 54);
var toString = __webpack_require__(/*! ../internals/object-to-string */ 267);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');

module.exports = function (it, TAG, STATIC, SET_METHOD) {
  if (it) {
    var target = STATIC ? it : it.prototype;
    if (!has(target, TO_STRING_TAG)) {
      defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });
    }
    if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {
      createNonEnumerableProperty(target, 'toString', toString);
    }
  }
};


/***/ }),
/* 146 */
/*!********************************************************!*\
  !*** ./node_modules/core-js-pure/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 };
  }
};


/***/ }),
/* 147 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/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 */ 274);
var global = __webpack_require__(/*! ../internals/global */ 31);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var objectHas = __webpack_require__(/*! ../internals/has */ 54);
var shared = __webpack_require__(/*! ../internals/shared-store */ 141);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 140);
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 143);

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 = shared.state || (shared.state = new WeakMap());
  var wmget = store.get;
  var wmhas = store.has;
  var wmset = store.set;
  set = function (it, metadata) {
    metadata.facade = it;
    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) {
    metadata.facade = it;
    createNonEnumerableProperty(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
};


/***/ }),
/* 148 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/engine-v8-version.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 106);

var process = global.process;
var versions = process && process.versions;
var v8 = versions && versions.v8;
var match, version;

if (v8) {
  match = v8.split('.');
  version = match[0] + match[1];
} else if (userAgent) {
  match = userAgent.match(/Edge\/(\d+)/);
  if (!match || match[1] >= 74) {
    match = userAgent.match(/Chrome\/(\d+)/);
    if (match) version = match[1];
  }
}

module.exports = version && +version;


/***/ }),
/* 149 */
/*!******************************************************************************!*\
  !*** ./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";

// TODO: Remove from `core-js@4` since it's moved to entry points
__webpack_require__(/*! ../modules/es.regexp.exec */ 45);
var redefine = __webpack_require__(/*! ../internals/redefine */ 69);
var fails = __webpack_require__(/*! ../internals/fails */ 37);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);

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, '$<a>') !== '7';
});

// IE <= 11 replaces $0 with the whole match, as if it was $&
// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0
var REPLACE_KEEPS_$0 = (function () {
  // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing
  return 'a'.replace(/./, '$0') === '$0';
})();

var REPLACE = wellKnownSymbol('replace');
// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string
var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {
  if (/./[REPLACE]) {
    return /./[REPLACE]('a', '$0') === '';
  }
  return false;
})();

// 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 () {
  // eslint-disable-next-line regexp/no-empty-group -- required for testing
  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/;

    if (KEY === 'split') {
      // We can't use real regex here since it causes deoptimization
      // and serious performance degradation in V8
      // https://github.com/zloirock/core-js/issues/306
      re = {};
      // 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.flags = '';
      re[SYMBOL] = /./[SYMBOL];
    }

    re.exec = function () { execCalled = true; return null; };

    re[SYMBOL]('');
    return !execCalled;
  });

  if (
    !DELEGATES_TO_SYMBOL ||
    !DELEGATES_TO_EXEC ||
    (KEY === 'replace' && !(
      REPLACE_SUPPORTS_NAMED_GROUPS &&
      REPLACE_KEEPS_$0 &&
      !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
    )) ||
    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
  ) {
    var nativeRegExpMethod = /./[SYMBOL];
    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {
      if (regexp.exec === RegExp.prototype.exec) {
        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 };
    }, {
      REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,
      REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
    });
    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) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);
};


/***/ }),
/* 150 */
/*!****************************************************************!*\
  !*** ./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 */ 74);
var regexpExec = __webpack_require__(/*! ./regexp-exec */ 162);

// `RegExpExec` abstract operation
// https://tc39.es/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);
};



/***/ }),
/* 151 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js/modules/web.dom-collections.for-each.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 218);
var forEach = __webpack_require__(/*! ../internals/array-for-each */ 355);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);

for (var COLLECTION_NAME in DOMIterables) {
  var Collection = global[COLLECTION_NAME];
  var CollectionPrototype = Collection && Collection.prototype;
  // some Chrome versions have non-configurable methods on DOMTokenList
  if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {
    createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);
  } catch (error) {
    CollectionPrototype.forEach = forEach;
  }
}


/***/ }),
/* 152 */
/*!*************************************!*\
  !*** ./dev/Knoin/AbstractScreen.js ***!
  \*************************************/
/*! exports provided: AbstractScreen */
/*! exports used: AbstractScreen */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractScreen; });
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 151);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__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 crossroads__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! crossroads */ 176);
/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(crossroads__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);




var AbstractScreen = /*#__PURE__*/function () {
  function AbstractScreen(screenName, viewModels) {
    if (viewModels === void 0) {
      viewModels = [];
    }

    this.oCross = null;
    this.sScreenName = void 0;
    this.aViewModels = void 0;
    this.sScreenName = screenName;
    this.aViewModels = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isArray"])(viewModels) ? viewModels : [];
  }
  /**
   * @returns {Array}
   */


  var _proto = AbstractScreen.prototype;

  _proto.viewModels = function viewModels() {
    return this.aViewModels;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.screenName = function screenName() {
    return this.sScreenName;
  }
  /**
   * @returns {?Array)}
   */
  ;

  _proto.routes = function routes() {
    return null;
  }
  /**
   * @returns {?Object}
   */
  ;

  _proto.__cross = function __cross() {
    return this.oCross;
  }
  /**
   * @returns {void}
   */
  ;

  _proto.__start = function __start() {
    var route = null,
        fMatcher = null;
    var routes = this.routes();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isNonEmptyArray"])(routes)) {
      fMatcher = ___WEBPACK_IMPORTED_MODULE_1___default.a.bind(this.onRoute || Common_Utils__WEBPACK_IMPORTED_MODULE_3__["noop"], this);
      route = crossroads__WEBPACK_IMPORTED_MODULE_2___default.a.create();
      routes.forEach(function (item) {
        if (item && route) {
          route.addRoute(item[0], fMatcher).rules = item[1];
        }
      });
      this.oCross = route;
    }
  };

  return AbstractScreen;
}();

/***/ }),
/* 153 */
/*!*****************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/trim.js ***!
  \*****************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/trim */ 327);

/***/ }),
/* 154 */
/*!*****************************!*\
  !*** external "window.ssm" ***!
  \*****************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.ssm;

/***/ }),
/* 155 */
/*!****************************************************************!*\
  !*** ./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 */ 44);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 73);
var indexOf = __webpack_require__(/*! ../internals/array-includes */ 180).indexOf;
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 105);

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;
};


/***/ }),
/* 156 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/engine-v8-version.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 166);

var process = global.process;
var versions = process && process.versions;
var v8 = versions && versions.v8;
var match, version;

if (v8) {
  match = v8.split('.');
  version = match[0] < 4 ? 1 : match[0] + match[1];
} else if (userAgent) {
  match = userAgent.match(/Edge\/(\d+)/);
  if (!match || match[1] >= 74) {
    match = userAgent.match(/Chrome\/(\d+)/);
    if (match) version = match[1];
  }
}

module.exports = version && +version;


/***/ }),
/* 157 */
/*!***********************************************************************************!*\
  !*** ./node_modules/core-js-pure/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 */ 53);
var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 249);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 158);
var has = __webpack_require__(/*! ../internals/has */ 54);
var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 186);

var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/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]);
};


/***/ }),
/* 158 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/to-primitive.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 50);

// `ToPrimitive` abstract operation
// https://tc39.es/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");
};


/***/ }),
/* 159 */
/*!************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-set-prototype-of.js ***!
  \************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 256);

// `Object.setPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.setprototypeof
// Works with __proto__ only. Old v8 can't work with null proto objects.
/* eslint-disable no-proto */
module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
  var CORRECT_SETTER = false;
  var test = {};
  var setter;
  try {
    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
    setter.call(test, []);
    CORRECT_SETTER = test instanceof Array;
  } catch (error) { /* empty */ }
  return function setPrototypeOf(O, proto) {
    anObject(O);
    aPossiblePrototype(proto);
    if (CORRECT_SETTER) setter.call(O, proto);
    else O.__proto__ = proto;
    return O;
  };
}() : undefined);


/***/ }),
/* 160 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-create.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 257);
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 190);
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 143);
var html = __webpack_require__(/*! ../internals/html */ 191);
var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 138);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 140);

var GT = '>';
var LT = '<';
var PROTOTYPE = 'prototype';
var SCRIPT = 'script';
var IE_PROTO = sharedKey('IE_PROTO');

var EmptyConstructor = function () { /* empty */ };

var scriptTag = function (content) {
  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
};

// Create object with fake `null` prototype: use ActiveX Object with cleared prototype
var NullProtoObjectViaActiveX = function (activeXDocument) {
  activeXDocument.write(scriptTag(''));
  activeXDocument.close();
  var temp = activeXDocument.parentWindow.Object;
  activeXDocument = null; // avoid memory leak
  return temp;
};

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var NullProtoObjectViaIFrame = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = documentCreateElement('iframe');
  var JS = 'java' + SCRIPT + ':';
  var iframeDocument;
  iframe.style.display = 'none';
  html.appendChild(iframe);
  // https://github.com/zloirock/core-js/issues/475
  iframe.src = String(JS);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(scriptTag('document.F=Object'));
  iframeDocument.close();
  return iframeDocument.F;
};

// Check for document.domain and active x support
// No need to use active x approach when document.domain is not set
// see https://github.com/es-shims/es5-shim/issues/150
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
// avoid IE GC bug
var activeXDocument;
var NullProtoObject = function () {
  try {
    /* global ActiveXObject */
    activeXDocument = document.domain && new ActiveXObject('htmlfile');
  } catch (error) { /* ignore */ }
  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();
  var length = enumBugKeys.length;
  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
  return NullProtoObject();
};

hiddenKeys[IE_PROTO] = true;

// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    EmptyConstructor[PROTOTYPE] = anObject(O);
    result = new EmptyConstructor();
    EmptyConstructor[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = NullProtoObject();
  return Properties === undefined ? result : defineProperties(result, Properties);
};


/***/ }),
/* 161 */
/*!***************************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/web.dom-collections.iterator.js ***!
  \***************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ./es.array.iterator */ 201);
var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 281);
var global = __webpack_require__(/*! ../internals/global */ 31);
var classof = __webpack_require__(/*! ../internals/classof */ 92);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');

for (var COLLECTION_NAME in DOMIterables) {
  var Collection = global[COLLECTION_NAME];
  var CollectionPrototype = Collection && Collection.prototype;
  if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {
    createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);
  }
  Iterators[COLLECTION_NAME] = Iterators.Array;
}


/***/ }),
/* 162 */
/*!*******************************************************!*\
  !*** ./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 */ 202);
var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ 223);
var shared = __webpack_require__(/*! ./shared */ 104);

var nativeExec = RegExp.prototype.exec;
var nativeReplace = shared('native-string-replace', 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;
})();

var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;

// nonparticipating capturing group, copied from es5-shim's String#split patch.
// eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing
var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;

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('^' + source + '$(?!\\s)', flags);
    }
    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;

    match = nativeExec.call(sticky ? reCopy : re, strCopy);

    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) {
      // 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;


/***/ }),
/* 163 */,
/* 164 */
/*!************************************!*\
  !*** ./dev/Stores/Admin/Domain.js ***!
  \************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__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 ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);




var DomainAdminStore = function DomainAdminStore() {
  var _this = this;

  this.domains = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observableArray([]);
  this.domains.loading = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false).extend({
    'throttle': 100
  });
  this.domainsWithoutAliases = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
    return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_1___default.a).call(___WEBPACK_IMPORTED_MODULE_1___default.a, _this.domains(), function (item) {
      return item && !item.alias;
    });
  });
};

/* harmony default export */ __webpack_exports__["a"] = (new DomainAdminStore());

/***/ }),
/* 165 */
/*!************************************************!*\
  !*** ./node_modules/core-js/internals/path.js ***!
  \************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);

module.exports = global;


/***/ }),
/* 166 */
/*!*************************************************************!*\
  !*** ./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 */ 78);

module.exports = getBuiltIn('navigator', 'userAgent') || '';


/***/ }),
/* 167 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/object-create.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 241);
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 112);
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 105);
var html = __webpack_require__(/*! ../internals/html */ 235);
var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 135);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 111);

var GT = '>';
var LT = '<';
var PROTOTYPE = 'prototype';
var SCRIPT = 'script';
var IE_PROTO = sharedKey('IE_PROTO');

var EmptyConstructor = function () { /* empty */ };

var scriptTag = function (content) {
  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
};

// Create object with fake `null` prototype: use ActiveX Object with cleared prototype
var NullProtoObjectViaActiveX = function (activeXDocument) {
  activeXDocument.write(scriptTag(''));
  activeXDocument.close();
  var temp = activeXDocument.parentWindow.Object;
  activeXDocument = null; // avoid memory leak
  return temp;
};

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var NullProtoObjectViaIFrame = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = documentCreateElement('iframe');
  var JS = 'java' + SCRIPT + ':';
  var iframeDocument;
  iframe.style.display = 'none';
  html.appendChild(iframe);
  // https://github.com/zloirock/core-js/issues/475
  iframe.src = String(JS);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(scriptTag('document.F=Object'));
  iframeDocument.close();
  return iframeDocument.F;
};

// Check for document.domain and active x support
// No need to use active x approach when document.domain is not set
// see https://github.com/es-shims/es5-shim/issues/150
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
// avoid IE GC bug
var activeXDocument;
var NullProtoObject = function () {
  try {
    /* global ActiveXObject -- old IE */
    activeXDocument = document.domain && new ActiveXObject('htmlfile');
  } catch (error) { /* ignore */ }
  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();
  var length = enumBugKeys.length;
  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
  return NullProtoObject();
};

hiddenKeys[IE_PROTO] = true;

// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    EmptyConstructor[PROTOTYPE] = anObject(O);
    result = new EmptyConstructor();
    EmptyConstructor[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = NullProtoObject();
  return Properties === undefined ? result : defineProperties(result, Properties);
};


/***/ }),
/* 168 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(/*! ../internals/has */ 44);
var toObject = __webpack_require__(/*! ../internals/to-object */ 89);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 111);
var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 243);

var IE_PROTO = sharedKey('IE_PROTO');
var ObjectPrototype = Object.prototype;

// `Object.getPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.getprototypeof
// eslint-disable-next-line es/no-object-getprototypeof -- safe
module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectPrototype : null;
};


/***/ }),
/* 169 */
/*!*************************************************************!*\
  !*** ./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 */ 66).f;
var has = __webpack_require__(/*! ../internals/has */ 44);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

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 });
  }
};


/***/ }),
/* 170 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/indexed-object.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);
var classof = __webpack_require__(/*! ../internals/classof-raw */ 114);

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;


/***/ }),
/* 171 */
/*!****************************************************************!*\
  !*** ./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 */ 217).charAt;

// `AdvanceStringIndex` abstract operation
// https://tc39.es/ecma262/#sec-advancestringindex
module.exports = function (S, index, unicode) {
  return index + (unicode ? charAt(S, index).length : 1);
};


/***/ }),
/* 172 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-iteration.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var bind = __webpack_require__(/*! ../internals/function-bind-context */ 116);
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 170);
var toObject = __webpack_require__(/*! ../internals/to-object */ 117);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);
var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 286);

var push = [].push;

// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation
var createMethod = function (TYPE) {
  var IS_MAP = TYPE == 1;
  var IS_FILTER = TYPE == 2;
  var IS_SOME = TYPE == 3;
  var IS_EVERY = TYPE == 4;
  var IS_FIND_INDEX = TYPE == 6;
  var IS_FILTER_OUT = TYPE == 7;
  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
  return function ($this, callbackfn, that, specificCreate) {
    var O = toObject($this);
    var self = IndexedObject(O);
    var boundFunction = bind(callbackfn, that, 3);
    var length = toLength(self.length);
    var index = 0;
    var create = specificCreate || arraySpeciesCreate;
    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;
    var value, result;
    for (;length > index; index++) if (NO_HOLES || index in self) {
      value = self[index];
      result = boundFunction(value, index, O);
      if (TYPE) {
        if (IS_MAP) target[index] = result; // map
        else if (result) switch (TYPE) {
          case 3: return true;              // some
          case 5: return value;             // find
          case 6: return index;             // findIndex
          case 2: push.call(target, value); // filter
        } else switch (TYPE) {
          case 4: return false;             // every
          case 7: push.call(target, value); // filterOut
        }
      }
    }
    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
  };
};

module.exports = {
  // `Array.prototype.forEach` method
  // https://tc39.es/ecma262/#sec-array.prototype.foreach
  forEach: createMethod(0),
  // `Array.prototype.map` method
  // https://tc39.es/ecma262/#sec-array.prototype.map
  map: createMethod(1),
  // `Array.prototype.filter` method
  // https://tc39.es/ecma262/#sec-array.prototype.filter
  filter: createMethod(2),
  // `Array.prototype.some` method
  // https://tc39.es/ecma262/#sec-array.prototype.some
  some: createMethod(3),
  // `Array.prototype.every` method
  // https://tc39.es/ecma262/#sec-array.prototype.every
  every: createMethod(4),
  // `Array.prototype.find` method
  // https://tc39.es/ecma262/#sec-array.prototype.find
  find: createMethod(5),
  // `Array.prototype.findIndex` method
  // https://tc39.es/ecma262/#sec-array.prototype.findIndex
  findIndex: createMethod(6),
  // `Array.prototype.filterOut` method
  // https://github.com/tc39/proposal-array-filtering
  filterOut: createMethod(7)
};


/***/ }),
/* 173 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/is-array.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(/*! ../internals/classof-raw */ 114);

// `IsArray` abstract operation
// https://tc39.es/ecma262/#sec-isarray
module.exports = Array.isArray || function isArray(arg) {
  return classof(arg) == 'Array';
};


/***/ }),
/* 174 */
/*!*********************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-method-has-species-support.js ***!
  \*********************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 148);

var SPECIES = wellKnownSymbol('species');

module.exports = function (METHOD_NAME) {
  // We can't use this feature detection in V8 since it causes
  // deoptimization and serious performance degradation
  // https://github.com/zloirock/core-js/issues/677
  return V8_VERSION >= 51 || !fails(function () {
    var array = [];
    var constructor = array.constructor = {};
    constructor[SPECIES] = function () {
      return { foo: 1 };
    };
    return array[METHOD_NAME](Boolean).foo !== 1;
  });
};


/***/ }),
/* 175 */
/*!*******************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/concat */ 337);

/***/ }),
/* 176 */
/*!************************************!*\
  !*** external "window.crossroads" ***!
  \************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.crossroads;

/***/ }),
/* 177 */
/*!*******************************************!*\
  !*** ./dev/Component/AbstractCheckbox.js ***!
  \*******************************************/
/*! exports provided: AbstractCheckbox, default */
/*! exports used: AbstractCheckbox */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractCheckbox; });
/* unused harmony export default */
/* 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_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/Abstract */ 32);





var AbstractCheckbox = /*#__PURE__*/function (_AbstractComponent) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AbstractCheckbox, _AbstractComponent);

  /**
   * @param {Object} params = {}
   */
  function AbstractCheckbox(params) {
    var _this;

    if (params === void 0) {
      params = {};
    }

    _this = _AbstractComponent.call(this) || this;
    _this.value = params.value;

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.value) || !_this.value.subscribe) {
      _this.value = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.value) ? false : !!_this.value);
    }

    _this.enable = params.enable;

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.enable) || !_this.enable.subscribe) {
      _this.enable = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.enable) ? true : !!_this.enable);
    }

    _this.disable = params.disable;

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.disable) || !_this.disable.subscribe) {
      _this.disable = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.disable) ? false : !!_this.disable);
    }

    _this.label = params.label || '';
    _this.inline = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(params.inline) ? false : params.inline;
    _this.readOnly = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(params.readOnly) ? false : !!params.readOnly;
    _this.inverted = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(params.inverted) ? false : !!params.inverted;
    _this.labeled = !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(params.label);
    _this.labelAnimated = !!params.labelAnimated;
    return _this;
  }

  var _proto = AbstractCheckbox.prototype;

  _proto.click = function click() {
    if (!this.readOnly && this.enable() && !this.disable()) {
      this.value(!this.value());
    }
  };

  return AbstractCheckbox;
}(Component_Abstract__WEBPACK_IMPORTED_MODULE_3__[/* AbstractComponent */ "a"]);



/***/ }),
/* 178 */
/*!******************************************************************!*\
  !*** ./node_modules/emailjs-addressparser/dist/addressparser.js ***!
  \******************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

exports.default = parse;

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

/**
 * Parses structured e-mail addresses from an address field
 *
 * Example:
 *
 *    "Name <address@domain>"
 *
 * will be converted to
 *
 *     [{name: "Name", address: "address@domain"}]
 *
 * @param {String} str Address field
 * @return {Array} An array of address objects
 */
function parse(str) {
  var tokenizer = new Tokenizer(str);
  var tokens = tokenizer.tokenize();

  var addresses = [];
  var address = [];
  var parsedAddresses = [];

  tokens.forEach(function (token) {
    if (token.type === 'operator' && (token.value === ',' || token.value === ';')) {
      if (address.length) {
        addresses.push(address);
      }
      address = [];
    } else {
      address.push(token);
    }
  });

  if (address.length) {
    addresses.push(address);
  }

  addresses.forEach(function (address) {
    address = _handleAddress(address);
    if (address.length) {
      parsedAddresses = parsedAddresses.concat(address);
    }
  });

  return parsedAddresses;
};

/**
 * Converts tokens for a single address into an address object
 *
 * @param {Array} tokens Tokens object
 * @return {Object} Address object
 */
function _handleAddress(tokens) {
  var isGroup = false;
  var state = 'text';
  var address = void 0;
  var addresses = [];
  var data = {
    address: [],
    comment: [],
    group: [],
    text: []

    // Filter out <addresses>, (comments) and regular text
  };for (var i = 0, len = tokens.length; i < len; i++) {
    var token = tokens[i];

    if (token.type === 'operator') {
      switch (token.value) {
        case '<':
          state = 'address';
          break;
        case '(':
          state = 'comment';
          break;
        case ':':
          state = 'group';
          isGroup = true;
          break;
        default:
          state = 'text';
      }
    } else {
      if (token.value) {
        data[state].push(token.value);
      }
    }
  }

  // If there is no text but a comment, replace the two
  if (!data.text.length && data.comment.length) {
    data.text = data.comment;
    data.comment = [];
  }

  if (isGroup) {
    // http://tools.ietf.org/html/rfc2822#appendix-A.1.3
    data.text = data.text.join(' ');
    addresses.push({
      name: data.text || address && address.name,
      group: data.group.length ? parse(data.group.join(',')) : []
    });
  } else {
    // If no address was found, try to detect one from regular text
    if (!data.address.length && data.text.length) {
      for (var _i = data.text.length - 1; _i >= 0; _i--) {
        if (data.text[_i].match(/^[^@\s]+@[^@\s]+$/)) {
          data.address = data.text.splice(_i, 1);
          break;
        }
      }

      var _regexHandler = function _regexHandler(address) {
        if (!data.address.length) {
          data.address = [address.trim()];
          return ' ';
        } else {
          return address;
        }
      };

      // still no address
      if (!data.address.length) {
        for (var _i2 = data.text.length - 1; _i2 >= 0; _i2--) {
          data.text[_i2] = data.text[_i2].replace(/\s*\b[^@\s]+@[^@\s]+\b\s*/, _regexHandler).trim();
          if (data.address.length) {
            break;
          }
        }
      }
    }

    // If there's still is no text but a comment exixts, replace the two
    if (!data.text.length && data.comment.length) {
      data.text = data.comment;
      data.comment = [];
    }

    // Keep only the first address occurence, push others to regular text
    if (data.address.length > 1) {
      data.text = data.text.concat(data.address.splice(1));
    }

    // Join values with spaces
    data.text = data.text.join(' ');
    data.address = data.address.join(' ');

    if (!data.address && isGroup) {
      return [];
    } else {
      address = {
        address: data.address || data.text || '',
        name: data.text || data.address || ''
      };

      if (address.address === address.name) {
        if ((address.address || '').match(/@/)) {
          address.name = '';
        } else {
          address.address = '';
        }
      }

      addresses.push(address);
    }
  }

  return addresses;
};

/*
 * Operator tokens and which tokens are expected to end the sequence
 */
var OPERATORS = {
  '"': '"',
  '(': ')',
  '<': '>',
  ',': '',
  // Groups are ended by semicolons
  ':': ';',
  // Semicolons are not a legal delimiter per the RFC2822 grammar other
  // than for terminating a group, but they are also not valid for any
  // other use in this context.  Given that some mail clients have
  // historically allowed the semicolon as a delimiter equivalent to the
  // comma in their UI, it makes sense to treat them the same as a comma
  // when used outside of a group.
  ';': ''

  /**
   * Creates a Tokenizer object for tokenizing address field strings
   *
   * @constructor
   * @param {String} str Address field string
   */
};
var Tokenizer = function () {
  function Tokenizer(str) {
    _classCallCheck(this, Tokenizer);

    this.str = (str || '').toString();
    this.operatorCurrent = '';
    this.operatorExpecting = '';
    this.node = null;
    this.escaped = false;
    this.list = [];
  }

  /**
   * Tokenizes the original input string
   *
   * @return {Array} An array of operator|text tokens
   */


  _createClass(Tokenizer, [{
    key: 'tokenize',
    value: function tokenize() {
      var chr = void 0;
      var list = [];
      for (var i = 0, len = this.str.length; i < len; i++) {
        chr = this.str.charAt(i);
        this.checkChar(chr);
      }

      this.list.forEach(function (node) {
        node.value = (node.value || '').toString().trim();
        if (node.value) {
          list.push(node);
        }
      });

      return list;
    }

    /**
     * Checks if a character is an operator or text and acts accordingly
     *
     * @param {String} chr Character from the address field
     */

  }, {
    key: 'checkChar',
    value: function checkChar(chr) {
      if ((chr in OPERATORS || chr === '\\') && this.escaped) {
        this.escaped = false;
      } else if (this.operatorExpecting && chr === this.operatorExpecting) {
        this.node = {
          type: 'operator',
          value: chr
        };
        this.list.push(this.node);
        this.node = null;
        this.operatorExpecting = '';
        this.escaped = false;
        return;
      } else if (!this.operatorExpecting && chr in OPERATORS) {
        this.node = {
          type: 'operator',
          value: chr
        };
        this.list.push(this.node);
        this.node = null;
        this.operatorExpecting = OPERATORS[chr];
        this.escaped = false;
        return;
      }

      if (!this.escaped && chr === '\\') {
        this.escaped = true;
        return;
      }

      if (!this.node) {
        this.node = {
          type: 'text',
          value: ''
        };
        this.list.push(this.node);
      }

      if (this.escaped && chr !== '\\') {
        this.node.value += '\\';
      }

      this.node.value += chr;
      this.escaped = false;
    }
  }]);

  return Tokenizer;
}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hZGRyZXNzcGFyc2VyLmpzIl0sIm5hbWVzIjpbInBhcnNlIiwic3RyIiwidG9rZW5pemVyIiwiVG9rZW5pemVyIiwidG9rZW5zIiwidG9rZW5pemUiLCJhZGRyZXNzZXMiLCJhZGRyZXNzIiwicGFyc2VkQWRkcmVzc2VzIiwiZm9yRWFjaCIsInRva2VuIiwidHlwZSIsInZhbHVlIiwibGVuZ3RoIiwicHVzaCIsIl9oYW5kbGVBZGRyZXNzIiwiY29uY2F0IiwiaXNHcm91cCIsInN0YXRlIiwiZGF0YSIsImNvbW1lbnQiLCJncm91cCIsInRleHQiLCJpIiwibGVuIiwiam9pbiIsIm5hbWUiLCJtYXRjaCIsInNwbGljZSIsIl9yZWdleEhhbmRsZXIiLCJ0cmltIiwicmVwbGFjZSIsIk9QRVJBVE9SUyIsInRvU3RyaW5nIiwib3BlcmF0b3JDdXJyZW50Iiwib3BlcmF0b3JFeHBlY3RpbmciLCJub2RlIiwiZXNjYXBlZCIsImxpc3QiLCJjaHIiLCJjaGFyQXQiLCJjaGVja0NoYXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O2tCQWN3QkEsSzs7OztBQWR4Qjs7Ozs7Ozs7Ozs7Ozs7QUFjZSxTQUFTQSxLQUFULENBQWdCQyxHQUFoQixFQUFxQjtBQUNsQyxNQUFNQyxZQUFZLElBQUlDLFNBQUosQ0FBY0YsR0FBZCxDQUFsQjtBQUNBLE1BQU1HLFNBQVNGLFVBQVVHLFFBQVYsRUFBZjs7QUFFQSxNQUFNQyxZQUFZLEVBQWxCO0FBQ0EsTUFBSUMsVUFBVSxFQUFkO0FBQ0EsTUFBSUMsa0JBQWtCLEVBQXRCOztBQUVBSixTQUFPSyxPQUFQLENBQWUsVUFBVUMsS0FBVixFQUFpQjtBQUM5QixRQUFJQSxNQUFNQyxJQUFOLEtBQWUsVUFBZixLQUE4QkQsTUFBTUUsS0FBTixLQUFnQixHQUFoQixJQUF1QkYsTUFBTUUsS0FBTixLQUFnQixHQUFyRSxDQUFKLEVBQStFO0FBQzdFLFVBQUlMLFFBQVFNLE1BQVosRUFBb0I7QUFDbEJQLGtCQUFVUSxJQUFWLENBQWVQ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QUFJLENBQUMsS0FBS0YsaUJBQU4sSUFBMkJJLE9BQU9QLFNBQXRDLEVBQWlEO0FBQ3RELGFBQUtJLElBQUwsR0FBWTtBQUNWekIsZ0JBQU0sVUFESTtBQUVWQyxpQkFBTzJCO0FBRkcsU0FBWjtBQUlBLGFBQUtELElBQUwsQ0FBVXhCLElBQVYsQ0FBZSxLQUFLc0IsSUFBcEI7QUFDQSxhQUFLQSxJQUFMLEdBQVksSUFBWjtBQUNBLGFBQUtELGlCQUFMLEdBQXlCSCxVQUFVTyxHQUFWLENBQXpCO0FBQ0EsYUFBS0YsT0FBTCxHQUFlLEtBQWY7QUFDQTtBQUNEOztBQUVELFVBQUksQ0FBQyxLQUFLQSxPQUFOLElBQWlCRSxRQUFRLElBQTdCLEVBQW1DO0FBQ2pDLGFBQUtGLE9BQUwsR0FBZSxJQUFmO0FBQ0E7QUFDRDs7QUFFRCxVQUFJLENBQUMsS0FBS0QsSUFBVixFQUFnQjtBQUNkLGFBQUtBLElBQUwsR0FBWTtBQUNWekIsZ0JBQU0sTUFESTtBQUVWQyxpQkFBTztBQUZHLFNBQVo7QUFJQSxhQUFLMEIsSUFBTCxDQUFVeEIsSUFBVixDQUFlLEtBQUtzQixJQUFwQjtBQUNEOztBQUVELFVBQUksS0FBS0MsT0FBTCxJQUFnQkUsUUFBUSxJQUE1QixFQUFrQztBQUNoQyxhQUFLSCxJQUFMLENBQVV4QixLQUFWLElBQW1CLElBQW5CO0FBQ0Q7O0FBRUQsV0FBS3dCLElBQUwsQ0FBVXhCLEtBQVYsSUFBbUIyQixHQUFuQjtBQUNBLFdBQUtGLE9BQUwsR0FBZSxLQUFmO0FBQ0QiLCJmaWxlIjoiYWRkcmVzc3BhcnNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2VzIHN0cnVjdHVyZWQgZS1tYWlsIGFkZHJlc3NlcyBmcm9tIGFuIGFkZHJlc3MgZmllbGRcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgIFwiTmFtZSA8YWRkcmVzc0Bkb21haW4+XCJcbiAqXG4gKiB3aWxsIGJlIGNvbnZlcnRlZCB0b1xuICpcbiAqICAgICBbe25hbWU6IFwiTmFtZVwiLCBhZGRyZXNzOiBcImFkZHJlc3NAZG9tYWluXCJ9XVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZFxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGFkZHJlc3Mgb2JqZWN0c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZSAoc3RyKSB7XG4gIGNvbnN0IHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoc3RyKVxuICBjb25zdCB0b2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUoKVxuXG4gIGNvbnN0IGFkZHJlc3NlcyA9IFtdXG4gIGxldCBhZGRyZXNzID0gW11cbiAgbGV0IHBhcnNlZEFkZHJlc3NlcyA9IFtdXG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicgJiYgKHRva2VuLnZhbHVlID09PSAnLCcgfHwgdG9rZW4udmFsdWUgPT09ICc7JykpIHtcbiAgICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKVxuICAgICAgfVxuICAgICAgYWRkcmVzcyA9IFtdXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaCh0b2tlbilcbiAgICB9XG4gIH0pXG5cbiAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgYWRkcmVzc2VzLnB1c2goYWRkcmVzcylcbiAgfVxuXG4gIGFkZHJlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgYWRkcmVzcyA9IF9oYW5kbGVBZGRyZXNzKGFkZHJlc3MpXG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICBwYXJzZWRBZGRyZXNzZXMgPSBwYXJzZWRBZGRyZXNzZXMuY29uY2F0KGFkZHJlc3MpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBwYXJzZWRBZGRyZXNzZXNcbn07XG5cbi8qKlxuICogQ29udmVydHMgdG9rZW5zIGZvciBhIHNpbmdsZSBhZGRyZXNzIGludG8gYW4gYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB0b2tlbnMgVG9rZW5zIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSBBZGRyZXNzIG9iamVjdFxuICovXG5mdW5jdGlvbiBfaGFuZGxlQWRkcmVzcyAodG9rZW5zKSB7XG4gIGxldCBpc0dyb3VwID0gZmFsc2VcbiAgbGV0IHN0YXRlID0gJ3RleHQnXG4gIGxldCBhZGRyZXNzXG4gIGNvbnN0IGFkZHJlc3NlcyA9IFtdXG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgYWRkcmVzczogW10sXG4gICAgY29tbWVudDogW10sXG4gICAgZ3JvdXA6IFtdLFxuICAgIHRleHQ6IFtdXG4gIH1cblxuICAvLyBGaWx0ZXIgb3V0IDxhZGRyZXNzZXM+LCAoY29tbWVudHMpIGFuZCByZWd1bGFyIHRleHRcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRva2Vucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldXG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ29wZXJhdG9yJykge1xuICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBzdGF0ZSA9ICdhZGRyZXNzJ1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIHN0YXRlID0gJ2NvbW1lbnQnXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgc3RhdGUgPSAnZ3JvdXAnXG4gICAgICAgICAgaXNHcm91cCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHN0YXRlID0gJ3RleHQnXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBkYXRhW3N0YXRlXS5wdXNoKHRva2VuLnZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCwgcmVwbGFjZSB0aGUgdHdvXG4gIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50XG4gICAgZGF0YS5jb21tZW50ID0gW11cbiAgfVxuXG4gIGlmIChpc0dyb3VwKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNhcHBlbmRpeC1BLjEuM1xuICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5qb2luKCcgJylcbiAgICBhZGRyZXNzZXMucHVzaCh7XG4gICAgICBuYW1lOiBkYXRhLnRleHQgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5uYW1lKSxcbiAgICAgIGdyb3VwOiBkYXRhLmdyb3VwLmxlbmd0aCA/IHBhcnNlKGRhdGEuZ3JvdXAuam9pbignLCcpKSA6IFtdXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBubyBhZGRyZXNzIHdhcyBmb3VuZCwgdHJ5IHRvIGRldGVjdCBvbmUgZnJvbSByZWd1bGFyIHRleHRcbiAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGggJiYgZGF0YS50ZXh0Lmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoZGF0YS50ZXh0W2ldLm1hdGNoKC9eW15AXFxzXStAW15AXFxzXSskLykpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLnRleHQuc3BsaWNlKGksIDEpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgX3JlZ2V4SGFuZGxlciA9IGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICAgIGRhdGEuYWRkcmVzcyA9IFthZGRyZXNzLnRyaW0oKV1cbiAgICAgICAgICByZXR1cm4gJyAnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFkZHJlc3NcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzdGlsbCBubyBhZGRyZXNzXG4gICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGRhdGEudGV4dFtpXSA9IGRhdGEudGV4dFtpXS5yZXBsYWNlKC9cXHMqXFxiW15AXFxzXStAW15AXFxzXStcXGJcXHMqLywgX3JlZ2V4SGFuZGxlcikudHJpbSgpXG4gICAgICAgICAgaWYgKGRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBzdGlsbCBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQgZXhpeHRzLCByZXBsYWNlIHRoZSB0d29cbiAgICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50XG4gICAgICBkYXRhLmNvbW1lbnQgPSBbXVxuICAgIH1cblxuICAgIC8vIEtlZXAgb25seSB0aGUgZmlyc3QgYWRkcmVzcyBvY2N1cmVuY2UsIHB1c2ggb3RoZXJzIHRvIHJlZ3VsYXIgdGV4dFxuICAgIGlmIChkYXRhLmFkZHJlc3MubGVuZ3RoID4gMSkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmNvbmNhdChkYXRhLmFkZHJlc3Muc3BsaWNlKDEpKVxuICAgIH1cblxuICAgIC8vIEpvaW4gdmFsdWVzIHdpdGggc3BhY2VzXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKVxuICAgIGRhdGEuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcy5qb2luKCcgJylcblxuICAgIGlmICghZGF0YS5hZGRyZXNzICYmIGlzR3JvdXApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MgfHwgZGF0YS50ZXh0IHx8ICcnLFxuICAgICAgICBuYW1lOiBkYXRhLnRleHQgfHwgZGF0YS5hZGRyZXNzIHx8ICcnXG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRyZXNzLmFkZHJlc3MgPT09IGFkZHJlc3MubmFtZSkge1xuICAgICAgICBpZiAoKGFkZHJlc3MuYWRkcmVzcyB8fCAnJykubWF0Y2goL0AvKSkge1xuICAgICAgICAgIGFkZHJlc3MubmFtZSA9ICcnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkcmVzcy5hZGRyZXNzID0gJydcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhZGRyZXNzZXNcbn07XG5cbi8qXG4gKiBPcGVyYXRvciB0b2tlbnMgYW5kIHdoaWNoIHRva2VucyBhcmUgZXhwZWN0ZWQgdG8gZW5kIHRoZSBzZXF1ZW5jZVxuICovXG5jb25zdCBPUEVSQVRPUlMgPSB7XG4gICdcIic6ICdcIicsXG4gICcoJzogJyknLFxuICAnPCc6ICc+JyxcbiAgJywnOiAnJyxcbiAgLy8gR3JvdXBzIGFyZSBlbmRlZCBieSBzZW1pY29sb25zXG4gICc6JzogJzsnLFxuICAvLyBTZW1pY29sb25zIGFyZSBub3QgYSBsZWdhbCBkZWxpbWl0ZXIgcGVyIHRoZSBSRkMyODIyIGdyYW1tYXIgb3RoZXJcbiAgLy8gdGhhbiBmb3IgdGVybWluYXRpbmcgYSBncm91cCwgYnV0IHRoZXkgYXJlIGFsc28gbm90IHZhbGlkIGZvciBhbnlcbiAgLy8gb3RoZXIgdXNlIGluIHRoaXMgY29udGV4dC4gIEdpdmVuIHRoYXQgc29tZSBtYWlsIGNsaWVudHMgaGF2ZVxuICAvLyBoaXN0b3JpY2FsbHkgYWxsb3dlZCB0aGUgc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGVyIGVxdWl2YWxlbnQgdG8gdGhlXG4gIC8vIGNvbW1hIGluIHRoZWlyIFVJLCBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCB0aGVtIHRoZSBzYW1lIGFzIGEgY29tbWFcbiAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBncm91cC5cbiAgJzsnOiAnJ1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBUb2tlbml6ZXIgb2JqZWN0IGZvciB0b2tlbml6aW5nIGFkZHJlc3MgZmllbGQgc3RyaW5nc1xuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkIHN0cmluZ1xuICovXG5jbGFzcyBUb2tlbml6ZXIge1xuICBjb25zdHJ1Y3RvciAoc3RyKSB7XG4gICAgdGhpcy5zdHIgPSAoc3RyIHx8ICcnKS50b1N0cmluZygpXG4gICAgdGhpcy5vcGVyYXRvckN1cnJlbnQgPSAnJ1xuICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSAnJ1xuICAgIHRoaXMubm9kZSA9IG51bGxcbiAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgIHRoaXMubGlzdCA9IFtdXG4gIH1cblxuICAvKipcbiAgICogVG9rZW5pemVzIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmdcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9wZXJhdG9yfHRleHQgdG9rZW5zXG4gICAqL1xuICB0b2tlbml6ZSAoKSB7XG4gICAgbGV0IGNoclxuICAgIGxldCBsaXN0ID0gW11cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5zdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNociA9IHRoaXMuc3RyLmNoYXJBdChpKVxuICAgICAgdGhpcy5jaGVja0NoYXIoY2hyKVxuICAgIH1cblxuICAgIHRoaXMubGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBub2RlLnZhbHVlID0gKG5vZGUudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICBsaXN0LnB1c2gobm9kZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGxpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBjaGFyYWN0ZXIgaXMgYW4gb3BlcmF0b3Igb3IgdGV4dCBhbmQgYWN0cyBhY2NvcmRpbmdseVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2hyIENoYXJhY3RlciBmcm9tIHRoZSBhZGRyZXNzIGZpZWxkXG4gICAqL1xuICBjaGVja0NoYXIgKGNocikge1xuICAgIGlmICgoY2hyIGluIE9QRVJBVE9SUyB8fCBjaHIgPT09ICdcXFxcJykgJiYgdGhpcy5lc2NhcGVkKSB7XG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgPT09IHRoaXMub3BlcmF0b3JFeHBlY3RpbmcpIHtcbiAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgdmFsdWU6IGNoclxuICAgICAgfVxuICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKVxuICAgICAgdGhpcy5ub2RlID0gbnVsbFxuICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnXG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICghdGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgaW4gT1BFUkFUT1JTKSB7XG4gICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgIHR5cGU6ICdvcGVyYXRvcicsXG4gICAgICAgIHZhbHVlOiBjaHJcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSlcbiAgICAgIHRoaXMubm9kZSA9IG51bGxcbiAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSBPUEVSQVRPUlNbY2hyXVxuICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5lc2NhcGVkICYmIGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICB0aGlzLmVzY2FwZWQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubm9kZSkge1xuICAgICAgdGhpcy5ub2RlID0ge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVzY2FwZWQgJiYgY2hyICE9PSAnXFxcXCcpIHtcbiAgICAgIHRoaXMubm9kZS52YWx1ZSArPSAnXFxcXCdcbiAgICB9XG5cbiAgICB0aGlzLm5vZGUudmFsdWUgKz0gY2hyXG4gICAgdGhpcy5lc2NhcGVkID0gZmFsc2VcbiAgfVxufVxuIl19

/***/ }),
/* 179 */
/*!*************************************************************************!*\
  !*** ./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 $propertyIsEnumerable = {}.propertyIsEnumerable;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// Nashorn ~ JDK8 bug
var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);

// `Object.prototype.propertyIsEnumerable` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
  var descriptor = getOwnPropertyDescriptor(this, V);
  return !!descriptor && descriptor.enumerable;
} : $propertyIsEnumerable;


/***/ }),
/* 180 */
/*!**********************************************************!*\
  !*** ./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 */ 73);
var toLength = __webpack_require__(/*! ../internals/to-length */ 84);
var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 212);

// `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 -- NaN check
    if (IS_INCLUDES && el != el) while (length > index) {
      value = O[index++];
      // eslint-disable-next-line no-self-compare -- NaN check
      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.es/ecma262/#sec-array.prototype.includes
  includes: createMethod(true),
  // `Array.prototype.indexOf` method
  // https://tc39.es/ecma262/#sec-array.prototype.indexof
  indexOf: createMethod(false)
};


/***/ }),
/* 181 */
/*!***************************************************************************!*\
  !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***!
  \***************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe
exports.f = Object.getOwnPropertySymbols;


/***/ }),
/* 182 */
/*!*****************************************************!*\
  !*** ./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 */ 37);

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;


/***/ }),
/* 183 */
/*!***************************************************!*\
  !*** ./node_modules/core-js/internals/classof.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 */ 99);
var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 74);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

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 = TO_STRING_TAG_SUPPORT ? classofRaw : 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;
};


/***/ }),
/* 184 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/iterators-core.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(/*! ../internals/fails */ 37);
var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 168);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var has = __webpack_require__(/*! ../internals/has */ 44);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 98);

var ITERATOR = wellKnownSymbol('iterator');
var BUGGY_SAFARI_ITERATORS = false;

var returnThis = function () { return this; };

// `%IteratorPrototype%` object
// https://tc39.es/ecma262/#sec-%iteratorprototype%-object
var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;

/* eslint-disable es/no-array-prototype-keys -- safe */
if ([].keys) {
  arrayIterator = [].keys();
  // Safari 8 has buggy iterators w/o `next`
  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
  else {
    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
  }
}

var NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {
  var test = {};
  // FF44- legacy iterators case
  return IteratorPrototype[ITERATOR].call(test) !== test;
});

if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
if ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {
  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
}

module.exports = {
  IteratorPrototype: IteratorPrototype,
  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
};


/***/ }),
/* 185 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/modules/web.timers.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var global = __webpack_require__(/*! ../internals/global */ 31);
var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 106);

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)
});


/***/ }),
/* 186 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/ie8-dom-define.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var createElement = __webpack_require__(/*! ../internals/document-create-element */ 138);

// Thank's IE8 for his funny defineProperty
module.exports = !DESCRIPTORS && !fails(function () {
  return Object.defineProperty(createElement('div'), 'a', {
    get: function () { return 7; }
  }).a != 7;
});


/***/ }),
/* 187 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/is-forced.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);

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;


/***/ }),
/* 188 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/internals/shared.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 86);
var store = __webpack_require__(/*! ../internals/shared-store */ 141);

(module.exports = function (key, value) {
  return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
  version: '3.8.2',
  mode: IS_PURE ? 'pure' : 'global',
  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'
});


/***/ }),
/* 189 */
/*!****************************************************!*\
  !*** ./node_modules/core-js-pure/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);
};


/***/ }),
/* 190 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/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'
];


/***/ }),
/* 191 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js-pure/internals/html.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 75);

module.exports = getBuiltIn('document', 'documentElement');


/***/ }),
/* 192 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/native-symbol.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);

module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
  // Chrome 38 Symbol has incorrect toString conversion
  // eslint-disable-next-line no-undef
  return !String(Symbol());
});


/***/ }),
/* 193 */
/*!***************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/native-promise-constructor.js ***!
  \***************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);

module.exports = global.Promise;


/***/ }),
/* 194 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/inspect-source.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var store = __webpack_require__(/*! ../internals/shared-store */ 141);

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;


/***/ }),
/* 195 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/species-constructor.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var SPECIES = wellKnownSymbol('species');

// `SpeciesConstructor` abstract operation
// https://tc39.es/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);
};


/***/ }),
/* 196 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js-pure/internals/task.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var bind = __webpack_require__(/*! ../internals/function-bind-context */ 116);
var html = __webpack_require__(/*! ../internals/html */ 191);
var createElement = __webpack_require__(/*! ../internals/document-create-element */ 138);
var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 197);
var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ 118);

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 (IS_NODE) {
    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
  // except iOS - https://github.com/zloirock/core-js/issues/624
  } else if (MessageChannel && !IS_IOS) {
    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 &&
    location && location.protocol !== 'file:' &&
    !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
};


/***/ }),
/* 197 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/engine-is-ios.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 106);

module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);


/***/ }),
/* 198 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/promise-resolve.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 109);

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;
};


/***/ }),
/* 199 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/define-iterator.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 280);
var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 139);
var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 159);
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 145);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var redefine = __webpack_require__(/*! ../internals/redefine */ 108);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 86);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);
var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 200);

var IteratorPrototype = IteratorsCore.IteratorPrototype;
var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
var ITERATOR = wellKnownSymbol('iterator');
var KEYS = 'keys';
var VALUES = 'values';
var ENTRIES = 'entries';

var returnThis = function () { return this; };

module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
  createIteratorConstructor(IteratorConstructor, NAME, next);

  var getIterationMethod = function (KIND) {
    if (KIND === DEFAULT && defaultIterator) return defaultIterator;
    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
    switch (KIND) {
      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
    } return function () { return new IteratorConstructor(this); };
  };

  var TO_STRING_TAG = NAME + ' Iterator';
  var INCORRECT_VALUES_NAME = false;
  var IterablePrototype = Iterable.prototype;
  var nativeIterator = IterablePrototype[ITERATOR]
    || IterablePrototype['@@iterator']
    || DEFAULT && IterablePrototype[DEFAULT];
  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
  var CurrentIteratorPrototype, methods, KEY;

  // fix native
  if (anyNativeIterator) {
    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
        if (setPrototypeOf) {
          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {
          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);
        }
      }
      // Set @@toStringTag to native iterators
      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
    }
  }

  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
    INCORRECT_VALUES_NAME = true;
    defaultIterator = function values() { return nativeIterator.call(this); };
  }

  // define iterator
  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);
  }
  Iterators[NAME] = defaultIterator;

  // export additional methods
  if (DEFAULT) {
    methods = {
      values: getIterationMethod(VALUES),
      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
      entries: getIterationMethod(ENTRIES)
    };
    if (FORCED) for (KEY in methods) {
      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
        redefine(IterablePrototype, KEY, methods[KEY]);
      }
    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
  }

  return methods;
};


/***/ }),
/* 200 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/iterators-core.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 139);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var has = __webpack_require__(/*! ../internals/has */ 54);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 86);

var ITERATOR = wellKnownSymbol('iterator');
var BUGGY_SAFARI_ITERATORS = false;

var returnThis = function () { return this; };

// `%IteratorPrototype%` object
// https://tc39.es/ecma262/#sec-%iteratorprototype%-object
var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;

if ([].keys) {
  arrayIterator = [].keys();
  // Safari 8 has buggy iterators w/o `next`
  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
  else {
    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
  }
}

if (IteratorPrototype == undefined) IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {
  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
}

module.exports = {
  IteratorPrototype: IteratorPrototype,
  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
};


/***/ }),
/* 201 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.iterator.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 222);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 147);
var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 199);

var ARRAY_ITERATOR = 'Array Iterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);

// `Array.prototype.entries` method
// https://tc39.es/ecma262/#sec-array.prototype.entries
// `Array.prototype.keys` method
// https://tc39.es/ecma262/#sec-array.prototype.keys
// `Array.prototype.values` method
// https://tc39.es/ecma262/#sec-array.prototype.values
// `Array.prototype[@@iterator]` method
// https://tc39.es/ecma262/#sec-array.prototype-@@iterator
// `CreateArrayIterator` internal method
// https://tc39.es/ecma262/#sec-createarrayiterator
module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
  setInternalState(this, {
    type: ARRAY_ITERATOR,
    target: toIndexedObject(iterated), // target
    index: 0,                          // next index
    kind: kind                         // kind
  });
// `%ArrayIteratorPrototype%.next` method
// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next
}, function () {
  var state = getInternalState(this);
  var target = state.target;
  var kind = state.kind;
  var index = state.index++;
  if (!target || index >= target.length) {
    state.target = undefined;
    return { value: undefined, done: true };
  }
  if (kind == 'keys') return { value: index, done: false };
  if (kind == 'values') return { value: target[index], done: false };
  return { value: [index, target[index]], done: false };
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values%
// https://tc39.es/ecma262/#sec-createunmappedargumentsobject
// https://tc39.es/ecma262/#sec-createmappedargumentsobject
Iterators.Arguments = Iterators.Array;

// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');


/***/ }),
/* 202 */
/*!********************************************************!*\
  !*** ./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 */ 42);

// `RegExp.prototype.flags` getter implementation
// https://tc39.es/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;
};


/***/ }),
/* 203 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/modules/es.string.split.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 149);
var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 242);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);
var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 236);
var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 171);
var toLength = __webpack_require__(/*! ../internals/to-length */ 84);
var callRegExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 150);
var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 162);
var stickyHelpers = __webpack_require__(/*! ../internals/regexp-sticky-helpers */ 223);

var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
var arrayPush = [].push;
var min = Math.min;
var MAX_UINT32 = 0xFFFFFFFF;

// @@split logic
fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {
  var internalSplit;
  if (
    'abbc'.split(/(b)*/)[1] == 'c' ||
    // eslint-disable-next-line regexp/no-empty-group -- required for testing
    'test'.split(/(?:)/, -1).length != 4 ||
    'ab'.split(/(?:ab)*/).length != 2 ||
    '.'.split(/(.?)(.?)/).length != 4 ||
    // eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing
    '.'.split(/()()/).length > 1 ||
    ''.split(/.?/).length
  ) {
    // based on es5-shim implementation, need to rework it
    internalSplit = function (separator, limit) {
      var string = String(requireObjectCoercible(this));
      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
      if (lim === 0) return [];
      if (separator === undefined) return [string];
      // If `separator` is not a regex, use native split
      if (!isRegExp(separator)) {
        return nativeSplit.call(string, separator, lim);
      }
      var output = [];
      var flags = (separator.ignoreCase ? 'i' : '') +
                  (separator.multiline ? 'm' : '') +
                  (separator.unicode ? 'u' : '') +
                  (separator.sticky ? 'y' : '');
      var lastLastIndex = 0;
      // Make `global` and avoid `lastIndex` issues by working with a copy
      var separatorCopy = new RegExp(separator.source, flags + 'g');
      var match, lastIndex, lastLength;
      while (match = regexpExec.call(separatorCopy, string)) {
        lastIndex = separatorCopy.lastIndex;
        if (lastIndex > lastLastIndex) {
          output.push(string.slice(lastLastIndex, match.index));
          if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));
          lastLength = match[0].length;
          lastLastIndex = lastIndex;
          if (output.length >= lim) break;
        }
        if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
      }
      if (lastLastIndex === string.length) {
        if (lastLength || !separatorCopy.test('')) output.push('');
      } else output.push(string.slice(lastLastIndex));
      return output.length > lim ? output.slice(0, lim) : output;
    };
  // Chakra, V8
  } else if ('0'.split(undefined, 0).length) {
    internalSplit = function (separator, limit) {
      return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);
    };
  } else internalSplit = nativeSplit;

  return [
    // `String.prototype.split` method
    // https://tc39.es/ecma262/#sec-string.prototype.split
    function split(separator, limit) {
      var O = requireObjectCoercible(this);
      var splitter = separator == undefined ? undefined : separator[SPLIT];
      return splitter !== undefined
        ? splitter.call(separator, O, limit)
        : internalSplit.call(String(O), separator, limit);
    },
    // `RegExp.prototype[@@split]` method
    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
    //
    // NOTE: This cannot be properly polyfilled in engines that don't support
    // the 'y' flag.
    function (regexp, limit) {
      var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);
      if (res.done) return res.value;

      var rx = anObject(regexp);
      var S = String(this);
      var C = speciesConstructor(rx, RegExp);

      var unicodeMatching = rx.unicode;
      var flags = (rx.ignoreCase ? 'i' : '') +
                  (rx.multiline ? 'm' : '') +
                  (rx.unicode ? 'u' : '') +
                  (UNSUPPORTED_Y ? 'g' : 'y');

      // ^(? + rx + ) is needed, in combination with some S slicing, to
      // simulate the 'y' flag.
      var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);
      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
      if (lim === 0) return [];
      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];
      var p = 0;
      var q = 0;
      var A = [];
      while (q < S.length) {
        splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;
        var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S.slice(q) : S);
        var e;
        if (
          z === null ||
          (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p
        ) {
          q = advanceStringIndex(S, q, unicodeMatching);
        } else {
          A.push(S.slice(p, q));
          if (A.length === lim) return A;
          for (var i = 1; i <= z.length - 1; i++) {
            A.push(z[i]);
            if (A.length === lim) return A;
          }
          q = p = e;
        }
      }
      A.push(S.slice(p));
      return A;
    }
  ];
}, UNSUPPORTED_Y);


/***/ }),
/* 204 */
/*!********************************************************!*\
  !*** ./node_modules/core-js/modules/es.string.link.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 65);
var createHTML = __webpack_require__(/*! ../internals/create-html */ 325);
var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 326);

// `String.prototype.link` method
// https://tc39.es/ecma262/#sec-string.prototype.link
$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {
  link: function link(url) {
    return createHTML(this, 'a', 'href', url);
  }
});


/***/ }),
/* 205 */,
/* 206 */,
/* 207 */,
/* 208 */
/*!***********************************************************!*\
  !*** ./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 */ 30);
var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 129);

var WeakMap = global.WeakMap;

module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));


/***/ }),
/* 209 */
/*!***********************************************************************!*\
  !*** ./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 */ 44);
var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 210);
var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 127);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 66);

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));
  }
};


/***/ }),
/* 210 */
/*!****************************************************!*\
  !*** ./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 */ 78);
var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 211);
var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 181);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);

// 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;
};


/***/ }),
/* 211 */
/*!*************************************************************************!*\
  !*** ./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 */ 155);
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 112);

var hiddenKeys = enumBugKeys.concat('length', 'prototype');

// `Object.getOwnPropertyNames` method
// https://tc39.es/ecma262/#sec-object.getownpropertynames
// eslint-disable-next-line es/no-object-getownpropertynames -- safe
exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  return internalObjectKeys(O, hiddenKeys);
};


/***/ }),
/* 212 */
/*!*************************************************************!*\
  !*** ./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 */ 79);

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(integer, length).
module.exports = function (index, length) {
  var integer = toInteger(index);
  return integer < 0 ? max(integer + length, 0) : min(integer, length);
};


/***/ }),
/* 213 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

/* eslint-disable es/no-symbol -- required for testing */
var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 137);

module.exports = NATIVE_SYMBOL
  && !Symbol.sham
  && typeof Symbol.iterator == 'symbol';


/***/ }),
/* 214 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/internals/function-bind-context.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var aFunction = __webpack_require__(/*! ../internals/a-function */ 131);

// 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);
  };
};


/***/ }),
/* 215 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

/* eslint-disable no-proto -- safe */
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 244);

// `Object.setPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.setprototypeof
// Works with __proto__ only. Old v8 can't work with null proto objects.
// eslint-disable-next-line es/no-object-setprototypeof -- safe
module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
  var CORRECT_SETTER = false;
  var test = {};
  var setter;
  try {
    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
    setter.call(test, []);
    CORRECT_SETTER = test instanceof Array;
  } catch (error) { /* empty */ }
  return function setPrototypeOf(O, proto) {
    anObject(O);
    aPossiblePrototype(proto);
    if (CORRECT_SETTER) setter.call(O, proto);
    else O.__proto__ = proto;
    return O;
  };
}() : undefined);


/***/ }),
/* 216 */
/*!************************************************************!*\
  !*** ./node_modules/core-js/internals/object-to-string.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 99);
var classof = __webpack_require__(/*! ../internals/classof */ 183);

// `Object.prototype.toString` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.tostring
module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
  return '[object ' + classof(this) + ']';
};


/***/ }),
/* 217 */
/*!************************************************************!*\
  !*** ./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 */ 79);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);

// `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.es/ecma262/#sec-string.prototype.codepointat
  codeAt: createMethod(false),
  // `String.prototype.at` method
  // https://github.com/mathiasbynens/String.prototype.at
  charAt: createMethod(true)
};


/***/ }),
/* 218 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/dom-iterables.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// iterable DOM collections
// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
module.exports = {
  CSSRuleList: 0,
  CSSStyleDeclaration: 0,
  CSSValueList: 0,
  ClientRectList: 0,
  DOMRectList: 0,
  DOMStringList: 0,
  DOMTokenList: 1,
  DataTransferItemList: 0,
  FileList: 0,
  HTMLAllCollection: 0,
  HTMLCollection: 0,
  HTMLFormElement: 0,
  HTMLSelectElement: 0,
  MediaList: 0,
  MimeTypeArray: 0,
  NamedNodeMap: 0,
  NodeList: 1,
  PaintRequestList: 0,
  Plugin: 0,
  PluginArray: 0,
  SVGLengthList: 0,
  SVGNumberList: 0,
  SVGPathSegList: 0,
  SVGPointList: 0,
  SVGStringList: 0,
  SVGTransformList: 0,
  SourceBufferList: 0,
  StyleSheetList: 0,
  TextTrackCueList: 0,
  TextTrackList: 0,
  TouchList: 0
};


/***/ }),
/* 219 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js/modules/es.array.iterator.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 73);
var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 234);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 113);
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 130);
var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 237);

var ARRAY_ITERATOR = 'Array Iterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);

// `Array.prototype.entries` method
// https://tc39.es/ecma262/#sec-array.prototype.entries
// `Array.prototype.keys` method
// https://tc39.es/ecma262/#sec-array.prototype.keys
// `Array.prototype.values` method
// https://tc39.es/ecma262/#sec-array.prototype.values
// `Array.prototype[@@iterator]` method
// https://tc39.es/ecma262/#sec-array.prototype-@@iterator
// `CreateArrayIterator` internal method
// https://tc39.es/ecma262/#sec-createarrayiterator
module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
  setInternalState(this, {
    type: ARRAY_ITERATOR,
    target: toIndexedObject(iterated), // target
    index: 0,                          // next index
    kind: kind                         // kind
  });
// `%ArrayIteratorPrototype%.next` method
// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next
}, function () {
  var state = getInternalState(this);
  var target = state.target;
  var kind = state.kind;
  var index = state.index++;
  if (!target || index >= target.length) {
    state.target = undefined;
    return { value: undefined, done: true };
  }
  if (kind == 'keys') return { value: index, done: false };
  if (kind == 'values') return { value: target[index], done: false };
  return { value: [index, target[index]], done: false };
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values%
// https://tc39.es/ecma262/#sec-createunmappedargumentsobject
// https://tc39.es/ecma262/#sec-createmappedargumentsobject
Iterators.Arguments = Iterators.Array;

// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');


/***/ }),
/* 220 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-keys.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 258);
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 190);

// `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
module.exports = Object.keys || function keys(O) {
  return internalObjectKeys(O, enumBugKeys);
};


/***/ }),
/* 221 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/to-absolute-index.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(/*! ../internals/to-integer */ 142);

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(integer, length).
module.exports = function (index, length) {
  var integer = toInteger(index);
  return integer < 0 ? max(integer + length, 0) : min(integer, length);
};


/***/ }),
/* 222 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/add-to-unscopables.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function () { /* empty */ };


/***/ }),
/* 223 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/internals/regexp-sticky-helpers.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var fails = __webpack_require__(/*! ./fails */ 37);

// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,
// so we use an intermediate function.
function RE(s, f) {
  return RegExp(s, f);
}

exports.UNSUPPORTED_Y = fails(function () {
  // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
  var re = RE('a', 'y');
  re.lastIndex = 2;
  return re.exec('abcd') != null;
});

exports.BROKEN_CARET = fails(function () {
  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
  var re = RE('^r', 'gy');
  re.lastIndex = 2;
  return re.exec('str') != null;
});


/***/ }),
/* 224 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/modules/es.string.match.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 149);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var toLength = __webpack_require__(/*! ../internals/to-length */ 84);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);
var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 171);
var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 150);

// @@match logic
fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {
  return [
    // `String.prototype.match` method
    // https://tc39.es/ecma262/#sec-string.prototype.match
    function match(regexp) {
      var O = requireObjectCoercible(this);
      var matcher = regexp == undefined ? undefined : regexp[MATCH];
      return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
    },
    // `RegExp.prototype[@@match]` method
    // https://tc39.es/ecma262/#sec-regexp.prototype-@@match
    function (regexp) {
      var res = maybeCallNative(nativeMatch, regexp, this);
      if (res.done) return res.value;

      var rx = anObject(regexp);
      var S = String(this);

      if (!rx.global) return regExpExec(rx, S);

      var fullUnicode = rx.unicode;
      rx.lastIndex = 0;
      var A = [];
      var n = 0;
      var result;
      while ((result = regExpExec(rx, S)) !== null) {
        var matchStr = String(result[0]);
        A[n] = matchStr;
        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
        n++;
      }
      return n === 0 ? null : A;
    }
  ];
});


/***/ }),
/* 225 */
/*!***********************************!*\
  !*** ./dev/Component/Checkbox.js ***!
  \***********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* 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 Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractCheckbox */ 177);




var CheckboxComponent = /*#__PURE__*/function (_AbstractCheckbox) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(CheckboxComponent, _AbstractCheckbox);

  function CheckboxComponent() {
    return _AbstractCheckbox.apply(this, arguments) || this;
  }

  return CheckboxComponent;
}(Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_2__[/* AbstractCheckbox */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(CheckboxComponent, 'CheckboxComponent'));

/***/ }),
/* 226 */
/*!**********************************!*\
  !*** ./dev/Common/HtmlEditor.js ***!
  \**********************************/
/*! exports provided: HtmlEditor, 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__, "HtmlEditor", function() { return HtmlEditor; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return HtmlEditor; });
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.match.js */ 224);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__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 ___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/Settings */ 5);











var HtmlEditor = /*#__PURE__*/function () {
  /**
   * @param {Object} element
   * @param {Function=} onBlur
   * @param {Function=} onReady
   * @param {Function=} onModeChange
   */
  function HtmlEditor(element, onBlur, onReady, onModeChange) {
    if (onBlur === void 0) {
      onBlur = null;
    }

    if (onReady === void 0) {
      onReady = null;
    }

    if (onModeChange === void 0) {
      onModeChange = null;
    }

    this.editor = void 0;
    this.blurTimer = 0;
    this.__resizable = false;
    this.__inited = false;
    this.onBlur = null;
    this.onReady = null;
    this.onModeChange = null;
    this.element = void 0;
    this.$element = void 0;
    this.resize = void 0;
    this.onBlur = onBlur;
    this.onReady = onReady;
    this.onModeChange = onModeChange;
    this.element = element;
    this.$element = $__WEBPACK_IMPORTED_MODULE_6___default()(element);
    this.resize = ___WEBPACK_IMPORTED_MODULE_5___default.a.throttle(___WEBPACK_IMPORTED_MODULE_5___default.a.bind(this.resizeEditor, this), 100);
    this.init();
  }

  var _proto = HtmlEditor.prototype;

  _proto.runOnBlur = function runOnBlur() {
    if (this.onBlur) {
      this.onBlur();
    }
  };

  _proto.blurTrigger = function blurTrigger() {
    var _this = this;

    if (this.onBlur) {
      window__WEBPACK_IMPORTED_MODULE_4___default.a.clearTimeout(this.blurTimer);
      this.blurTimer = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default()(function () {
        _this.runOnBlur();
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Magics"].Time200ms);
    }
  };

  _proto.focusTrigger = function focusTrigger() {
    if (this.onBlur) {
      window__WEBPACK_IMPORTED_MODULE_4___default.a.clearTimeout(this.blurTimer);
    }
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isHtml = function isHtml() {
    return this.editor ? 'wysiwyg' === this.editor.mode : false;
  }
  /**
   * @returns {void}
   */
  ;

  _proto.clearCachedSignature = function clearCachedSignature() {
    if (this.editor) {
      this.editor.execCommand('insertSignature', {
        clearCache: true
      });
    }
  }
  /**
   * @param {string} signature
   * @param {bool} html
   * @param {bool} insertBefore
   * @returns {void}
   */
  ;

  _proto.setSignature = function setSignature(signature, html, insertBefore) {
    if (insertBefore === void 0) {
      insertBefore = false;
    }

    if (this.editor) {
      this.editor.execCommand('insertSignature', {
        isHtml: html,
        insertBefore: insertBefore,
        signature: signature
      });
    }
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.checkDirty = function checkDirty() {
    return this.editor ? this.editor.checkDirty() : false;
  };

  _proto.resetDirty = function resetDirty() {
    if (this.editor) {
      this.editor.resetDirty();
    }
  }
  /**
   * @param {boolean=} wrapIsHtml = false
   * @returns {string}
   */
  ;

  _proto.getData = function getData(wrapIsHtml) {
    if (wrapIsHtml === void 0) {
      wrapIsHtml = false;
    }

    var result = '';

    if (this.editor) {
      try {
        if ('plain' === this.editor.mode && this.editor.plugins.plain && this.editor.__plain) {
          result = this.editor.__plain.getRawData();
        } else {
          result = wrapIsHtml ? '<div data-html-editor-font-wrapper="true" style="font-family: arial, sans-serif; font-size: 13px;">' + this.editor.getData() + '</div>' : this.editor.getData();
        }
      } catch (e) {} // eslint-disable-line no-empty

    }

    return result;
  }
  /**
   * @param {boolean=} wrapIsHtml = false
   * @returns {string}
   */
  ;

  _proto.getDataWithHtmlMark = function getDataWithHtmlMark(wrapIsHtml) {
    if (wrapIsHtml === void 0) {
      wrapIsHtml = false;
    }

    return (this.isHtml() ? ':HTML:' : '') + this.getData(wrapIsHtml);
  };

  _proto.modeToggle = function modeToggle(plain, resize) {
    if (this.editor) {
      try {
        if (plain) {
          if ('plain' === this.editor.mode) {
            this.editor.setMode('wysiwyg');
          }
        } else if ('wysiwyg' === this.editor.mode) {
          this.editor.setMode('plain');
        }
      } catch (e) {} // eslint-disable-line no-empty


      if (resize) {
        this.resize();
      }
    }
  };

  _proto.setHtmlOrPlain = function setHtmlOrPlain(text, focus) {
    if (':HTML:' === text.substr(0, 6)) {
      this.setHtml(text.substr(6), focus);
    } else {
      this.setPlain(text, focus);
    }
  };

  _proto.setHtml = function setHtml(html, focus) {
    if (this.editor && this.__inited) {
      this.clearCachedSignature();
      this.modeToggle(true);
      html = html.replace(/<p[^>]*><\/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_7__["htmlEditorDefaultConfig"],
            language = Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('Language'),
            allowSource = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["appSettingsGet"]('allowHtmlEditorSourceButton'),
            biti = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["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_4___default.a.CKEDITOR.ENTER_BR;
        config.shiftEnterMode = window__WEBPACK_IMPORTED_MODULE_4___default.a.CKEDITOR.ENTER_P;
        config.language = Common_Globals__WEBPACK_IMPORTED_MODULE_7__["htmlEditorLangsMap"][(language || 'en').toLowerCase()] || 'en';

        if (window__WEBPACK_IMPORTED_MODULE_4___default.a.CKEDITOR.env) {
          window__WEBPACK_IMPORTED_MODULE_4___default.a.CKEDITOR.env.isCompatible = true;
        }

        _this2.editor = window__WEBPACK_IMPORTED_MODULE_4___default.a.CKEDITOR.appendTo(_this2.element, config);

        _this2.editor.on('key', function (event) {
          if (event && event.data && Common_Enums__WEBPACK_IMPORTED_MODULE_8__["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_4___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_4___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_4___default.a.FileReader();

                reader.onloadend = function () {
                  if (reader.result) {
                    _this2.replaceHtml(imageId, "<img src=\"" + reader.result + "\" />");
                  }
                };

                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_4___default.a.CKEDITOR) {
        initFunc();
      } else {
        window__WEBPACK_IMPORTED_MODULE_4___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;
}();



/***/ }),
/* 227 */
/*!*******************************************************************************!*\
  !*** ./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 */ 344);

/***/ }),
/* 228 */
/*!*********************************!*\
  !*** ./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'
};


/***/ }),
/* 229 */
/*!*****************************************!*\
  !*** ./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 */ 100); } 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 lifted from date.js (MIT license): https://github.com/datejs/Datejs
        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 text (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,

        // minimum number of days in the week that gets week number one
        // default ISO 8601, week 01 is the week with the first Thursday (4)
        firstWeekOfYearMinDays: 4,

        // 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 '<td class="is-empty"></td>';
            }
        }
        if (opts.isDisabled) {
            arr.push('is-disabled');
        }
        if (opts.isToday) {
            arr.push('is-today');
        }
        if (opts.isSelected) {
            arr.push('is-selected');
            ariaSelected = 'true';
        }
        if (opts.hasEvent) {
            arr.push('has-event');
        }
        if (opts.isInRange) {
            arr.push('is-inrange');
        }
        if (opts.isStartRange) {
            arr.push('is-startrange');
        }
        if (opts.isEndRange) {
            arr.push('is-endrange');
        }
        return '<td data-day="' + opts.day + '" class="' + arr.join(' ') + '" aria-selected="' + ariaSelected + '">' +
                 '<button class="pika-button pika-day" type="button" ' +
                    'data-pika-year="' + opts.year + '" data-pika-month="' + opts.month + '" data-pika-day="' + opts.day + '">' +
                        opts.day +
                 '</button>' +
               '</td>';
    },

    isoWeek = function(date, firstWeekOfYearMinDays) {
        // Ensure we're at the start of the day.
        date.setHours(0, 0, 0, 0);

        // Thursday in current week decides the year because January 4th
        // is always in the first week according to ISO8601.
        var yearDay        = date.getDate(),
            weekDay        = date.getDay(),
            dayInFirstWeek = firstWeekOfYearMinDays,
            dayShift       = dayInFirstWeek - 1, // counting starts at 0
            daysPerWeek    = 7,
            prevWeekDay    = function(day) { return (day + daysPerWeek - 1) % daysPerWeek; };

        // Adjust to Thursday in week 1 and count number of weeks from date to week 1.
        date.setDate(yearDay + dayShift - prevWeekDay(weekDay));

        var jan4th      = new Date(date.getFullYear(), 0, dayInFirstWeek),
            msPerDay    = 24 * 60 * 60 * 1000,
            daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay,
            weekNum     = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);

        return weekNum;
    },

    renderWeek = function (d, m, y, firstWeekOfYearMinDays) {
        var date = new Date(y, m, d),
            week = hasMoment ? moment(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);

        return '<td class="pika-week">' + week + '</td>';
    },

    renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)
    {
        return '<tr class="pika-row' + (pickWholeWeek ? ' pick-whole-week' : '') + (isRowSelected ? ' is-selected' : '') + '">' + (isRTL ? days.reverse() : days).join('') + '</tr>';
    },

    renderBody = function(rows)
    {
        return '<tbody>' + rows.join('') + '</tbody>';
    },

    renderHead = function(opts)
    {
        var i, arr = [];
        if (opts.showWeekNumber) {
            arr.push('<th></th>');
        }
        for (i = 0; i < 7; i++) {
            arr.push('<th scope="col"><abbr title="' + renderDayName(opts, i) + '">' + renderDayName(opts, i, true) + '</abbr></th>');
        }
        return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';
    },

    renderTitle = function(instance, c, year, month, refYear, randId)
    {
        var i, j, arr,
            opts = instance._o,
            isMinYear = year === opts.minYear,
            isMaxYear = year === opts.maxYear,
            html = '<div id="' + randId + '" class="pika-title" role="heading" aria-live="assertive">',
            monthHtml,
            yearHtml,
            prev = true,
            next = true;

        for (arr = [], i = 0; i < 12; i++) {
            arr.push('<option value="' + (year === refYear ? i - c : 12 + i - c) + '"' +
                (i === month ? ' selected="selected"': '') +
                ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? ' disabled="disabled"' : '') + '>' +
                opts.i18n.months[i] + '</option>');
        }

        monthHtml = '<div class="pika-label">' + opts.i18n.months[month] + '<select class="pika-select pika-select-month" tabindex="-1">' + arr.join('') + '</select></div>';

        if (isArray(opts.yearRange)) {
            i = opts.yearRange[0];
            j = opts.yearRange[1] + 1;
        } else {
            i = year - opts.yearRange;
            j = 1 + year + opts.yearRange;
        }

        for (arr = []; i < j && i <= opts.maxYear; i++) {
            if (i >= opts.minYear) {
                arr.push('<option value="' + i + '"' + (i === year ? ' selected="selected"': '') + '>' + (i) + '</option>');
            }
        }
        yearHtml = '<div class="pika-label">' + year + opts.yearSuffix + '<select class="pika-select pika-select-year" tabindex="-1">' + arr.join('') + '</select></div>';

        if (opts.showMonthAfterYear) {
            html += yearHtml + monthHtml;
        } else {
            html += monthHtml + yearHtml;
        }

        if (isMinYear && (month === 0 || opts.minMonth >= month)) {
            prev = false;
        }

        if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {
            next = false;
        }

        if (c === 0) {
            html += '<button class="pika-prev' + (prev ? '' : ' is-disabled') + '" type="button">' + opts.i18n.previousMonth + '</button>';
        }
        if (c === (instance._o.numberOfMonths - 1) ) {
            html += '<button class="pika-next' + (next ? '' : ' is-disabled') + '" type="button">' + opts.i18n.nextMonth + '</button>';
        }

        return html += '</div>';
    },

    renderTable = function(opts, data, randId)
    {
        return '<table cellpadding="0" cellspacing="0" class="pika-table" role="grid" aria-labelledby="' + randId + '">' + renderHead(opts) + renderBody(data) + '</table>';
    },


    /**
     * Pikaday constructor
     */
    Pikaday = function(options)
    {
        var self = this,
            opts = self.config(options);

        self._onMouseDown = function(e)
        {
            if (!self._v) {
                return;
            }
            e = e || window.event;
            var target = e.target || e.srcElement;
            if (!target) {
                return;
            }

            if (!hasClass(target, 'is-disabled')) {
                if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {
                    self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));
                    if (opts.bound) {
                        sto(function() {
                            self.hide();
                            if (opts.blurFieldOnSelect && opts.field) {
                                opts.field.blur();
                            }
                        }, 100);
                    }
                }
                else if (hasClass(target, 'pika-prev')) {
                    self.prevMonth();
                }
                else if (hasClass(target, 'pika-next')) {
                    self.nextMonth();
                }
            }
            if (!hasClass(target, 'pika-select')) {
                // if this is touch event prevent mouse events emulation
                if (e.preventDefault) {
                    e.preventDefault();
                } else {
                    e.returnValue = false;
                    return false;
                }
            } else {
                self._c = true;
            }
        };

        self._onChange = function(e)
        {
            e = e || window.event;
            var target = e.target || e.srcElement;
            if (!target) {
                return;
            }
            if (hasClass(target, 'pika-select-month')) {
                self.gotoMonth(target.value);
            }
            else if (hasClass(target, 'pika-select-year')) {
                self.gotoYear(target.value);
            }
        };

        self._onKeyChange = function(e)
        {
            e = e || window.event;

            if (self.isVisible()) {

                switch(e.keyCode){
                    case 13:
                    case 27:
                        if (opts.field) {
                            opts.field.blur();
                        }
                        break;
                    case 37:
                        self.adjustDate('subtract', 1);
                        break;
                    case 38:
                        self.adjustDate('subtract', 7);
                        break;
                    case 39:
                        self.adjustDate('add', 1);
                        break;
                    case 40:
                        self.adjustDate('add', 7);
                        break;
                    case 8:
                    case 46:
                        self.setDate(null);
                        break;
                }
            }
        };

        self._parseFieldValue = function()
        {
            if (opts.parse) {
                return opts.parse(opts.field.value, opts.format);
            } else if (hasMoment) {
                var date = moment(opts.field.value, opts.format, opts.formatStrict);
                return (date && date.isValid()) ? date.toDate() : null;
            } else {
                return new Date(Date.parse(opts.field.value));
            }
        };

        self._onInputChange = function(e)
        {
            var date;

            if (e.firedBy === self) {
                return;
            }
            date = self._parseFieldValue();
            if (isDate(date)) {
              self.setDate(date);
            }
            if (!self._v) {
                self.show();
            }
        };

        self._onInputFocus = function()
        {
            self.show();
        };

        self._onInputClick = function()
        {
            self.show();
        };

        self._onInputBlur = function()
        {
            // IE allows pika div to gain focus; catch blur the input field
            var pEl = document.activeElement;
            do {
                if (hasClass(pEl, 'pika-single')) {
                    return;
                }
            }
            while ((pEl = pEl.parentNode));

            if (!self._c) {
                self._b = sto(function() {
                    self.hide();
                }, 50);
            }
            self._c = false;
        };

        self._onClick = function(e)
        {
            e = e || window.event;
            var target = e.target || e.srcElement,
                pEl = target;
            if (!target) {
                return;
            }
            if (!hasEventListeners && hasClass(target, 'pika-select')) {
                if (!target.onchange) {
                    target.setAttribute('onchange', 'return;');
                    addEvent(target, 'change', self._onChange);
                }
            }
            do {
                if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {
                    return;
                }
            }
            while ((pEl = pEl.parentNode));
            if (self._v && target !== opts.trigger && pEl !== opts.trigger) {
                self.hide();
            }
        };

        self.el = document.createElement('div');
        self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');

        addEvent(self.el, 'mousedown', self._onMouseDown, true);
        addEvent(self.el, 'touchend', self._onMouseDown, true);
        addEvent(self.el, 'change', self._onChange);

        if (opts.keyboardInput) {
            addEvent(document, 'keydown', self._onKeyChange);
        }

        if (opts.field) {
            if (opts.container) {
                opts.container.appendChild(self.el);
            } else if (opts.bound) {
                document.body.appendChild(self.el);
            } else {
                opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);
            }
            addEvent(opts.field, 'change', self._onInputChange);

            if (!opts.defaultDate) {
                opts.defaultDate = self._parseFieldValue();
                opts.setDefaultDate = true;
            }
        }

        var defDate = opts.defaultDate;

        if (isDate(defDate)) {
            if (opts.setDefaultDate) {
                self.setDate(defDate, true);
            } else {
                self.gotoDate(defDate);
            }
        } else {
            self.gotoDate(new Date());
        }

        if (opts.bound) {
            this.hide();
            self.el.className += ' is-bound';
            addEvent(opts.trigger, 'click', self._onInputClick);
            addEvent(opts.trigger, 'focus', self._onInputFocus);
            addEvent(opts.trigger, 'blur', self._onInputBlur);
        } else {
            this.show();
        }
    };


    /**
     * public Pikaday API
     */
    Pikaday.prototype = {


        /**
         * configure functionality
         */
        config: function(options)
        {
            if (!this._o) {
                this._o = extend({}, defaults, true);
            }

            var opts = extend(this._o, options, true);

            opts.isRTL = !!opts.isRTL;

            opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;

            opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;

            opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);

            opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;

            opts.disableWeekends = !!opts.disableWeekends;

            opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;

            var nom = parseInt(opts.numberOfMonths, 10) || 1;
            opts.numberOfMonths = nom > 4 ? 4 : nom;

            if (!isDate(opts.minDate)) {
                opts.minDate = false;
            }
            if (!isDate(opts.maxDate)) {
                opts.maxDate = false;
            }
            if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {
                opts.maxDate = opts.minDate = false;
            }
            if (opts.minDate) {
                this.setMinDate(opts.minDate);
            }
            if (opts.maxDate) {
                this.setMaxDate(opts.maxDate);
            }

            if (isArray(opts.yearRange)) {
                var fallback = new Date().getFullYear() - 10;
                opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;
                opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;
            } else {
                opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;
                if (opts.yearRange > 100) {
                    opts.yearRange = 100;
                }
            }

            return opts;
        },

        /**
         * return a formatted string of the current selection (using Moment.js if available)
         */
        toString: function(format)
        {
            format = format || this._o.format;
            if (!isDate(this._d)) {
                return '';
            }
            if (this._o.toString) {
              return this._o.toString(this._d, format);
            }
            if (hasMoment) {
              return moment(this._d).format(format);
            }
            return this._d.toDateString();
        },

        /**
         * return a Moment.js object of the current selection (if available)
         */
        getMoment: function()
        {
            return hasMoment ? moment(this._d) : null;
        },

        /**
         * set the current selection from a Moment.js object (if available)
         */
        setMoment: function(date, preventOnSelect)
        {
            if (hasMoment && moment.isMoment(date)) {
                this.setDate(date.toDate(), preventOnSelect);
            }
        },

        /**
         * return a Date object of the current selection
         */
        getDate: function()
        {
            return isDate(this._d) ? new Date(this._d.getTime()) : null;
        },

        /**
         * set the current selection
         */
        setDate: function(date, preventOnSelect)
        {
            if (!date) {
                this._d = null;

                if (this._o.field) {
                    this._o.field.value = '';
                    fireEvent(this._o.field, 'change', { firedBy: this });
                }

                return this.draw();
            }
            if (typeof date === 'string') {
                date = new Date(Date.parse(date));
            }
            if (!isDate(date)) {
                return;
            }

            var min = this._o.minDate,
                max = this._o.maxDate;

            if (isDate(min) && date < min) {
                date = min;
            } else if (isDate(max) && date > max) {
                date = max;
            }

            this._d = new Date(date.getTime());
            setToStartOfDay(this._d);
            this.gotoDate(this._d);

            if (this._o.field) {
                this._o.field.value = this.toString();
                fireEvent(this._o.field, 'change', { firedBy: this });
            }
            if (!preventOnSelect && typeof this._o.onSelect === 'function') {
                this._o.onSelect.call(this, this.getDate());
            }
        },

        /**
         * clear and reset the date
         */
        clear: function()
        {
            this.setDate(null);
        },

        /**
         * change view to a specific date
         */
        gotoDate: function(date)
        {
            var newCalendar = true;

            if (!isDate(date)) {
                return;
            }

            if (this.calendars) {
                var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),
                    lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),
                    visibleDate = date.getTime();
                // get the end of the month
                lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);
                lastVisibleDate.setDate(lastVisibleDate.getDate()-1);
                newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);
            }

            if (newCalendar) {
                this.calendars = [{
                    month: date.getMonth(),
                    year: date.getFullYear()
                }];
                if (this._o.mainCalendar === 'right') {
                    this.calendars[0].month += 1 - this._o.numberOfMonths;
                }
            }

            this.adjustCalendars();
        },

        adjustDate: function(sign, days) {

            var day = this.getDate() || new Date();
            var difference = parseInt(days)*24*60*60*1000;

            var newDay;

            if (sign === 'add') {
                newDay = new Date(day.valueOf() + difference);
            } else if (sign === 'subtract') {
                newDay = new Date(day.valueOf() - difference);
            }

            this.setDate(newDay);
        },

        adjustCalendars: function() {
            this.calendars[0] = adjustCalendar(this.calendars[0]);
            for (var c = 1; c < this._o.numberOfMonths; c++) {
                this.calendars[c] = adjustCalendar({
                    month: this.calendars[0].month + c,
                    year: this.calendars[0].year
                });
            }
            this.draw();
        },

        gotoToday: function()
        {
            this.gotoDate(new Date());
        },

        /**
         * change view to a specific month (zero-index, e.g. 0: January)
         */
        gotoMonth: function(month)
        {
            if (!isNaN(month)) {
                this.calendars[0].month = parseInt(month, 10);
                this.adjustCalendars();
            }
        },

        nextMonth: function()
        {
            this.calendars[0].month++;
            this.adjustCalendars();
        },

        prevMonth: function()
        {
            this.calendars[0].month--;
            this.adjustCalendars();
        },

        /**
         * change view to a specific full year (e.g. "2012")
         */
        gotoYear: function(year)
        {
            if (!isNaN(year)) {
                this.calendars[0].year = parseInt(year, 10);
                this.adjustCalendars();
            }
        },

        /**
         * change the minDate
         */
        setMinDate: function(value)
        {
            if(value instanceof Date) {
                setToStartOfDay(value);
                this._o.minDate = value;
                this._o.minYear  = value.getFullYear();
                this._o.minMonth = value.getMonth();
            } else {
                this._o.minDate = defaults.minDate;
                this._o.minYear  = defaults.minYear;
                this._o.minMonth = defaults.minMonth;
                this._o.startRange = defaults.startRange;
            }

            this.draw();
        },

        /**
         * change the maxDate
         */
        setMaxDate: function(value)
        {
            if(value instanceof Date) {
                setToStartOfDay(value);
                this._o.maxDate = value;
                this._o.maxYear = value.getFullYear();
                this._o.maxMonth = value.getMonth();
            } else {
                this._o.maxDate = defaults.maxDate;
                this._o.maxYear = defaults.maxYear;
                this._o.maxMonth = defaults.maxMonth;
                this._o.endRange = defaults.endRange;
            }

            this.draw();
        },

        setStartRange: function(value)
        {
            this._o.startRange = value;
        },

        setEndRange: function(value)
        {
            this._o.endRange = value;
        },

        /**
         * refresh the HTML
         */
        draw: function(force)
        {
            if (!this._v && !force) {
                return;
            }
            var opts = this._o,
                minYear = opts.minYear,
                maxYear = opts.maxYear,
                minMonth = opts.minMonth,
                maxMonth = opts.maxMonth,
                html = '',
                randId;

            if (this._y <= minYear) {
                this._y = minYear;
                if (!isNaN(minMonth) && this._m < minMonth) {
                    this._m = minMonth;
                }
            }
            if (this._y >= maxYear) {
                this._y = maxYear;
                if (!isNaN(maxMonth) && this._m > maxMonth) {
                    this._m = maxMonth;
                }
            }

            for (var c = 0; c < opts.numberOfMonths; c++) {
                randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);
                html += '<div class="pika-lendar">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '</div>';
            }

            this.el.innerHTML = html;

            if (opts.bound) {
                if(opts.field.type !== 'hidden') {
                    sto(function() {
                        opts.trigger.focus();
                    }, 1);
                }
            }

            if (typeof this._o.onDraw === 'function') {
                this._o.onDraw(this);
            }

            if (opts.bound) {
                // let the screen reader user know to use arrow keys
                opts.field.setAttribute('aria-label', opts.ariaLabel);
            }
        },

        adjustPosition: function()
        {
            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;

            if (this._o.container) return;

            this.el.style.position = 'absolute';

            field = this._o.trigger;
            pEl = field;
            width = this.el.offsetWidth;
            height = this.el.offsetHeight;
            viewportWidth = window.innerWidth || document.documentElement.clientWidth;
            viewportHeight = window.innerHeight || document.documentElement.clientHeight;
            scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
            leftAligned = true;
            bottomAligned = true;

            if (typeof field.getBoundingClientRect === 'function') {
                clientRect = field.getBoundingClientRect();
                left = clientRect.left + window.pageXOffset;
                top = clientRect.bottom + window.pageYOffset;
            } else {
                left = pEl.offsetLeft;
                top  = pEl.offsetTop + pEl.offsetHeight;
                while((pEl = pEl.offsetParent)) {
                    left += pEl.offsetLeft;
                    top  += pEl.offsetTop;
                }
            }

            // default position is bottom & left
            if ((this._o.reposition && left + width > viewportWidth) ||
                (
                    this._o.position.indexOf('right') > -1 &&
                    left - width + field.offsetWidth > 0
                )
            ) {
                left = left - width + field.offsetWidth;
                leftAligned = false;
            }
            if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||
                (
                    this._o.position.indexOf('top') > -1 &&
                    top - height - field.offsetHeight > 0
                )
            ) {
                top = top - height - field.offsetHeight;
                bottomAligned = false;
            }

            this.el.style.left = left + 'px';
            this.el.style.top = top + 'px';

            addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');
            addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');
            removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');
            removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');
        },

        /**
         * render HTML for a particular month
         */
        render: function(year, month, randId)
        {
            var opts   = this._o,
                now    = new Date(),
                days   = getDaysInMonth(year, month),
                before = new Date(year, month, 1).getDay(),
                data   = [],
                row    = [];
            setToStartOfDay(now);
            if (opts.firstDay > 0) {
                before -= opts.firstDay;
                if (before < 0) {
                    before += 7;
                }
            }
            var previousMonth = month === 0 ? 11 : month - 1,
                nextMonth = month === 11 ? 0 : month + 1,
                yearOfPreviousMonth = month === 0 ? year - 1 : year,
                yearOfNextMonth = month === 11 ? year + 1 : year,
                daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);
            var cells = days + before,
                after = cells;
            while(after > 7) {
                after -= 7;
            }
            cells += 7 - after;
            var isWeekSelected = false;
            for (var i = 0, r = 0; i < cells; i++)
            {
                var day = new Date(year, month, 1 + (i - before)),
                    isSelected = isDate(this._d) ? compareDates(day, this._d) : false,
                    isToday = compareDates(day, now),
                    hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,
                    isEmpty = i < before || i >= (days + before),
                    dayNumber = 1 + (i - before),
                    monthNumber = month,
                    yearNumber = year,
                    isStartRange = opts.startRange && compareDates(opts.startRange, day),
                    isEndRange = opts.endRange && compareDates(opts.endRange, day),
                    isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,
                    isDisabled = (opts.minDate && day < opts.minDate) ||
                                 (opts.maxDate && day > opts.maxDate) ||
                                 (opts.disableWeekends && isWeekend(day)) ||
                                 (opts.disableDayFn && opts.disableDayFn(day));

                if (isEmpty) {
                    if (i < before) {
                        dayNumber = daysInPreviousMonth + dayNumber;
                        monthNumber = previousMonth;
                        yearNumber = yearOfPreviousMonth;
                    } else {
                        dayNumber = dayNumber - days;
                        monthNumber = nextMonth;
                        yearNumber = yearOfNextMonth;
                    }
                }

                var dayConfig = {
                        day: dayNumber,
                        month: monthNumber,
                        year: yearNumber,
                        hasEvent: hasEvent,
                        isSelected: isSelected,
                        isToday: isToday,
                        isDisabled: isDisabled,
                        isEmpty: isEmpty,
                        isStartRange: isStartRange,
                        isEndRange: isEndRange,
                        isInRange: isInRange,
                        showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,
                        enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths
                    };

                if (opts.pickWholeWeek && isSelected) {
                    isWeekSelected = true;
                }

                row.push(renderDay(dayConfig));

                if (++r === 7) {
                    if (opts.showWeekNumber) {
                        row.unshift(renderWeek(i - before, month, year, opts.firstWeekOfYearMinDays));
                    }
                    data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));
                    row = [];
                    r = 0;
                    isWeekSelected = false;
                }
            }
            return renderTable(opts, data, randId);
        },

        isVisible: function()
        {
            return this._v;
        },

        show: function()
        {
            if (!this.isVisible()) {
                this._v = true;
                this.draw();
                removeClass(this.el, 'is-hidden');
                if (this._o.bound) {
                    addEvent(document, 'click', this._onClick);
                    this.adjustPosition();
                }
                if (typeof this._o.onOpen === 'function') {
                    this._o.onOpen.call(this);
                }
            }
        },

        hide: function()
        {
            var v = this._v;
            if (v !== false) {
                if (this._o.bound) {
                    removeEvent(document, 'click', this._onClick);
                }

                if (!this._o.container) {
                    this.el.style.position = 'static'; // reset
                    this.el.style.left = 'auto';
                    this.el.style.top = 'auto';
                }
                addClass(this.el, 'is-hidden');
                this._v = false;
                if (v !== undefined && typeof this._o.onClose === 'function') {
                    this._o.onClose.call(this);
                }
            }
        },

        /**
         * GAME OVER
         */
        destroy: function()
        {
            var opts = this._o;

            this.hide();
            removeEvent(this.el, 'mousedown', this._onMouseDown, true);
            removeEvent(this.el, 'touchend', this._onMouseDown, true);
            removeEvent(this.el, 'change', this._onChange);
            if (opts.keyboardInput) {
                removeEvent(document, 'keydown', this._onKeyChange);
            }
            if (opts.field) {
                removeEvent(opts.field, 'change', this._onInputChange);
                if (opts.bound) {
                    removeEvent(opts.trigger, 'click', this._onInputClick);
                    removeEvent(opts.trigger, 'focus', this._onInputFocus);
                    removeEvent(opts.trigger, 'blur', this._onInputBlur);
                }
            }
            if (this.el.parentNode) {
                this.el.parentNode.removeChild(this.el);
            }
        }

    };

    return Pikaday;
}));


/***/ }),
/* 230 */
/*!************************************!*\
  !*** external "window.Autolinker" ***!
  \************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.Autolinker;

/***/ }),
/* 231 */
/*!****************************!*\
  !*** ./dev/Common/Mime.js ***!
  \****************************/
/*! exports provided: Mime, default */
/*! exports used: Mime */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Mime; });
/* unused harmony export default */
/* eslint key-spacing: 0 */

/* eslint quote-props: 0 */
var Mime = {
  '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',
  // scripts
  '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',
  // images
  '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',
  // archives
  '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',
  // fonts
  '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',
  // audio
  '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',
  // video
  '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',
  // adobe
  'pdf': 'application/pdf',
  'psd': 'image/vnd.adobe.photoshop',
  'ai': 'application/postscript',
  'eps': 'application/postscript',
  'ps': 'application/postscript',
  // ms office
  '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',
  // open office
  'odt': 'application/vnd.oasis.opendocument.text',
  'ods': 'application/vnd.oasis.opendocument.spreadsheet'
};


/***/ }),
/* 232 */,
/* 233 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/object-keys.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 155);
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 112);

// `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
// eslint-disable-next-line es/no-object-keys -- safe
module.exports = Object.keys || function keys(O) {
  return internalObjectKeys(O, enumBugKeys);
};


/***/ }),
/* 234 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js/internals/add-to-unscopables.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);
var create = __webpack_require__(/*! ../internals/object-create */ 167);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 66);

var UNSCOPABLES = wellKnownSymbol('unscopables');
var ArrayPrototype = Array.prototype;

// Array.prototype[@@unscopables]
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
if (ArrayPrototype[UNSCOPABLES] == undefined) {
  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {
    configurable: true,
    value: create(null)
  });
}

// add a key to Array.prototype[@@unscopables]
module.exports = function (key) {
  ArrayPrototype[UNSCOPABLES][key] = true;
};


/***/ }),
/* 235 */
/*!************************************************!*\
  !*** ./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 */ 78);

module.exports = getBuiltIn('document', 'documentElement');


/***/ }),
/* 236 */
/*!***************************************************************!*\
  !*** ./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 */ 42);
var aFunction = __webpack_require__(/*! ../internals/a-function */ 131);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var SPECIES = wellKnownSymbol('species');

// `SpeciesConstructor` abstract operation
// https://tc39.es/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);
};


/***/ }),
/* 237 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js/internals/define-iterator.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 65);
var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 246);
var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 168);
var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 215);
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 169);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var redefine = __webpack_require__(/*! ../internals/redefine */ 69);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 98);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 113);
var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 184);

var IteratorPrototype = IteratorsCore.IteratorPrototype;
var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
var ITERATOR = wellKnownSymbol('iterator');
var KEYS = 'keys';
var VALUES = 'values';
var ENTRIES = 'entries';

var returnThis = function () { return this; };

module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
  createIteratorConstructor(IteratorConstructor, NAME, next);

  var getIterationMethod = function (KIND) {
    if (KIND === DEFAULT && defaultIterator) return defaultIterator;
    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
    switch (KIND) {
      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
    } return function () { return new IteratorConstructor(this); };
  };

  var TO_STRING_TAG = NAME + ' Iterator';
  var INCORRECT_VALUES_NAME = false;
  var IterablePrototype = Iterable.prototype;
  var nativeIterator = IterablePrototype[ITERATOR]
    || IterablePrototype['@@iterator']
    || DEFAULT && IterablePrototype[DEFAULT];
  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
  var CurrentIteratorPrototype, methods, KEY;

  // fix native
  if (anyNativeIterator) {
    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
        if (setPrototypeOf) {
          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {
          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);
        }
      }
      // Set @@toStringTag to native iterators
      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
    }
  }

  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
    INCORRECT_VALUES_NAME = true;
    defaultIterator = function values() { return nativeIterator.call(this); };
  }

  // define iterator
  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);
  }
  Iterators[NAME] = defaultIterator;

  // export additional methods
  if (DEFAULT) {
    methods = {
      values: getIterationMethod(VALUES),
      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
      entries: getIterationMethod(ENTRIES)
    };
    if (FORCED) for (KEY in methods) {
      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
        redefine(IterablePrototype, KEY, methods[KEY]);
      }
    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
  }

  return methods;
};


/***/ }),
/* 238 */
/*!*******************************!*\
  !*** ./dev/View/Popup/Ask.js ***!
  \*******************************/
/*! exports provided: AskPopupView, 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__, "AskPopupView", function() { return AskPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AskPopupView; });
/* 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 key__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;








var AskPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["popup"])({
  name: 'View/Popup/Ask',
  templateID: 'PopupsAsk'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AskPopupView, _AbstractViewNext);

  function AskPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.askDesc = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.yesButton = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.noButton = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.yesFocus = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.noFocus = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.fYesAction = null;
    _this.fNoAction = null;
    _this.bFocusYesOnShow = true;
    _this.bDisabeCloseOnEsc = true;
    _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].PopupAsk;
    return _this;
  }

  var _proto = AskPopupView.prototype;

  _proto.clearPopup = function clearPopup() {
    this.askDesc('');
    this.yesButton(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["i18n"])('POPUPS_ASK/BUTTON_YES'));
    this.noButton(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["i18n"])('POPUPS_ASK/BUTTON_NO'));
    this.yesFocus(false);
    this.noFocus(false);
    this.fYesAction = null;
    this.fNoAction = null;
  };

  _proto.yesClick = function yesClick() {
    this.cancelCommand();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isFunc"])(this.fYesAction)) {
      this.fYesAction.call(null);
    }
  };

  _proto.noClick = function noClick() {
    this.cancelCommand();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isFunc"])(this.fNoAction)) {
      this.fNoAction.call(null);
    }
  }
  /**
   * @param {string} sAskDesc
   * @param {Function=} fYesFunc
   * @param {Function=} fNoFunc
   * @param {string=} sYesButton
   * @param {string=} sNoButton
   * @param {boolean=} bFocusYesOnShow = true
   * @returns {void}
   */
  ;

  _proto.onShow = function onShow(askDesc, fYesFunc, fNoFunc, yesButton, noButton, isFocusYesOnShow) {
    if (fYesFunc === void 0) {
      fYesFunc = null;
    }

    if (fNoFunc === void 0) {
      fNoFunc = null;
    }

    if (yesButton === void 0) {
      yesButton = '';
    }

    if (noButton === void 0) {
      noButton = '';
    }

    if (isFocusYesOnShow === void 0) {
      isFocusYesOnShow = true;
    }

    this.clearPopup();
    this.fYesAction = fYesFunc || null;
    this.fNoAction = fNoFunc || null;
    this.askDesc(askDesc || '');

    if (yesButton) {
      this.yesButton(yesButton);
    }

    if (noButton) {
      this.noButton(noButton);
    }

    this.bFocusYesOnShow = !!isFocusYesOnShow;
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    if (this.bFocusYesOnShow) {
      this.yesFocus(true);
    }
  };

  _proto.onBuild = function onBuild() {
    var _this2 = this;

    key__WEBPACK_IMPORTED_MODULE_2___default()('tab, shift+tab, right, left', Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].PopupAsk, function () {
      if (_this2.yesFocus()) {
        _this2.noFocus(true);
      } else {
        _this2.yesFocus(true);
      }

      return false;
    });
    key__WEBPACK_IMPORTED_MODULE_2___default()('esc', Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].PopupAsk, function () {
      _this2.noClick();

      return false;
    });
  };

  return AskPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_7__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 239 */,
/* 240 */,
/* 241 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js/internals/object-define-properties.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 55);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 66);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 233);

// `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
// eslint-disable-next-line es/no-object-defineproperties -- safe
module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = objectKeys(Properties);
  var length = keys.length;
  var index = 0;
  var key;
  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);
  return O;
};


/***/ }),
/* 242 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/is-regexp.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 49);
var classof = __webpack_require__(/*! ../internals/classof-raw */ 74);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var MATCH = wellKnownSymbol('match');

// `IsRegExp` abstract operation
// https://tc39.es/ecma262/#sec-isregexp
module.exports = function (it) {
  var isRegExp;
  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');
};


/***/ }),
/* 243 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 37);

module.exports = !fails(function () {
  function F() { /* empty */ }
  F.prototype.constructor = null;
  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing
  return Object.getPrototypeOf(new F()) !== F.prototype;
});


/***/ }),
/* 244 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js/internals/a-possible-prototype.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 49);

module.exports = function (it) {
  if (!isObject(it) && it !== null) {
    throw TypeError("Can't set " + String(it) + ' as a prototype');
  } return it;
};


/***/ }),
/* 245 */,
/* 246 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js/internals/create-iterator-constructor.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 184).IteratorPrototype;
var create = __webpack_require__(/*! ../internals/object-create */ 167);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 95);
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 169);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 113);

var returnThis = function () { return this; };

module.exports = function (IteratorConstructor, NAME, next) {
  var TO_STRING_TAG = NAME + ' Iterator';
  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });
  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
  Iterators[TO_STRING_TAG] = returnThis;
  return IteratorConstructor;
};


/***/ }),
/* 247 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js/modules/web.dom-collections.iterator.js ***!
  \**********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 218);
var ArrayIteratorMethods = __webpack_require__(/*! ../modules/es.array.iterator */ 219);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var ITERATOR = wellKnownSymbol('iterator');
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var ArrayValues = ArrayIteratorMethods.values;

for (var COLLECTION_NAME in DOMIterables) {
  var Collection = global[COLLECTION_NAME];
  var CollectionPrototype = Collection && Collection.prototype;
  if (CollectionPrototype) {
    // some Chrome versions have non-configurable methods on DOMTokenList
    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {
      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);
    } catch (error) {
      CollectionPrototype[ITERATOR] = ArrayValues;
    }
    if (!CollectionPrototype[TO_STRING_TAG]) {
      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);
    }
    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {
      // some Chrome versions have non-configurable methods on DOMTokenList
      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {
        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);
      } catch (error) {
        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];
      }
    }
  }
}


/***/ }),
/* 248 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/set-timeout.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../modules/web.timers */ 185);
var path = __webpack_require__(/*! ../internals/path */ 51);

module.exports = path.setTimeout;


/***/ }),
/* 249 */
/*!******************************************************************************!*\
  !*** ./node_modules/core-js-pure/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.es/ecma262/#sec-object.prototype.propertyisenumerable
exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
  var descriptor = getOwnPropertyDescriptor(this, V);
  return !!descriptor && descriptor.enumerable;
} : nativePropertyIsEnumerable;


/***/ }),
/* 250 */,
/* 251 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/promise/index.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/promise */ 252);

module.exports = parent;


/***/ }),
/* 252 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/es/promise/index.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.aggregate-error */ 253);
__webpack_require__(/*! ../../modules/es.object.to-string */ 264);
__webpack_require__(/*! ../../modules/es.promise */ 265);
__webpack_require__(/*! ../../modules/es.promise.all-settled */ 275);
__webpack_require__(/*! ../../modules/es.promise.any */ 276);
__webpack_require__(/*! ../../modules/es.promise.finally */ 277);
__webpack_require__(/*! ../../modules/es.string.iterator */ 278);
__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 161);
var path = __webpack_require__(/*! ../../internals/path */ 51);

module.exports = path.Promise;


/***/ }),
/* 253 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.aggregate-error.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 139);
var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 159);
var create = __webpack_require__(/*! ../internals/object-create */ 160);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90);
var iterate = __webpack_require__(/*! ../internals/iterate */ 107);

var $AggregateError = function AggregateError(errors, message) {
  var that = this;
  if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message);
  if (setPrototypeOf) {
    // eslint-disable-next-line unicorn/error-message
    that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));
  }
  if (message !== undefined) createNonEnumerableProperty(that, 'message', String(message));
  var errorsArray = [];
  iterate(errors, errorsArray.push, { that: errorsArray });
  createNonEnumerableProperty(that, 'errors', errorsArray);
  return that;
};

$AggregateError.prototype = create(Error.prototype, {
  constructor: createPropertyDescriptor(5, $AggregateError),
  message: createPropertyDescriptor(5, ''),
  name: createPropertyDescriptor(5, 'AggregateError')
});

// `AggregateError` constructor
// https://tc39.es/ecma262/#sec-aggregate-error-constructor
$({ global: true }, {
  AggregateError: $AggregateError
});


/***/ }),
/* 254 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/set-global.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);

module.exports = function (key, value) {
  try {
    createNonEnumerableProperty(global, key, value);
  } catch (error) {
    global[key] = value;
  } return value;
};


/***/ }),
/* 255 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/correct-prototype-getter.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);

module.exports = !fails(function () {
  function F() { /* empty */ }
  F.prototype.constructor = null;
  return Object.getPrototypeOf(new F()) !== F.prototype;
});


/***/ }),
/* 256 */
/*!*********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/a-possible-prototype.js ***!
  \*********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 50);

module.exports = function (it) {
  if (!isObject(it) && it !== null) {
    throw TypeError("Can't set " + String(it) + ' as a prototype');
  } return it;
};


/***/ }),
/* 257 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-define-properties.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 81);
var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 220);

// `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = objectKeys(Properties);
  var length = keys.length;
  var index = 0;
  var key;
  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);
  return O;
};


/***/ }),
/* 258 */
/*!*********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-keys-internal.js ***!
  \*********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(/*! ../internals/has */ 54);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var indexOf = __webpack_require__(/*! ../internals/array-includes */ 259).indexOf;
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 143);

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;
};


/***/ }),
/* 259 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-includes.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);
var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 221);

// `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.es/ecma262/#sec-array.prototype.includes
  includes: createMethod(true),
  // `Array.prototype.indexOf` method
  // https://tc39.es/ecma262/#sec-array.prototype.indexof
  indexOf: createMethod(false)
};


/***/ }),
/* 260 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js-pure/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 */ 38);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);

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);
};


/***/ }),
/* 261 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/use-symbol-as-uid.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 192);

module.exports = NATIVE_SYMBOL
  // eslint-disable-next-line no-undef
  && !Symbol.sham
  // eslint-disable-next-line no-undef
  && typeof Symbol.iterator == 'symbol';


/***/ }),
/* 262 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/get-iterator-method.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(/*! ../internals/classof */ 92);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var ITERATOR = wellKnownSymbol('iterator');

module.exports = function (it) {
  if (it != undefined) return it[ITERATOR]
    || it['@@iterator']
    || Iterators[classof(it)];
};


/***/ }),
/* 263 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/iterator-close.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);

module.exports = function (iterator) {
  var returnMethod = iterator['return'];
  if (returnMethod !== undefined) {
    return anObject(returnMethod.call(iterator)).value;
  }
};


/***/ }),
/* 264 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.to-string.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// empty


/***/ }),
/* 265 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.promise.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 86);
var global = __webpack_require__(/*! ../internals/global */ 31);
var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 75);
var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 193);
var redefine = __webpack_require__(/*! ../internals/redefine */ 108);
var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 266);
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 145);
var setSpecies = __webpack_require__(/*! ../internals/set-species */ 268);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);
var anInstance = __webpack_require__(/*! ../internals/an-instance */ 269);
var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 194);
var iterate = __webpack_require__(/*! ../internals/iterate */ 107);
var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 270);
var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 195);
var task = __webpack_require__(/*! ../internals/task */ 196).set;
var microtask = __webpack_require__(/*! ../internals/microtask */ 271);
var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 198);
var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 273);
var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 109);
var perform = __webpack_require__(/*! ../internals/perform */ 146);
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 147);
var isForced = __webpack_require__(/*! ../internals/is-forced */ 187);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ 118);
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 148);

var SPECIES = wellKnownSymbol('species');
var PROMISE = 'Promise';
var getInternalState = InternalStateModule.get;
var setInternalState = InternalStateModule.set;
var getInternalPromiseState = InternalStateModule.getterFor(PROMISE);
var PromiseConstructor = NativePromise;
var TypeError = global.TypeError;
var document = global.document;
var process = global.process;
var $fetch = getBuiltIn('fetch');
var newPromiseCapability = newPromiseCapabilityModule.f;
var newGenericPromiseCapability = newPromiseCapability;
var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);
var NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';
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, nativeThen;

var FORCED = isForced(PROMISE, function () {
  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
    if (V8_VERSION === 66) return true;
    // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
    if (!IS_NODE && !NATIVE_REJECTION_EVENT) 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) {
  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 (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(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(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 (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);
  else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
};

var onUnhandled = function (state) {
  task.call(global, function () {
    var promise = state.facade;
    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 (state) {
  task.call(global, function () {
    var promise = state.facade;
    if (IS_NODE) {
      process.emit('rejectionHandled', promise);
    } else dispatchEvent(REJECTION_HANDLED, promise, state.value);
  });
};

var bind = function (fn, state, unwrap) {
  return function (value) {
    fn(state, value, unwrap);
  };
};

var internalReject = function (state, value, unwrap) {
  if (state.done) return;
  state.done = true;
  if (unwrap) state = unwrap;
  state.value = value;
  state.state = REJECTED;
  notify(state, true);
};

var internalResolve = function (state, value, unwrap) {
  if (state.done) return;
  state.done = true;
  if (unwrap) state = unwrap;
  try {
    if (state.facade === 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, wrapper, state),
            bind(internalReject, wrapper, state)
          );
        } catch (error) {
          internalReject(wrapper, error, state);
        }
      });
    } else {
      state.value = value;
      state.state = FULFILLED;
      notify(state, false);
    }
  } catch (error) {
    internalReject({ 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, state), bind(internalReject, state));
    } catch (error) {
      internalReject(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.es/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(state, false);
      return reaction.promise;
    },
    // `Promise.prototype.catch` method
    // https://tc39.es/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, state);
    this.reject = bind(internalReject, state);
  };
  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
    return C === PromiseConstructor || C === PromiseWrapper
      ? new OwnPromiseCapability(C)
      : newGenericPromiseCapability(C);
  };

  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 }, {
  Promise: PromiseConstructor
});

setToStringTag(PromiseConstructor, PROMISE, false, true);
setSpecies(PROMISE);

PromiseWrapper = getBuiltIn(PROMISE);

// statics
$({ target: PROMISE, stat: true, forced: FORCED }, {
  // `Promise.reject` method
  // https://tc39.es/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.es/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.es/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.es/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;
  }
});


/***/ }),
/* 266 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/redefine-all.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var redefine = __webpack_require__(/*! ../internals/redefine */ 108);

module.exports = function (target, src, options) {
  for (var key in src) {
    if (options && options.unsafe && target[key]) target[key] = src[key];
    else redefine(target, key, src[key], options);
  } return target;
};


/***/ }),
/* 267 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-to-string.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 144);
var classof = __webpack_require__(/*! ../internals/classof */ 92);

// `Object.prototype.toString` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.tostring
module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
  return '[object ' + classof(this) + ']';
};


/***/ }),
/* 268 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/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 */ 75);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 81);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);

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; }
    });
  }
};


/***/ }),
/* 269 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/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;
};


/***/ }),
/* 270 */
/*!*******************************************************************************!*\
  !*** ./node_modules/core-js-pure/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 */ 38);

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;
};


/***/ }),
/* 271 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/microtask.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 157).f;
var macrotask = __webpack_require__(/*! ../internals/task */ 196).set;
var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 197);
var IS_WEBOS_WEBKIT = __webpack_require__(/*! ../internals/engine-is-webos-webkit */ 272);
var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ 118);

var MutationObserver = global.MutationObserver || global.WebKitMutationObserver;
var document = global.document;
var process = global.process;
var Promise = global.Promise;
// 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, then;

// 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();
  };

  // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
  // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898
  if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {
    toggle = true;
    node = document.createTextNode('');
    new MutationObserver(flush).observe(node, { characterData: true });
    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);
    then = promise.then;
    notify = function () {
      then.call(promise, flush);
    };
  // Node.js without promises
  } else if (IS_NODE) {
    notify = function () {
      process.nextTick(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;
};


/***/ }),
/* 272 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/engine-is-webos-webkit.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 106);

module.exports = /web0s(?!.*chrome)/i.test(userAgent);


/***/ }),
/* 273 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/host-report-errors.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);

module.exports = function (a, b) {
  var console = global.console;
  if (console && console.error) {
    arguments.length === 1 ? console.error(a) : console.error(a, b);
  }
};


/***/ }),
/* 274 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/native-weak-map.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 194);

var WeakMap = global.WeakMap;

module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));


/***/ }),
/* 275 */
/*!*********************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.promise.all-settled.js ***!
  \*********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);
var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 109);
var perform = __webpack_require__(/*! ../internals/perform */ 146);
var iterate = __webpack_require__(/*! ../internals/iterate */ 107);

// `Promise.allSettled` method
// https://tc39.es/ecma262/#sec-promise.allsettled
$({ target: 'Promise', stat: true }, {
  allSettled: function allSettled(iterable) {
    var C = this;
    var capability = newPromiseCapabilityModule.f(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] = { status: 'fulfilled', value: value };
          --remaining || resolve(values);
        }, function (error) {
          if (alreadyCalled) return;
          alreadyCalled = true;
          values[index] = { status: 'rejected', reason: error };
          --remaining || resolve(values);
        });
      });
      --remaining || resolve(values);
    });
    if (result.error) reject(result.value);
    return capability.promise;
  }
});


/***/ }),
/* 276 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.promise.any.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);
var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 75);
var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 109);
var perform = __webpack_require__(/*! ../internals/perform */ 146);
var iterate = __webpack_require__(/*! ../internals/iterate */ 107);

var PROMISE_ANY_ERROR = 'No one promise resolved';

// `Promise.any` method
// https://tc39.es/ecma262/#sec-promise.any
$({ target: 'Promise', stat: true }, {
  any: function any(iterable) {
    var C = this;
    var capability = newPromiseCapabilityModule.f(C);
    var resolve = capability.resolve;
    var reject = capability.reject;
    var result = perform(function () {
      var promiseResolve = aFunction(C.resolve);
      var errors = [];
      var counter = 0;
      var remaining = 1;
      var alreadyResolved = false;
      iterate(iterable, function (promise) {
        var index = counter++;
        var alreadyRejected = false;
        errors.push(undefined);
        remaining++;
        promiseResolve.call(C, promise).then(function (value) {
          if (alreadyRejected || alreadyResolved) return;
          alreadyResolved = true;
          resolve(value);
        }, function (error) {
          if (alreadyRejected || alreadyResolved) return;
          alreadyRejected = true;
          errors[index] = error;
          --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));
        });
      });
      --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));
    });
    if (result.error) reject(result.value);
    return capability.promise;
  }
});


/***/ }),
/* 277 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.promise.finally.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 86);
var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 193);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 75);
var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 195);
var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 198);
var redefine = __webpack_require__(/*! ../internals/redefine */ 108);

// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829
var NON_GENERIC = !!NativePromise && fails(function () {
  NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });
});

// `Promise.prototype.finally` method
// https://tc39.es/ecma262/#sec-promise.prototype.finally
$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {
  'finally': function (onFinally) {
    var C = speciesConstructor(this, getBuiltIn('Promise'));
    var isFunction = typeof onFinally == 'function';
    return this.then(
      isFunction ? function (x) {
        return promiseResolve(C, onFinally()).then(function () { return x; });
      } : onFinally,
      isFunction ? function (e) {
        return promiseResolve(C, onFinally()).then(function () { throw e; });
      } : onFinally
    );
  }
});

// patch native Promise.prototype for native async functions
if (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {
  redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);
}


/***/ }),
/* 278 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.string.iterator.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 279).charAt;
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 147);
var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 199);

var STRING_ITERATOR = 'String Iterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);

// `String.prototype[@@iterator]` method
// https://tc39.es/ecma262/#sec-string.prototype-@@iterator
defineIterator(String, 'String', function (iterated) {
  setInternalState(this, {
    type: STRING_ITERATOR,
    string: String(iterated),
    index: 0
  });
// `%StringIteratorPrototype%.next` method
// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
}, function next() {
  var state = getInternalState(this);
  var string = state.string;
  var index = state.index;
  var point;
  if (index >= string.length) return { value: undefined, done: true };
  point = charAt(string, index);
  state.index += point.length;
  return { value: point, done: false };
});


/***/ }),
/* 279 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/string-multibyte.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(/*! ../internals/to-integer */ 142);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 115);

// `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.es/ecma262/#sec-string.prototype.codepointat
  codeAt: createMethod(false),
  // `String.prototype.at` method
  // https://github.com/mathiasbynens/String.prototype.at
  charAt: createMethod(true)
};


/***/ }),
/* 280 */
/*!****************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/create-iterator-constructor.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 200).IteratorPrototype;
var create = __webpack_require__(/*! ../internals/object-create */ 160);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90);
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 145);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);

var returnThis = function () { return this; };

module.exports = function (IteratorConstructor, NAME, next) {
  var TO_STRING_TAG = NAME + ' Iterator';
  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });
  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
  Iterators[TO_STRING_TAG] = returnThis;
  return IteratorConstructor;
};


/***/ }),
/* 281 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/dom-iterables.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// iterable DOM collections
// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
module.exports = {
  CSSRuleList: 0,
  CSSStyleDeclaration: 0,
  CSSValueList: 0,
  ClientRectList: 0,
  DOMRectList: 0,
  DOMStringList: 0,
  DOMTokenList: 1,
  DataTransferItemList: 0,
  FileList: 0,
  HTMLAllCollection: 0,
  HTMLCollection: 0,
  HTMLFormElement: 0,
  HTMLSelectElement: 0,
  MediaList: 0,
  MimeTypeArray: 0,
  NamedNodeMap: 0,
  NodeList: 1,
  PaintRequestList: 0,
  Plugin: 0,
  PluginArray: 0,
  SVGLengthList: 0,
  SVGNumberList: 0,
  SVGPathSegList: 0,
  SVGPointList: 0,
  SVGStringList: 0,
  SVGTransformList: 0,
  SourceBufferList: 0,
  StyleSheetList: 0,
  TextTrackCueList: 0,
  TextTrackList: 0,
  TouchList: 0
};


/***/ }),
/* 282 */
/*!************************************************************!*\
  !*** ./node_modules/core-js/internals/get-substitution.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toObject = __webpack_require__(/*! ../internals/to-object */ 89);

var floor = Math.floor;
var replace = ''.replace;
var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;

// https://tc39.es/ecma262/#sec-getsubstitution
module.exports = function (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 replace.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;
  });
};


/***/ }),
/* 283 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/set-interval.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../modules/web.timers */ 185);
var path = __webpack_require__(/*! ../internals/path */ 51);

module.exports = path.setInterval;


/***/ }),
/* 284 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js/internals/array-method-is-strict.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(/*! ../internals/fails */ 37);

module.exports = function (METHOD_NAME, argument) {
  var method = [][METHOD_NAME];
  return !!method && fails(function () {
    // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing
    method.call(null, argument || function () { throw 1; }, 1);
  });
};


/***/ }),
/* 285 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/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';


/***/ }),
/* 286 */
/*!*********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-species-create.js ***!
  \*********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var isArray = __webpack_require__(/*! ../internals/is-array */ 173);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var SPECIES = wellKnownSymbol('species');

// `ArraySpeciesCreate` abstract operation
// https://tc39.es/ecma262/#sec-arrayspeciescreate
module.exports = function (originalArray, length) {
  var C;
  if (isArray(originalArray)) {
    C = originalArray.constructor;
    // cross-realm fallback
    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
    else if (isObject(C)) {
      C = C[SPECIES];
      if (C === null) C = undefined;
    }
  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
};


/***/ }),
/* 287 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/create-property.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 158);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 81);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90);

module.exports = function (object, key, value) {
  var propertyKey = toPrimitive(key);
  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));
  else object[propertyKey] = value;
};


/***/ }),
/* 288 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/reduce.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var reduce = __webpack_require__(/*! ../array/virtual/reduce */ 345);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.reduce;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.reduce) ? reduce : own;
};


/***/ }),
/* 289 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-method-is-strict.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(/*! ../internals/fails */ 43);

module.exports = function (METHOD_NAME, argument) {
  var method = [][METHOD_NAME];
  return !!method && fails(function () {
    // eslint-disable-next-line no-useless-call,no-throw-literal
    method.call(null, argument || function () { throw 1; }, 1);
  });
};


/***/ }),
/* 290 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js/internals/array-iteration.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var bind = __webpack_require__(/*! ../internals/function-bind-context */ 214);
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 128);
var toObject = __webpack_require__(/*! ../internals/to-object */ 89);
var toLength = __webpack_require__(/*! ../internals/to-length */ 84);
var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 352);

var push = [].push;

// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation
var createMethod = function (TYPE) {
  var IS_MAP = TYPE == 1;
  var IS_FILTER = TYPE == 2;
  var IS_SOME = TYPE == 3;
  var IS_EVERY = TYPE == 4;
  var IS_FIND_INDEX = TYPE == 6;
  var IS_FILTER_OUT = TYPE == 7;
  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
  return function ($this, callbackfn, that, specificCreate) {
    var O = toObject($this);
    var self = IndexedObject(O);
    var boundFunction = bind(callbackfn, that, 3);
    var length = toLength(self.length);
    var index = 0;
    var create = specificCreate || arraySpeciesCreate;
    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;
    var value, result;
    for (;length > index; index++) if (NO_HOLES || index in self) {
      value = self[index];
      result = boundFunction(value, index, O);
      if (TYPE) {
        if (IS_MAP) target[index] = result; // map
        else if (result) switch (TYPE) {
          case 3: return true;              // some
          case 5: return value;             // find
          case 6: return index;             // findIndex
          case 2: push.call(target, value); // filter
        } else switch (TYPE) {
          case 4: return false;             // every
          case 7: push.call(target, value); // filterOut
        }
      }
    }
    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
  };
};

module.exports = {
  // `Array.prototype.forEach` method
  // https://tc39.es/ecma262/#sec-array.prototype.foreach
  forEach: createMethod(0),
  // `Array.prototype.map` method
  // https://tc39.es/ecma262/#sec-array.prototype.map
  map: createMethod(1),
  // `Array.prototype.filter` method
  // https://tc39.es/ecma262/#sec-array.prototype.filter
  filter: createMethod(2),
  // `Array.prototype.some` method
  // https://tc39.es/ecma262/#sec-array.prototype.some
  some: createMethod(3),
  // `Array.prototype.every` method
  // https://tc39.es/ecma262/#sec-array.prototype.every
  every: createMethod(4),
  // `Array.prototype.find` method
  // https://tc39.es/ecma262/#sec-array.prototype.find
  find: createMethod(5),
  // `Array.prototype.findIndex` method
  // https://tc39.es/ecma262/#sec-array.prototype.findIndex
  findIndex: createMethod(6),
  // `Array.prototype.filterOut` method
  // https://github.com/tc39/proposal-array-filtering
  filterOut: createMethod(7)
};


/***/ }),
/* 291 */
/*!*************************************!*\
  !*** ./dev/View/Popup/Languages.js ***!
  \*************************************/
/*! exports provided: LanguagesPopupView, 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__, "LanguagesPopupView", function() { return LanguagesPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return LanguagesPopupView; });
/* 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 _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* 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__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* 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);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;




 // import {view, ViewType} from 'Knoin/Knoin';



var LanguagesPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["popup"])({
  name: 'View/Popup/Languages',
  templateID: 'PopupsLanguages'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(LanguagesPopupView, _AbstractViewNext);

  function LanguagesPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.fLang = null;
    _this.userLanguage = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.langs = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observableArray([]);
    _this.languages = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      var userLanguage = _this.userLanguage();

      return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, _this.langs(), function (language) {
        return {
          key: language,
          user: language === userLanguage,
          selected: ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false),
          fullName: Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["convertLangName"])(language)
        };
      });
    });

    _this.langs.subscribe(function () {
      _this.setLanguageSelection();
    });

    return _this;
  }

  var _proto = LanguagesPopupView.prototype;

  _proto.languageTooltipName = function languageTooltipName(language) {
    return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["convertLangName"])(language, true);
  };

  _proto.setLanguageSelection = function setLanguageSelection() {
    var currentLang = this.fLang ? ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].unwrap(this.fLang) : '';

    ___WEBPACK_IMPORTED_MODULE_2___default.a.each(this.languages(), function (item) {
      item.selected(item.key === currentLang);
    });
  };

  _proto.onBeforeShow = function onBeforeShow() {
    this.fLang = null;
    this.userLanguage('');
    this.langs([]);
  };

  _proto.onShow = function onShow(fLanguage, langs, userLanguage) {
    this.fLang = fLanguage;
    this.userLanguage(userLanguage || '');
    this.langs(langs);
  };

  _proto.changeLanguage = function changeLanguage(lang) {
    if (this.fLang) {
      this.fLang(lang);
    }

    this.cancelCommand();
  };

  return LanguagesPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_6__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 292 */
/*!**************************!*\
  !*** ./dev/bootstrap.js ***!
  \**************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__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 Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Model/Email */ 82);








/* harmony default export */ __webpack_exports__["a"] = (function (App) {
  Common_Globals__WEBPACK_IMPORTED_MODULE_3__["data"].__APP__ = App;
  Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$win"].on('keydown', Common_Utils__WEBPACK_IMPORTED_MODULE_2__["killCtrlACtrlS"]).on('unload', function () {
    Common_Globals__WEBPACK_IMPORTED_MODULE_3__["data"].bUnload = true;
  });
  Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$html"].addClass(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["bMobileDevice"] ? 'mobile' : 'no-mobile').on('click.dropdown.data-api', Common_Utils__WEBPACK_IMPORTED_MODULE_2__["detectDropdownVisibility"]);
  var rl = window__WEBPACK_IMPORTED_MODULE_1___default.a.rl || {};
  rl.i18n = Common_Translator__WEBPACK_IMPORTED_MODULE_6__["i18n"];
  rl.createCommand = Common_Utils__WEBPACK_IMPORTED_MODULE_2__["createCommandLegacy"];
  rl.addSettingsViewModel = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* addSettingsViewModel */ "b"];
  rl.addSettingsViewModelForAdmin = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* addSettingsViewModelForAdmin */ "c"];
  rl.addHook = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* addHook */ "a"];
  rl.settingsGet = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* mainSettingsGet */ "d"];
  rl.pluginSettingsGet = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* settingsGet */ "h"];
  rl.pluginRemoteRequest = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* remoteRequest */ "e"];
  rl.EmailModel = Model_Email__WEBPACK_IMPORTED_MODULE_7__["EmailModel"];
  rl.Enums = Common_Enums__WEBPACK_IMPORTED_MODULE_4__;
  window__WEBPACK_IMPORTED_MODULE_1___default.a.rl = rl;

  var start = function start() {
    _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default()(function () {
      Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$html"].removeClass('no-js rl-booted-trigger').addClass('rl-booted');
      App.bootstart();
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time10ms);
  };

  window__WEBPACK_IMPORTED_MODULE_1___default.a.__APP_BOOT = function (fErrorCallback) {
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["domReady"])(function () {
      _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default()(function () {
        if (window__WEBPACK_IMPORTED_MODULE_1___default.a.document.getElementById('rainloop-templates-id')) {
          start();
        } else if (window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES && window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES[0]) {
          window__WEBPACK_IMPORTED_MODULE_1___default.a.document.getElementById('rl-templates').innerHTML = window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES[0];
          start();
        } else {
          fErrorCallback();
        }

        window__WEBPACK_IMPORTED_MODULE_1___default.a.__APP_BOOT = null;
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time10ms);
    });
  };
});

/***/ }),
/* 293 */
/*!**********************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/object/create.js ***!
  \**********************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/object/create */ 362);

/***/ }),
/* 294 */
/*!***************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/setPrototypeOf.js ***!
  \***************************************************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _setPrototypeOf; });
/* harmony import */ var _babel_runtime_corejs3_core_js_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/object/set-prototype-of */ 295);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_0__);

function _setPrototypeOf(o, p) {
  _setPrototypeOf = _babel_runtime_corejs3_core_js_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_0___default.a || function _setPrototypeOf(o, p) {
    o.__proto__ = p;
    return o;
  };

  return _setPrototypeOf(o, p);
}

/***/ }),
/* 295 */
/*!********************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/object/set-prototype-of.js ***!
  \********************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/object/set-prototype-of */ 365);

/***/ }),
/* 296 */
/*!***********************************!*\
  !*** ./dev/Stores/AbstractApp.js ***!
  \***********************************/
/*! exports provided: AbstractAppStore, default */
/*! exports used: AbstractAppStore */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractAppStore; });
/* unused harmony export default */
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/Settings */ 5);




var AbstractAppStore = /*#__PURE__*/function () {
  function AbstractAppStore() {
    this.allowLanguagesOnSettings = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
    this.allowLanguagesOnLogin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
    this.newMoveToFolder = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
    this.interfaceAnimation = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
    this.interfaceAnimation.subscribe(function (value) {
      var anim = Common_Globals__WEBPACK_IMPORTED_MODULE_1__["bMobileDevice"] || !value;
      Common_Globals__WEBPACK_IMPORTED_MODULE_1__["$html"].toggleClass('rl-anim', !anim).toggleClass('no-rl-anim', anim);
    });
    this.interfaceAnimation.valueHasMutated();
  }

  var _proto = AbstractAppStore.prototype;

  _proto.populate = function populate() {
    this.allowLanguagesOnLogin(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('AllowLanguagesOnLogin'));
    this.allowLanguagesOnSettings(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('AllowLanguagesOnSettings'));
    this.newMoveToFolder(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('NewMoveToFolder'));
    this.interfaceAnimation(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('InterfaceAnimation'));
  };

  return AbstractAppStore;
}();



/***/ }),
/* 297 */
/*!**************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js ***!
  \**************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/instance/for-each */ 368);

/***/ }),
/* 298 */
/*!********************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js ***!
  \********************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/object/keys */ 374);

/***/ }),
/* 299 */
/*!************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/reduce.js ***!
  \************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/instance/reduce */ 377);

/***/ }),
/* 300 */
/*!*************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/reverse.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/instance/reverse */ 378);

/***/ }),
/* 301 */
/*!***********************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/instance/slice */ 382);

/***/ }),
/* 302 */
/*!*******************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/object/define-property */ 386);

/***/ }),
/* 303 */
/*!************************************!*\
  !*** ./dev/Remote/AbstractAjax.js ***!
  \************************************/
/*! exports provided: AbstractAjaxRemote, default */
/*! exports used: AbstractAjaxRemote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractAjaxRemote; });
/* unused harmony export default */
/* 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__);
/* 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 $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/Settings */ 5);











var AbstractAjaxRemote = /*#__PURE__*/function () {
  function AbstractAjaxRemote() {
    this.oRequests = {};
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sRequestAction
   * @param {string} sType
   * @param {?AjaxJsonDefaultResponse} oData
   * @param {boolean} bCached
   * @param {*=} oRequestParameters
   */


  var _proto = AbstractAjaxRemote.prototype;

  _proto.defaultResponse = function defaultResponse(fCallback, sRequestAction, sType, oData, bCached, oRequestParameters) {
    var fCall = function fCall() {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success !== sType && Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].bUnload) {
        sType = Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Unload;
      }

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === sType && oData && !oData.Result) {
        if (oData && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["inArray"])(oData.ErrorCode, [Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].AuthError, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].AccessError, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].ConnectionError, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].DomainNotAllowed, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].AccountNotAllowed, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].MailServerError, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].UnknownNotification, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].UnknownError])) {
          Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iAjaxErrorCount += 1;
        }

        if (oData && Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].InvalidToken === oData.ErrorCode) {
          Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iTokenErrorCount += 1;
        }

        if (Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* TOKEN_ERROR_LIMIT */ "q"] < Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iTokenErrorCount) {
          if (Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__ && Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.loginAndLogoutReload) {
            Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.loginAndLogoutReload(false, true);
          }
        }

        if (oData.ClearAuth || oData.Logout || Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* AJAX_ERROR_LIMIT */ "a"] < Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iAjaxErrorCount) {
          if (Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__ && Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.clearClientSideToken) {
            Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.clearClientSideToken();

            if (!oData.ClearAuth && Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.loginAndLogoutReload) {
              Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.loginAndLogoutReload(false, true);
            }
          }
        }
      } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === sType && oData && oData.Result) {
        Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iAjaxErrorCount = 0;
        Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iTokenErrorCount = 0;
      }

      Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_8__[/* runHook */ "f"])('ajax-default-response', [sRequestAction, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === sType ? oData : null, sType, bCached, oRequestParameters]);

      if (fCallback) {
        fCallback(sType, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === sType ? oData : null, bCached, sRequestAction, oRequestParameters);
      }
    };

    switch (sType) {
      case 'success':
        sType = Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success;
        break;

      case 'abort':
        sType = Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Abort;
        break;

      default:
        sType = Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Error;
        break;
    }

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Error === sType) {
      ___WEBPACK_IMPORTED_MODULE_1___default.a.delay(fCall, 300);
    } else {
      fCall();
    }
  }
  /**
   * @param {?Function} fResultCallback
   * @param {Object} oParameters
   * @param {?number=} iTimeOut = 20000
   * @param {string=} sGetAdd = ''
   * @param {Array=} aAbortActions = []
   * @returns {jQuery.jqXHR}
   */
  ;

  _proto.ajaxRequest = function ajaxRequest(fResultCallback, params, iTimeOut, sGetAdd, abortActions) {
    var _this = this;

    if (iTimeOut === void 0) {
      iTimeOut = 20000;
    }

    if (sGetAdd === void 0) {
      sGetAdd = '';
    }

    if (abortActions === void 0) {
      abortActions = [];
    }

    var isPost = '' === sGetAdd,
        headers = {},
        start = new window__WEBPACK_IMPORTED_MODULE_0___default.a.Date().getTime();
    var action = '';
    params = params || {};
    action = params.Action || '';

    if (action && 0 < abortActions.length) {
      ___WEBPACK_IMPORTED_MODULE_1___default.a.each(abortActions, function (actionToAbort) {
        if (_this.oRequests[actionToAbort]) {
          _this.oRequests[actionToAbort].__aborted = true;

          if (_this.oRequests[actionToAbort].abort) {
            _this.oRequests[actionToAbort].abort();
          }

          _this.oRequests[actionToAbort] = null;
        }
      });
    }

    if (isPost) {
      params.XToken = Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["appSettingsGet"]('token');
    }

    var oDefAjax = $__WEBPACK_IMPORTED_MODULE_2___default.a.ajax({
      type: isPost ? 'POST' : 'GET',
      url: Object(Common_Links__WEBPACK_IMPORTED_MODULE_7__[/* ajax */ "a"])(sGetAdd),
      async: true,
      dataType: 'json',
      data: isPost ? params : {},
      headers: headers,
      timeout: iTimeOut,
      global: true
    });
    oDefAjax.always(function (oData, sType) {
      var cached = false;

      if (oData && oData.Time) {
        cached = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pInt"])(oData.Time) > new window__WEBPACK_IMPORTED_MODULE_0___default.a.Date().getTime() - start;
      }

      if (oData && oData.UpdateToken) {
        if (Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__ && Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.setClientSideToken) {
          Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.setClientSideToken(oData.UpdateToken);
        }
      }

      if (action && _this.oRequests[action]) {
        if (_this.oRequests[action].__aborted) {
          sType = 'abort';
        }

        _this.oRequests[action] = null;
      }

      _this.defaultResponse(fResultCallback, action, sType, oData, cached, params);
    });

    if (action && 0 < abortActions.length && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["inArray"])(action, abortActions)) {
      if (this.oRequests[action]) {
        this.oRequests[action].__aborted = true;

        if (this.oRequests[action].abort) {
          this.oRequests[action].abort();
        }

        this.oRequests[action] = null;
      }

      this.oRequests[action] = oDefAjax;
    } // eslint-disable-next-line no-console


    oDefAjax.catch(console.log);
    return oDefAjax;
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sAction
   * @param {Object=} oParameters
   * @param {?number=} iTimeout
   * @param {string=} sGetAdd = ''
   * @param {Array=} aAbortActions = []
   */
  ;

  _proto.defaultRequest = function defaultRequest(fCallback, sAction, oParameters, iTimeout, sGetAdd, aAbortActions) {
    oParameters = oParameters || {};
    oParameters.Action = sAction;
    sGetAdd = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pString"])(sGetAdd);
    Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_8__[/* runHook */ "f"])('ajax-default-request', [sAction, oParameters, sGetAdd]);
    return this.ajaxRequest(fCallback, oParameters, Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isUnd"])(iTimeout) ? Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* DEFAULT_AJAX_TIMEOUT */ "g"] : Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pInt"])(iTimeout), sGetAdd, aAbortActions);
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.noop = function noop(fCallback) {
    this.defaultRequest(fCallback, 'Noop');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.getPublicKey = function getPublicKey(fCallback) {
    this.defaultRequest(fCallback, 'GetPublicKey');
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sVersion
   */
  ;

  _proto.jsVersion = function jsVersion(fCallback, sVersion) {
    this.defaultRequest(fCallback, 'Version', {
      'Version': sVersion
    });
  };

  return AbstractAjaxRemote;
}();



/***/ }),
/* 304 */
/*!****************************************!*\
  !*** ./dev/Screen/AbstractSettings.js ***!
  \****************************************/
/*! exports provided: AbstractSettingsScreen, default */
/*! exports used: AbstractSettingsScreen */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractSettingsScreen; });
/* unused harmony export default */
/* 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 _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__ = __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_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* 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_Links__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/AbstractScreen */ 152);











var AbstractSettingsScreen = /*#__PURE__*/function (_AbstractScreen) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AbstractSettingsScreen, _AbstractScreen);

  /**
   * @param {Array} viewModels
   */
  function AbstractSettingsScreen(viewModels) {
    var _this;

    _this = _AbstractScreen.call(this, 'settings', viewModels) || this;
    _this.menu = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observableArray([]);
    _this.oCurrentSubScreen = null;
    _this.oViewModelPlace = null;

    _this.setupSettings();

    return _this;
  }
  /**
   * @param {Function=} fCallback
   */


  var _proto = AbstractSettingsScreen.prototype;

  _proto.setupSettings = function setupSettings(fCallback) {
    if (fCallback === void 0) {
      fCallback = null;
    }

    if (fCallback) {
      fCallback();
    }
  };

  _proto.onRoute = function onRoute(subName) {
    var _this2 = this;

    var settingsScreen = null,
        RoutedSettingsViewModel = null,
        viewModelPlace = null,
        viewModelDom = null;
    RoutedSettingsViewModel = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"].settings, function (SettingsViewModel) {
      return SettingsViewModel && SettingsViewModel.__rlSettingsData && subName === SettingsViewModel.__rlSettingsData.Route;
    });

    if (RoutedSettingsViewModel) {
      if (_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"]['settings-removed'], function (DisabledSettingsViewModel) {
        return DisabledSettingsViewModel && DisabledSettingsViewModel === RoutedSettingsViewModel;
      })) {
        RoutedSettingsViewModel = null;
      }

      if (RoutedSettingsViewModel && _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"]['settings-disabled'], function (DisabledSettingsViewModel) {
        return DisabledSettingsViewModel && DisabledSettingsViewModel === RoutedSettingsViewModel;
      })) {
        RoutedSettingsViewModel = null;
      }
    }

    if (RoutedSettingsViewModel) {
      if (RoutedSettingsViewModel.__builded && RoutedSettingsViewModel.__vm) {
        settingsScreen = RoutedSettingsViewModel.__vm;
      } else {
        viewModelPlace = this.oViewModelPlace;

        if (viewModelPlace && 1 === viewModelPlace.length) {
          settingsScreen = new RoutedSettingsViewModel();
          viewModelDom = $__WEBPACK_IMPORTED_MODULE_3___default()('<div></div>').addClass('rl-settings-view-model').hide();
          viewModelDom.appendTo(viewModelPlace);
          settingsScreen.viewModelDom = viewModelDom;
          settingsScreen.__rlSettingsData = RoutedSettingsViewModel.__rlSettingsData;
          RoutedSettingsViewModel.__dom = viewModelDom;
          RoutedSettingsViewModel.__builded = true;
          RoutedSettingsViewModel.__vm = settingsScreen;
          var tmpl = {
            name: RoutedSettingsViewModel.__rlSettingsData.Template
          };
          ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].applyBindingAccessorsToNode(viewModelDom[0], {
            translatorInit: true,
            template: function template() {
              return tmpl;
            }
          }, settingsScreen);
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(settingsScreen, 'onBuild', [viewModelDom]);
        } else {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["log"])('Cannot find sub settings view model position: SettingsSubScreen');
        }
      }

      if (settingsScreen) {
        ___WEBPACK_IMPORTED_MODULE_2___default.a.defer(function () {
          // hide
          if (_this2.oCurrentSubScreen) {
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(_this2.oCurrentSubScreen, 'onHide');

            _this2.oCurrentSubScreen.viewModelDom.hide();
          } // --


          _this2.oCurrentSubScreen = settingsScreen; // show

          if (_this2.oCurrentSubScreen) {
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(_this2.oCurrentSubScreen, 'onBeforeShow');

            _this2.oCurrentSubScreen.viewModelDom.show();

            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(_this2.oCurrentSubScreen, 'onShow');
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(_this2.oCurrentSubScreen, 'onShowWithDelay', [], 200);

            ___WEBPACK_IMPORTED_MODULE_2___default.a.each(_this2.menu(), function (item) {
              item.selected(settingsScreen && settingsScreen.__rlSettingsData && item.route === settingsScreen.__rlSettingsData.Route);
            });

            $__WEBPACK_IMPORTED_MODULE_3___default()('#rl-content .b-settings .b-content .content').scrollTop(0);
          } // --


          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["windowResize"])();
        });
      }
    } else {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_7__[/* settings */ "z"])(), false, true);
    }
  };

  _proto.onHide = function onHide() {
    if (this.oCurrentSubScreen && this.oCurrentSubScreen.viewModelDom) {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(this.oCurrentSubScreen, 'onHide');
      this.oCurrentSubScreen.viewModelDom.hide();
    }
  };

  _proto.onBuild = function onBuild() {
    var _this3 = this;

    ___WEBPACK_IMPORTED_MODULE_2___default.a.each(Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"].settings, function (SettingsViewModel) {
      if (SettingsViewModel && SettingsViewModel.__rlSettingsData && !_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"]['settings-removed'], function (RemoveSettingsViewModel) {
        return RemoveSettingsViewModel && RemoveSettingsViewModel === SettingsViewModel;
      })) {
        _this3.menu.push({
          route: SettingsViewModel.__rlSettingsData.Route,
          label: SettingsViewModel.__rlSettingsData.Label,
          selected: ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false),
          disabled: !!_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"]['settings-disabled'], function (DisabledSettingsViewModel) {
            return DisabledSettingsViewModel && DisabledSettingsViewModel === SettingsViewModel;
          })
        });
      }
    });

    this.oViewModelPlace = $__WEBPACK_IMPORTED_MODULE_3___default()('#rl-content #rl-settings-subscreen');
  };

  _proto.routes = function routes() {
    var DefaultViewModel = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"].settings, function (SettingsViewModel) {
      return SettingsViewModel && SettingsViewModel.__rlSettingsData && SettingsViewModel.__rlSettingsData.IsDefault;
    }),
        defaultRoute = DefaultViewModel && DefaultViewModel.__rlSettingsData ? DefaultViewModel.__rlSettingsData.Route : 'general',
        rules = {
      subname: /^(.*)$/,
      normalize_: function normalize_(rquest, vals) {
        vals.subname = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["isUnd"])(vals.subname) ? defaultRoute : Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pString"])(vals.subname);
        return [vals.subname];
      }
    };

    return [['{subname}/', rules], ['{subname}', rules], ['', rules]];
  };

  return AbstractSettingsScreen;
}(Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_9__[/* AbstractScreen */ "a"]);



/***/ }),
/* 305 */
/*!*****************************!*\
  !*** ./dev/App/Abstract.js ***!
  \*****************************/
/*! exports provided: AbstractApp, default */
/*! exports used: AbstractApp */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractApp; });
/* unused harmony export default */
/* 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 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 $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ssm__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ssm */ 154);
/* harmony import */ var ssm__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(ssm__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/Language */ 72);
/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/Theme */ 123);
/* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Stores/Social */ 26);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractBoot__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Knoin/AbstractBoot */ 306);




















var AbstractApp = /*#__PURE__*/function (_AbstractBoot) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AbstractApp, _AbstractBoot);

  /**
   * @param {RemoteStorage|AdminRemoteStorage} Remote
   */
  function AbstractApp() {
    var _this;

    _this = _AbstractBoot.call(this) || this;
    _this.googlePreviewSupportedCache = null;
    _this.isLocalAutocomplete = true;
    _this.iframe = null;
    _this.lastErrorTime = 0;
    _this.iframe = $__WEBPACK_IMPORTED_MODULE_2___default()('<iframe class="internal-hiddden" />').appendTo('body');
    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].on('resize', function () {
      Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('window.resize');
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* sub */ "b"]('window.resize', ___WEBPACK_IMPORTED_MODULE_3___default.a.throttle(function () {
      var iH = Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].height(),
          iW = Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].height();

      if (Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].__sizes[0] !== iH || Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].__sizes[1] !== iW) {
        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].__sizes[0] = iH;
        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].__sizes[1] = iW;
        Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('window.resize.real');
      }
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time50ms)); // DEBUG
    //		Events.sub({
    //			'window.resize': function() {
    //				window.console.log('window.resize');
    //			},
    //			'window.resize.real': function() {
    //				window.console.log('window.resize.real');
    //			}
    //		});

    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$doc"].on('keydown', function (event) {
      if (event && event.ctrlKey) {
        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('rl-ctrl-key-pressed');
      }
    }).on('keyup', function (event) {
      if (event && !event.ctrlKey) {
        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].removeClass('rl-ctrl-key-pressed');
      }
    });
    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$doc"].on('mousemove keypress click', ___WEBPACK_IMPORTED_MODULE_3___default.a.debounce(function () {
      Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('rl.auto-logout-refresh');
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time5s));
    key__WEBPACK_IMPORTED_MODULE_5___default()('esc, enter', Common_Enums__WEBPACK_IMPORTED_MODULE_9__["KeyState"].All, function () {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["detectDropdownVisibility"])();
    });
    return _this;
  }

  var _proto = AbstractApp.prototype;

  _proto.remote = function remote() {
    return null;
  };

  _proto.data = function data() {
    return null;
  };

  _proto.getApplicationConfiguration = function getApplicationConfiguration(name, default_) {
    return this.applicationConfiguration[name] || default_;
  }
  /**
   * @param {string} link
   * @returns {boolean}
   */
  ;

  _proto.download = function download(link) {
    if (Common_Globals__WEBPACK_IMPORTED_MODULE_7__["sUserAgent"] && (-1 < Common_Globals__WEBPACK_IMPORTED_MODULE_7__["sUserAgent"].indexOf('chrome') || -1 < Common_Globals__WEBPACK_IMPORTED_MODULE_7__["sUserAgent"].indexOf('chrome'))) {
      var oLink = window__WEBPACK_IMPORTED_MODULE_1___default.a.document.createElement('a');
      oLink.href = link;

      if (window__WEBPACK_IMPORTED_MODULE_1___default.a.document && window__WEBPACK_IMPORTED_MODULE_1___default.a.document.createEvent) {
        var oE = window__WEBPACK_IMPORTED_MODULE_1___default.a.document.createEvent.MouseEvents;

        if (oE && oE.initEvent && oLink.dispatchEvent) {
          oE.initEvent('click', true, true);
          oLink.dispatchEvent(oE);
          return true;
        }
      }
    }

    if (Common_Globals__WEBPACK_IMPORTED_MODULE_7__["bMobileDevice"]) {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.open(link, '_self');
      window__WEBPACK_IMPORTED_MODULE_1___default.a.focus();
    } else {
      this.iframe.attr('src', link); // window.document.location.href = link;
    }

    return true;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.googlePreviewSupported = function googlePreviewSupported() {
    if (null === this.googlePreviewSupportedCache) {
      this.googlePreviewSupportedCache = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["settingsGet"]('AllowGoogleSocial') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["settingsGet"]('AllowGoogleSocialPreview');
    }

    return this.googlePreviewSupportedCache;
  }
  /**
   * @param {string} title
   */
  ;

  _proto.setWindowTitle = function setWindowTitle(title) {
    title = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNormal"])(title) && 0 < title.length ? '' + title : '';

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["settingsGet"]('Title')) {
      title += (title ? ' - ' : '') + Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["settingsGet"]('Title');
    }

    window__WEBPACK_IMPORTED_MODULE_1___default.a.document.title = title + ' ...';
    window__WEBPACK_IMPORTED_MODULE_1___default.a.document.title = title;
  };

  _proto.redirectToAdminPanel = function redirectToAdminPanel() {
    ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(function () {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.location.href = Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* rootAdmin */ "x"])();
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time100ms);
  };

  _proto.clearClientSideToken = function clearClientSideToken() {
    if (window__WEBPACK_IMPORTED_MODULE_1___default.a.__rlah_clear) {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.__rlah_clear();
    }
  }
  /**
   * @param {string} token
   */
  ;

  _proto.setClientSideToken = function setClientSideToken(token) {
    if (window__WEBPACK_IMPORTED_MODULE_1___default.a.__rlah_set) {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.__rlah_set(token);

      Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["settingsSet"]('AuthAccountHash', token);
      Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* populateAuthSuffix */ "v"])();
    }
  }
  /**
   * @param {boolean=} admin = false
   * @param {boolean=} logout = false
   * @param {boolean=} close = false
   */
  ;

  _proto.loginAndLogoutReload = function loginAndLogoutReload(admin, logout, close) {
    if (admin === void 0) {
      admin = false;
    }

    if (logout === void 0) {
      logout = false;
    }

    if (close === void 0) {
      close = false;
    }

    var inIframe = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["appSettingsGet"]('inIframe');
    var customLogoutLink = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["pString"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["appSettingsGet"]('customLogoutLink'));

    if (logout) {
      this.clearClientSideToken();
    }

    if (logout && close && window__WEBPACK_IMPORTED_MODULE_1___default.a.close) {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.close();
    }

    customLogoutLink = customLogoutLink || (admin ? Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* rootAdmin */ "x"])() : Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* rootUser */ "y"])());

    if (logout && window__WEBPACK_IMPORTED_MODULE_1___default.a.location.href !== customLogoutLink) {
      ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(function () {
        if (inIframe && window__WEBPACK_IMPORTED_MODULE_1___default.a.parent) {
          window__WEBPACK_IMPORTED_MODULE_1___default.a.parent.location.href = customLogoutLink;
        } else {
          window__WEBPACK_IMPORTED_MODULE_1___default.a.location.href = customLogoutLink;
        }

        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].trigger('rl.tooltips.diactivate');
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time100ms);
    } else {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["routeOff"])();
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* root */ "w"])(), true);
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["routeOff"])();

      ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(function () {
        if (inIframe && window__WEBPACK_IMPORTED_MODULE_1___default.a.parent) {
          window__WEBPACK_IMPORTED_MODULE_1___default.a.parent.location.reload();
        } else {
          window__WEBPACK_IMPORTED_MODULE_1___default.a.location.reload();
        }

        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].trigger('rl.tooltips.diactivate');
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time100ms);
    }
  };

  _proto.historyBack = function historyBack() {
    window__WEBPACK_IMPORTED_MODULE_1___default.a.history.back();
  };

  _proto.bootstart = function bootstart() {
    // log('Ps' + 'ss, hac' + 'kers! The' + 're\'s not' + 'hing inte' + 'resting :' + ')');
    Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('rl.bootstart');
    var mobile = Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["appSettingsGet"]('mobile');
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('SaveTrigger', __webpack_require__(/*! Component/SaveTrigger */ 394).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Input', __webpack_require__(/*! Component/Input */ 395).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Select', __webpack_require__(/*! Component/Select */ 396).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Radio', __webpack_require__(/*! Component/Radio */ 397).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('TextArea', __webpack_require__(/*! Component/TextArea */ 398).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Date', __webpack_require__(/*! Component/Date */ 399).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('x-script', __webpack_require__(/*! Component/Script */ 400).default); // ko.components.register('svg-icon', require('Component/SvgIcon').default);

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["appSettingsGet"]('materialDesign') && Common_Globals__WEBPACK_IMPORTED_MODULE_7__["bAnimationSupported"]) {
      ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/MaterialDesign/Checkbox */ 401).default);
      ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 225).default);
    } else {
      // ko.components.register('Checkbox', require('Component/Classic/Checkbox').default);
      // ko.components.register('CheckboxSimple', require('Component/Classic/Checkbox').default);
      ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/Checkbox */ 225).default);
      ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 225).default);
    }

    Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["initOnStartOrLangChange"])(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["initNotificationLanguage"]);

    ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["windowResizeCallback"], Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time1s);

    Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* sub */ "b"]('ssm.mobile-enter', function () {
      Object(Common_Globals__WEBPACK_IMPORTED_MODULE_7__["leftPanelDisabled"])(true);
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* sub */ "b"]('ssm.mobile-leave', function () {
      Object(Common_Globals__WEBPACK_IMPORTED_MODULE_7__["leftPanelDisabled"])(false);
    });

    if (!mobile) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('rl-desktop');
      ssm__WEBPACK_IMPORTED_MODULE_6___default.a.addState({
        id: 'mobile',
        query: '(max-width: 767px)',
        onEnter: function onEnter() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('ssm-state-mobile');
          Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('ssm.mobile-enter');
        },
        onLeave: function onLeave() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].removeClass('ssm-state-mobile');
          Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('ssm.mobile-leave');
        }
      });
      ssm__WEBPACK_IMPORTED_MODULE_6___default.a.addState({
        id: 'tablet',
        query: '(min-width: 768px) and (max-width: 999px)',
        onEnter: function onEnter() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('ssm-state-tablet');
        },
        onLeave: function onLeave() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].removeClass('ssm-state-tablet');
        }
      });
      ssm__WEBPACK_IMPORTED_MODULE_6___default.a.addState({
        id: 'desktop',
        query: '(min-width: 1000px) and (max-width: 1400px)',
        onEnter: function onEnter() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('ssm-state-desktop');
        },
        onLeave: function onLeave() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].removeClass('ssm-state-desktop');
        }
      });
      ssm__WEBPACK_IMPORTED_MODULE_6___default.a.addState({
        id: 'desktop-large',
        query: '(min-width: 1401px)',
        onEnter: function onEnter() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('ssm-state-desktop-large');
        },
        onLeave: function onLeave() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].removeClass('ssm-state-desktop-large');
        }
      });
    } else {
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('ssm-state-mobile').addClass('rl-mobile');
      Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('ssm.mobile-enter');
    }

    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["leftPanelDisabled"].subscribe(function (bValue) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].toggleClass('rl-left-panel-disabled', bValue);
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].toggleClass('rl-left-panel-enabled', !bValue);
    });
    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["leftPanelType"].subscribe(function (sValue) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].toggleClass('rl-left-panel-none', 'none' === sValue);
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].toggleClass('rl-left-panel-short', 'short' === sValue);
    });
    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["leftPanelDisabled"].valueHasMutated();
    Stores_Language__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].populate();
    Stores_Theme__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].populate();
    Stores_Social__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].populate();
  };

  return AbstractApp;
}(Knoin_AbstractBoot__WEBPACK_IMPORTED_MODULE_18__[/* AbstractBoot */ "a"]);



/***/ }),
/* 306 */
/*!***********************************!*\
  !*** ./dev/Knoin/AbstractBoot.js ***!
  \***********************************/
/*! exports provided: AbstractBoot */
/*! exports used: AbstractBoot */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractBoot; });
var AbstractBoot = /*#__PURE__*/function () {
  function AbstractBoot() {}

  var _proto = AbstractBoot.prototype;

  _proto.bootstart = function bootstart() {
    /* no-empty */
  };

  return AbstractBoot;
}();

/***/ }),
/* 307 */
/*!****************************************!*\
  !*** ./dev/Component/AbstractRadio.js ***!
  \****************************************/
/*! exports provided: AbstractRadio, default */
/*! exports used: AbstractRadio */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractRadio; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* 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 _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 122);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ 219);
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ 247);
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Component/Abstract */ 32);












var AbstractRadio = /*#__PURE__*/function (_AbstractComponent) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AbstractRadio, _AbstractComponent);

  /**
   * @param {Object} params
   */
  function AbstractRadio(params) {
    var _this;

    _this = _AbstractComponent.call(this) || this;
    _this.values = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observableArray([]);
    _this.value = params.value;

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(_this.value) || !_this.value.subscribe) {
      _this.value = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable('');
    }

    _this.inline = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(params.inline) ? false : params.inline;
    _this.readOnly = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(params.readOnly) ? false : !!params.readOnly;

    if (_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2___default()(params)) {
      _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2___default()(_this).call(_this, _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2___default()(params), function (label, value) {
        return {
          label: label,
          value: value
        };
      }));
    }

    _this.click = ___WEBPACK_IMPORTED_MODULE_7___default.a.bind(_this.click, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    return _this;
  }

  var _proto = AbstractRadio.prototype;

  _proto.click = function click(value) {
    if (!this.readOnly && value) {
      this.value(value.value);
    }
  };

  return AbstractRadio;
}(Component_Abstract__WEBPACK_IMPORTED_MODULE_10__[/* AbstractComponent */ "a"]);



/***/ }),
/* 308 */,
/* 309 */,
/* 310 */,
/* 311 */,
/* 312 */,
/* 313 */,
/* 314 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/modules/es.array.filter.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 65);
var $filter = __webpack_require__(/*! ../internals/array-iteration */ 290).filter;
var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 354);

var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');

// `Array.prototype.filter` method
// https://tc39.es/ecma262/#sec-array.prototype.filter
// with adding support of @@species
$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
  filter: function filter(callbackfn /* , thisArg */) {
    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  }
});


/***/ }),
/* 315 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/modules/es.string.search.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 149);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);
var sameValue = __webpack_require__(/*! ../internals/same-value */ 356);
var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 150);

// @@search logic
fixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {
  return [
    // `String.prototype.search` method
    // https://tc39.es/ecma262/#sec-string.prototype.search
    function search(regexp) {
      var O = requireObjectCoercible(this);
      var searcher = regexp == undefined ? undefined : regexp[SEARCH];
      return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
    },
    // `RegExp.prototype[@@search]` method
    // https://tc39.es/ecma262/#sec-regexp.prototype-@@search
    function (regexp) {
      var res = maybeCallNative(nativeSearch, regexp, this);
      if (res.done) return res.value;

      var rx = anObject(regexp);
      var S = String(this);

      var previousLastIndex = rx.lastIndex;
      if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;
      var result = regExpExec(rx, S);
      if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;
      return result === null ? -1 : result.index;
    }
  ];
});


/***/ }),
/* 316 */,
/* 317 */,
/* 318 */,
/* 319 */,
/* 320 */,
/* 321 */,
/* 322 */,
/* 323 */,
/* 324 */,
/* 325 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/create-html.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);

var quot = /"/g;

// B.2.3.2.1 CreateHTML(string, tag, attribute, value)
// https://tc39.es/ecma262/#sec-createhtml
module.exports = function (string, tag, attribute, value) {
  var S = String(requireObjectCoercible(string));
  var p1 = '<' + tag;
  if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
  return p1 + '>' + S + '</' + tag + '>';
};


/***/ }),
/* 326 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js/internals/string-html-forced.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 37);

// check the existence of a method, lowercase
// of a tag and escaping quotes in arguments
module.exports = function (METHOD_NAME) {
  return fails(function () {
    var test = ''[METHOD_NAME]('"');
    return test !== test.toLowerCase() || test.split('"').length > 3;
  });
};


/***/ }),
/* 327 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/trim.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/trim */ 328);

module.exports = parent;


/***/ }),
/* 328 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/trim.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var trim = __webpack_require__(/*! ../string/virtual/trim */ 329);

var StringPrototype = String.prototype;

module.exports = function (it) {
  var own = it.trim;
  return typeof it === 'string' || it === StringPrototype
    || (it instanceof String && own === StringPrototype.trim) ? trim : own;
};


/***/ }),
/* 329 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/es/string/virtual/trim.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.string.trim */ 330);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('String').trim;


/***/ }),
/* 330 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.string.trim.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var $trim = __webpack_require__(/*! ../internals/string-trim */ 331).trim;
var forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ 332);

// `String.prototype.trim` method
// https://tc39.es/ecma262/#sec-string.prototype.trim
$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
  trim: function trim() {
    return $trim(this);
  }
});


/***/ }),
/* 331 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/string-trim.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 115);
var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 285);

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.es/ecma262/#sec-string.prototype.trimstart
  start: createMethod(1),
  // `String.prototype.{ trimRight, trimEnd }` methods
  // https://tc39.es/ecma262/#sec-string.prototype.trimend
  end: createMethod(2),
  // `String.prototype.trim` method
  // https://tc39.es/ecma262/#sec-string.prototype.trim
  trim: createMethod(3)
};


/***/ }),
/* 332 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/string-trim-forced.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);
var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 285);

var non = '\u200B\u0085\u180E';

// check that a method works with the correct list
// of whitespaces and has a correct name
module.exports = function (METHOD_NAME) {
  return fails(function () {
    return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;
  });
};


/***/ }),
/* 333 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/find.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/find */ 334);

module.exports = parent;


/***/ }),
/* 334 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/find.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var find = __webpack_require__(/*! ../array/virtual/find */ 335);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.find;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.find) ? find : own;
};


/***/ }),
/* 335 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/find.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.find */ 336);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').find;


/***/ }),
/* 336 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.find.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var $find = __webpack_require__(/*! ../internals/array-iteration */ 172).find;
var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 222);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);

var FIND = 'find';
var SKIPS_HOLES = true;

var USES_TO_LENGTH = arrayMethodUsesToLength(FIND);

// Shouldn't skip holes
if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });

// `Array.prototype.find` method
// https://tc39.es/ecma262/#sec-array.prototype.find
$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {
  find: function find(callbackfn /* , that = undefined */) {
    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  }
});

// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables(FIND);


/***/ }),
/* 337 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/concat.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/concat */ 338);

module.exports = parent;


/***/ }),
/* 338 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/concat.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var concat = __webpack_require__(/*! ../array/virtual/concat */ 339);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.concat;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.concat) ? concat : own;
};


/***/ }),
/* 339 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/concat.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.concat */ 340);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').concat;


/***/ }),
/* 340 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.concat.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var isArray = __webpack_require__(/*! ../internals/is-array */ 173);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var toObject = __webpack_require__(/*! ../internals/to-object */ 117);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);
var createProperty = __webpack_require__(/*! ../internals/create-property */ 287);
var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 286);
var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 174);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 148);

var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');
var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';

// We can't use this feature detection in V8 since it causes
// deoptimization and serious performance degradation
// https://github.com/zloirock/core-js/issues/679
var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {
  var array = [];
  array[IS_CONCAT_SPREADABLE] = false;
  return array.concat()[0] !== array;
});

var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');

var isConcatSpreadable = function (O) {
  if (!isObject(O)) return false;
  var spreadable = O[IS_CONCAT_SPREADABLE];
  return spreadable !== undefined ? !!spreadable : isArray(O);
};

var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;

// `Array.prototype.concat` method
// https://tc39.es/ecma262/#sec-array.prototype.concat
// with adding support of @@isConcatSpreadable and @@species
$({ target: 'Array', proto: true, forced: FORCED }, {
  concat: function concat(arg) { // eslint-disable-line no-unused-vars
    var O = toObject(this);
    var A = arraySpeciesCreate(O, 0);
    var n = 0;
    var i, k, length, len, E;
    for (i = -1, length = arguments.length; i < length; i++) {
      E = i === -1 ? O : arguments[i];
      if (isConcatSpreadable(E)) {
        len = toLength(E.length);
        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
      } else {
        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
        createProperty(A, n++, E);
      }
    }
    A.length = n;
    return A;
  }
});


/***/ }),
/* 341 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/values.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 161);
var values = __webpack_require__(/*! ../array/virtual/values */ 342);
var classof = __webpack_require__(/*! ../../internals/classof */ 92);
var ArrayPrototype = Array.prototype;

var DOMIterables = {
  DOMTokenList: true,
  NodeList: true
};

module.exports = function (it) {
  var own = it.values;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.values)
    // eslint-disable-next-line no-prototype-builtins
    || DOMIterables.hasOwnProperty(classof(it)) ? values : own;
};


/***/ }),
/* 342 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/array/virtual/values.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../../es/array/virtual/values */ 343);

module.exports = parent;


/***/ }),
/* 343 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/values.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.iterator */ 201);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').values;


/***/ }),
/* 344 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/reduce.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/reduce */ 288);

module.exports = parent;


/***/ }),
/* 345 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/reduce.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.reduce */ 346);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').reduce;


/***/ }),
/* 346 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.reduce.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var $reduce = __webpack_require__(/*! ../internals/array-reduce */ 347).left;
var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 289);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);
var CHROME_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 148);
var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ 118);

var STRICT_METHOD = arrayMethodIsStrict('reduce');
var USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });
// Chrome 80-82 has a critical bug
// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;

// `Array.prototype.reduce` method
// https://tc39.es/ecma262/#sec-array.prototype.reduce
$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH || CHROME_BUG }, {
  reduce: function reduce(callbackfn /* , initialValue */) {
    return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
  }
});


/***/ }),
/* 347 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-reduce.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);
var toObject = __webpack_require__(/*! ../internals/to-object */ 117);
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 170);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);

// `Array.prototype.{ reduce, reduceRight }` methods implementation
var createMethod = function (IS_RIGHT) {
  return function (that, callbackfn, argumentsLength, memo) {
    aFunction(callbackfn);
    var O = toObject(that);
    var self = IndexedObject(O);
    var length = toLength(O.length);
    var index = IS_RIGHT ? length - 1 : 0;
    var i = IS_RIGHT ? -1 : 1;
    if (argumentsLength < 2) while (true) {
      if (index in self) {
        memo = self[index];
        index += i;
        break;
      }
      index += i;
      if (IS_RIGHT ? index < 0 : length <= index) {
        throw TypeError('Reduce of empty array with no initial value');
      }
    }
    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {
      memo = callbackfn(memo, self[index], index, O);
    }
    return memo;
  };
};

module.exports = {
  // `Array.prototype.reduce` method
  // https://tc39.es/ecma262/#sec-array.prototype.reduce
  left: createMethod(false),
  // `Array.prototype.reduceRight` method
  // https://tc39.es/ecma262/#sec-array.prototype.reduceright
  right: createMethod(true)
};


/***/ }),
/* 348 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/map.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/map */ 349);

module.exports = parent;


/***/ }),
/* 349 */
/*!******************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/map.js ***!
  \******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var map = __webpack_require__(/*! ../array/virtual/map */ 350);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.map;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.map) ? map : own;
};


/***/ }),
/* 350 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/map.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.map */ 351);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').map;


/***/ }),
/* 351 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.map.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var $map = __webpack_require__(/*! ../internals/array-iteration */ 172).map;
var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 174);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);

var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');
// FF49- issue
var USES_TO_LENGTH = arrayMethodUsesToLength('map');

// `Array.prototype.map` method
// https://tc39.es/ecma262/#sec-array.prototype.map
// with adding support of @@species
$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {
  map: function map(callbackfn /* , thisArg */) {
    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  }
});


/***/ }),
/* 352 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js/internals/array-species-create.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 49);
var isArray = __webpack_require__(/*! ../internals/is-array */ 353);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var SPECIES = wellKnownSymbol('species');

// `ArraySpeciesCreate` abstract operation
// https://tc39.es/ecma262/#sec-arrayspeciescreate
module.exports = function (originalArray, length) {
  var C;
  if (isArray(originalArray)) {
    C = originalArray.constructor;
    // cross-realm fallback
    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
    else if (isObject(C)) {
      C = C[SPECIES];
      if (C === null) C = undefined;
    }
  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
};


/***/ }),
/* 353 */
/*!****************************************************!*\
  !*** ./node_modules/core-js/internals/is-array.js ***!
  \****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(/*! ../internals/classof-raw */ 74);

// `IsArray` abstract operation
// https://tc39.es/ecma262/#sec-isarray
// eslint-disable-next-line es/no-array-isarray -- safe
module.exports = Array.isArray || function isArray(arg) {
  return classof(arg) == 'Array';
};


/***/ }),
/* 354 */
/*!****************************************************************************!*\
  !*** ./node_modules/core-js/internals/array-method-has-species-support.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 37);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 156);

var SPECIES = wellKnownSymbol('species');

module.exports = function (METHOD_NAME) {
  // We can't use this feature detection in V8 since it causes
  // deoptimization and serious performance degradation
  // https://github.com/zloirock/core-js/issues/677
  return V8_VERSION >= 51 || !fails(function () {
    var array = [];
    var constructor = array.constructor = {};
    constructor[SPECIES] = function () {
      return { foo: 1 };
    };
    return array[METHOD_NAME](Boolean).foo !== 1;
  });
};


/***/ }),
/* 355 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/array-for-each.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $forEach = __webpack_require__(/*! ../internals/array-iteration */ 290).forEach;
var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 284);

var STRICT_METHOD = arrayMethodIsStrict('forEach');

// `Array.prototype.forEach` method implementation
// https://tc39.es/ecma262/#sec-array.prototype.foreach
module.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {
  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
// eslint-disable-next-line es/no-array-prototype-foreach -- safe
} : [].forEach;


/***/ }),
/* 356 */
/*!******************************************************!*\
  !*** ./node_modules/core-js/internals/same-value.js ***!
  \******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// `SameValue` abstract operation
// https://tc39.es/ecma262/#sec-samevalue
// eslint-disable-next-line es/no-object-is -- safe
module.exports = Object.is || function is(x, y) {
  // eslint-disable-next-line no-self-compare -- NaN check
  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
};


/***/ }),
/* 357 */
/*!**************************************!*\
  !*** ./dev/Html/PreviewMessage.html ***!
  \**************************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = ("<html>\n<head>\n\t<meta charset=\"utf-8\" />\n\t<meta name=\"viewport\" content=\"user-scalable=no\" />\n\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n\t<meta name=\"robots\" content=\"noindex, nofollow, noodp\" />\n\t<title>{{title}}</title>\n\t<style>\nhtml, body {\n\tbackground-color: #fff;\n\tfont-size: 13px;\n\tfont-family: arial, sans-serif;\n\tmargin: 0;\n\tpadding: 0;\n}\n\na {color: blue; text-decoration: underline}\na:visited {color: #609}\na:active {color: red}\nblockquote {border-left: 2px solid black; margin: 0; padding: 0px 10px}\n\npre {\n\tmargin: 0px;\n\tpadding: 0px;\n\tfont-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\n\tbackground: #fff;\n\tborder: none;\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n\tword-break: break-all;\n}\n\n.body-wrp {\n\tpadding: 10px;\n}\n\n.body-wrp.html pre {\n\tfont-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n\tword-break: normal;\n}\n\n.body-wrp.plain {\n\tpadding: 15px;\n\twhite-space: pre-wrap;\n\tfont-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\n}\n\n.body-wrp.plain pre {\n\tmargin: 0px;\n\tpadding: 0px;\n\tbackground: #fff;\n\tborder: none;\n\tfont-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n\tword-break: normal;\n}\n\n.body-wrp.plain blockquote {\n\tborder-left: 2px solid blue;\n\tcolor: blue;\n}\n\n.body-wrp.plain blockquote blockquote {\n\tborder-left: 2px solid green;\n\tcolor: green;\n}\n\n.body-wrp.plain blockquote blockquote blockquote {\n\tborder-left: 2px solid red;\n\tcolor: red;\n}\n.rl-preview-subject {\n\tfont-size: 16px;\n\tfont-weight: bold;\n\tpadding: 15px;\n}\n.rl-preview-creds-from, .rl-preview-creds-to, .rl-preview-creds-cc {\n\tfont-size: 12px;\n\tpadding: 5px 15px;\n}\n.rl-preview-date {\n\tfloat: right;\n\tfont-size: 12px;\n\tpadding: 10px 15px;\n}\n.rl-preview-section {\n\tpadding: 0;\n\tmargin: 0;\n\tborder-bottom: 1px solid #ccc;\n}\n.rl-preview-hide {\n\tdisplay: none;\n}\n\t</style>\n</head>\n<body>\n\t<div class=\"rl-preview-section\">\n\t\t<div class=\"rl-preview-subject\">{{subject}}</div>\n\t</div>\n\t<div class=\"rl-preview-section\">\n\t\t<div class=\"rl-preview-date\">{{date}}</div>\n\t\t<div class=\"rl-preview-creds-from\">{{fromCreds}}</div>\n\t\t<div class=\"rl-preview-creds-to\">{{toLabel}}: {{toCreds}}</div>\n\t\t<div class=\"rl-preview-creds-cc {{ccClass}}\">{{ccLabel}}: {{ccCreds}}</div>\n\t</div>\n\t<div class=\"body-wrp {{bodyClass}}\">{{html}}</div>\n</body>\n</html>");

/***/ }),
/* 358 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/filter.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/filter */ 359);

module.exports = parent;


/***/ }),
/* 359 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/filter.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var filter = __webpack_require__(/*! ../array/virtual/filter */ 360);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.filter;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.filter) ? filter : own;
};


/***/ }),
/* 360 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/filter.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.filter */ 361);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').filter;


/***/ }),
/* 361 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.filter.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var $filter = __webpack_require__(/*! ../internals/array-iteration */ 172).filter;
var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 174);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);

var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');
// Edge 14- issue
var USES_TO_LENGTH = arrayMethodUsesToLength('filter');

// `Array.prototype.filter` method
// https://tc39.es/ecma262/#sec-array.prototype.filter
// with adding support of @@species
$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {
  filter: function filter(callbackfn /* , thisArg */) {
    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  }
});


/***/ }),
/* 362 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/features/object/create.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/object/create */ 363);

module.exports = parent;


/***/ }),
/* 363 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/es/object/create.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.object.create */ 364);
var path = __webpack_require__(/*! ../../internals/path */ 51);

var Object = path.Object;

module.exports = function create(P, D) {
  return Object.create(P, D);
};


/***/ }),
/* 364 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.create.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var create = __webpack_require__(/*! ../internals/object-create */ 160);

// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {
  create: create
});


/***/ }),
/* 365 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js-pure/features/object/set-prototype-of.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/object/set-prototype-of */ 366);

module.exports = parent;


/***/ }),
/* 366 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/es/object/set-prototype-of.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.object.set-prototype-of */ 367);
var path = __webpack_require__(/*! ../../internals/path */ 51);

module.exports = path.Object.setPrototypeOf;


/***/ }),
/* 367 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.set-prototype-of.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 159);

// `Object.setPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.setprototypeof
$({ target: 'Object', stat: true }, {
  setPrototypeOf: setPrototypeOf
});


/***/ }),
/* 368 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/features/instance/for-each.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../stable/instance/for-each */ 369);

module.exports = parent;


/***/ }),
/* 369 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/for-each.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 161);
var forEach = __webpack_require__(/*! ../array/virtual/for-each */ 370);
var classof = __webpack_require__(/*! ../../internals/classof */ 92);
var ArrayPrototype = Array.prototype;

var DOMIterables = {
  DOMTokenList: true,
  NodeList: true
};

module.exports = function (it) {
  var own = it.forEach;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.forEach)
    // eslint-disable-next-line no-prototype-builtins
    || DOMIterables.hasOwnProperty(classof(it)) ? forEach : own;
};


/***/ }),
/* 370 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/array/virtual/for-each.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../../es/array/virtual/for-each */ 371);

module.exports = parent;


/***/ }),
/* 371 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/for-each.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.for-each */ 372);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').forEach;


/***/ }),
/* 372 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.for-each.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var forEach = __webpack_require__(/*! ../internals/array-for-each */ 373);

// `Array.prototype.forEach` method
// https://tc39.es/ecma262/#sec-array.prototype.foreach
$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {
  forEach: forEach
});


/***/ }),
/* 373 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-for-each.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $forEach = __webpack_require__(/*! ../internals/array-iteration */ 172).forEach;
var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 289);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);

var STRICT_METHOD = arrayMethodIsStrict('forEach');
var USES_TO_LENGTH = arrayMethodUsesToLength('forEach');

// `Array.prototype.forEach` method implementation
// https://tc39.es/ecma262/#sec-array.prototype.foreach
module.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {
  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
} : [].forEach;


/***/ }),
/* 374 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/features/object/keys.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/object/keys */ 375);

module.exports = parent;


/***/ }),
/* 375 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js-pure/es/object/keys.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.object.keys */ 376);
var path = __webpack_require__(/*! ../../internals/path */ 51);

module.exports = path.Object.keys;


/***/ }),
/* 376 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.keys.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var toObject = __webpack_require__(/*! ../internals/to-object */ 117);
var nativeKeys = __webpack_require__(/*! ../internals/object-keys */ 220);
var fails = __webpack_require__(/*! ../internals/fails */ 43);

var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });

// `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {
  keys: function keys(it) {
    return nativeKeys(toObject(it));
  }
});


/***/ }),
/* 377 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/features/instance/reduce.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/reduce */ 288);

module.exports = parent;


/***/ }),
/* 378 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/features/instance/reverse.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/reverse */ 379);

module.exports = parent;


/***/ }),
/* 379 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/reverse.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var reverse = __webpack_require__(/*! ../array/virtual/reverse */ 380);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.reverse;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.reverse) ? reverse : own;
};


/***/ }),
/* 380 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/reverse.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.reverse */ 381);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').reverse;


/***/ }),
/* 381 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.reverse.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var isArray = __webpack_require__(/*! ../internals/is-array */ 173);

var nativeReverse = [].reverse;
var test = [1, 2];

// `Array.prototype.reverse` method
// https://tc39.es/ecma262/#sec-array.prototype.reverse
// fix for Safari 12.0 bug
// https://bugs.webkit.org/show_bug.cgi?id=188794
$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {
  reverse: function reverse() {
    // eslint-disable-next-line no-self-assign
    if (isArray(this)) this.length = this.length;
    return nativeReverse.call(this);
  }
});


/***/ }),
/* 382 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/features/instance/slice.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/slice */ 383);

module.exports = parent;


/***/ }),
/* 383 */
/*!********************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/slice.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var slice = __webpack_require__(/*! ../array/virtual/slice */ 384);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.slice;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.slice) ? slice : own;
};


/***/ }),
/* 384 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/slice.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.slice */ 385);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').slice;


/***/ }),
/* 385 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.slice.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var isArray = __webpack_require__(/*! ../internals/is-array */ 173);
var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 221);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var createProperty = __webpack_require__(/*! ../internals/create-property */ 287);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 174);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);

var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');
var USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });

var SPECIES = wellKnownSymbol('species');
var nativeSlice = [].slice;
var max = Math.max;

// `Array.prototype.slice` method
// https://tc39.es/ecma262/#sec-array.prototype.slice
// fallback for not array-like ES3 strings and DOM objects
$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {
  slice: function slice(start, end) {
    var O = toIndexedObject(this);
    var length = toLength(O.length);
    var k = toAbsoluteIndex(start, length);
    var fin = toAbsoluteIndex(end === undefined ? length : end, length);
    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
    var Constructor, result, n;
    if (isArray(O)) {
      Constructor = O.constructor;
      // cross-realm fallback
      if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {
        Constructor = undefined;
      } else if (isObject(Constructor)) {
        Constructor = Constructor[SPECIES];
        if (Constructor === null) Constructor = undefined;
      }
      if (Constructor === Array || Constructor === undefined) {
        return nativeSlice.call(O, k, fin);
      }
    }
    result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));
    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
    result.length = n;
    return result;
  }
});


/***/ }),
/* 386 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js-pure/features/object/define-property.js ***!
  \**********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/object/define-property */ 387);

module.exports = parent;


/***/ }),
/* 387 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/es/object/define-property.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.object.define-property */ 388);
var path = __webpack_require__(/*! ../../internals/path */ 51);

var Object = path.Object;

var defineProperty = module.exports = function defineProperty(it, key, desc) {
  return Object.defineProperty(it, key, desc);
};

if (Object.defineProperty.sham) defineProperty.sham = true;


/***/ }),
/* 388 */
/*!************************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.define-property.js ***!
  \************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var objectDefinePropertyModile = __webpack_require__(/*! ../internals/object-define-property */ 81);

// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {
  defineProperty: objectDefinePropertyModile.f
});


/***/ }),
/* 389 */
/*!********************************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/object/get-own-property-descriptor.js ***!
  \********************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/object/get-own-property-descriptor */ 390);

module.exports = parent;


/***/ }),
/* 390 */
/*!****************************************************************************!*\
  !*** ./node_modules/core-js-pure/es/object/get-own-property-descriptor.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.object.get-own-property-descriptor */ 391);
var path = __webpack_require__(/*! ../../internals/path */ 51);

var Object = path.Object;

var getOwnPropertyDescriptor = module.exports = function getOwnPropertyDescriptor(it, key) {
  return Object.getOwnPropertyDescriptor(it, key);
};

if (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true;


/***/ }),
/* 391 */
/*!************************************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js ***!
  \************************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var nativeGetOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 157).f;
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);

var FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });
var FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;

// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {
  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {
    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);
  }
});


/***/ }),
/* 392 */,
/* 393 */,
/* 394 */
/*!**************************************!*\
  !*** ./dev/Component/SaveTrigger.js ***!
  \**************************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* 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 _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__ = __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_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Component/Abstract */ 32);







var SaveTriggerComponent = /*#__PURE__*/function (_AbstractComponent) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(SaveTriggerComponent, _AbstractComponent);

  /**
   * @param {Object} params
   */
  function SaveTriggerComponent(params) {
    var _this;

    _this = _AbstractComponent.call(this) || this;
    _this.element = params.element || null;
    _this.value = params.value && params.value.subscribe ? params.value : null;

    if (_this.element) {
      if (_this.value) {
        _this.element.css('display', 'inline-block');

        if (params.verticalAlign) {
          _this.element.css('vertical-align', params.verticalAlign);
        }

        _this.setState(_this.value());

        _this.disposable.push(_this.value.subscribe(_this.setState, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this)));
      } else {
        _this.element.hide();
      }
    }

    return _this;
  }

  var _proto = SaveTriggerComponent.prototype;

  _proto.setState = function setState(value) {
    var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8;

    switch (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(value)) {
      case Common_Enums__WEBPACK_IMPORTED_MODULE_4__["SaveSettingsStep"].TrueResult:
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context2 = this.element).call(_context2, '.animated,.error').hide().removeClass('visible').end()).call(_context, '.success').show().addClass('visible');

        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_4__["SaveSettingsStep"].FalseResult:
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context4 = this.element).call(_context4, '.animated,.success').hide().removeClass('visible').end()).call(_context3, '.error').show().addClass('visible');

        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_4__["SaveSettingsStep"].Animate:
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context6 = this.element).call(_context6, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible');

        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_4__["SaveSettingsStep"].Idle:
      default:
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context7 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context8 = this.element).call(_context8, '.animated').hide().end()).call(_context7, '.error,.success').removeClass('visible');

        break;
    }
  };

  return SaveTriggerComponent;
}(Component_Abstract__WEBPACK_IMPORTED_MODULE_5__[/* AbstractComponent */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_5__[/* componentExportHelper */ "b"])(SaveTriggerComponent, 'SaveTriggerComponent'));

/***/ }),
/* 395 */
/*!********************************!*\
  !*** ./dev/Component/Input.js ***!
  \********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* 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 Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 87);




var InputComponent = /*#__PURE__*/function (_AbstractInput) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(InputComponent, _AbstractInput);

  function InputComponent() {
    return _AbstractInput.apply(this, arguments) || this;
  }

  return InputComponent;
}(Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__[/* AbstractInput */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(InputComponent, 'InputComponent'));

/***/ }),
/* 396 */
/*!*********************************!*\
  !*** ./dev/Component/Select.js ***!
  \*********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* 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 Common_Translator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Component/AbstractInput */ 87);






var SelectComponent = /*#__PURE__*/function (_AbstractInput) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SelectComponent, _AbstractInput);

  /**
   * @param {Object} params
   */
  function SelectComponent(params) {
    var _this;

    _this = _AbstractInput.call(this, params) || this;
    _this.options = params.options || '';
    _this.optionsText = params.optionsText || null;
    _this.optionsValue = params.optionsValue || null;
    _this.optionsCaption = params.optionsCaption || null;

    if (_this.optionsCaption) {
      _this.optionsCaption = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_1__["i18n"])(_this.optionsCaption);
    }

    _this.defautOptionsAfterRender = Common_Utils__WEBPACK_IMPORTED_MODULE_2__["defautOptionsAfterRender"];
    return _this;
  }

  return SelectComponent;
}(Component_AbstractInput__WEBPACK_IMPORTED_MODULE_4__[/* AbstractInput */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_3__[/* componentExportHelper */ "b"])(SelectComponent, 'SelectComponent'));

/***/ }),
/* 397 */
/*!********************************!*\
  !*** ./dev/Component/Radio.js ***!
  \********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* 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 Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractRadio__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractRadio */ 307);




var RadioComponent = /*#__PURE__*/function (_AbstractRadio) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(RadioComponent, _AbstractRadio);

  function RadioComponent() {
    return _AbstractRadio.apply(this, arguments) || this;
  }

  return RadioComponent;
}(Component_AbstractRadio__WEBPACK_IMPORTED_MODULE_2__[/* AbstractRadio */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(RadioComponent, 'RadioComponent'));

/***/ }),
/* 398 */
/*!***********************************!*\
  !*** ./dev/Component/TextArea.js ***!
  \***********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* 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 Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/AbstractInput */ 87);




var DEFAULT_ROWS = 5;

var TextAreaComponent = /*#__PURE__*/function (_AbstractInput) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(TextAreaComponent, _AbstractInput);

  /**
   * @param {Object} params
   */
  function TextAreaComponent(params) {
    var _this;

    _this = _AbstractInput.call(this, params) || this;
    _this.rows = params.rows || DEFAULT_ROWS;
    _this.spellcheck = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(params.spellcheck) ? false : !!params.spellcheck;
    return _this;
  }

  return TextAreaComponent;
}(Component_AbstractInput__WEBPACK_IMPORTED_MODULE_3__[/* AbstractInput */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_2__[/* componentExportHelper */ "b"])(TextAreaComponent, 'TextAreaComponent'));

/***/ }),
/* 399 */
/*!*******************************!*\
  !*** ./dev/Component/Date.js ***!
  \*******************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* 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 Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 87);




var DateComponent = /*#__PURE__*/function (_AbstractInput) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(DateComponent, _AbstractInput);

  function DateComponent() {
    return _AbstractInput.apply(this, arguments) || this;
  }

  return DateComponent;
}(Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__[/* AbstractInput */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(DateComponent, 'DateComponent'));

/***/ }),
/* 400 */
/*!*********************************!*\
  !*** ./dev/Component/Script.js ***!
  \*********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* 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 core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Component/Abstract */ 32);






var ScriptComponent = /*#__PURE__*/function (_AbstractComponent) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(ScriptComponent, _AbstractComponent);

  /**
   * @param {Object} params
   */
  function ScriptComponent(params) {
    var _this;

    _this = _AbstractComponent.call(this) || this;

    if (params.component && params.component.templateNodes && params.element && params.element[0] && params.element[0].outerHTML) {
      var script = params.element[0].outerHTML;
      script = !script ? '' : script.replace(/<x-script/i, '<script').replace(/<b><\/b><\/x-script>/i, '</script>');

      if (script) {
        params.element.text('');
        params.element.replaceWith($__WEBPACK_IMPORTED_MODULE_3___default()(script).text(params.component.templateNodes[0] && params.component.templateNodes[0].nodeValue ? params.component.templateNodes[0].nodeValue : ''));
      } else {
        params.element.remove();
      }
    }

    return _this;
  }

  return ScriptComponent;
}(Component_Abstract__WEBPACK_IMPORTED_MODULE_4__[/* AbstractComponent */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_4__[/* componentExportHelper */ "b"])(ScriptComponent, 'ScriptComponent'));

/***/ }),
/* 401 */
/*!**************************************************!*\
  !*** ./dev/Component/MaterialDesign/Checkbox.js ***!
  \**************************************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* 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 ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* 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);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Component/AbstractCheckbox */ 177);







var CheckboxMaterialDesignComponent = /*#__PURE__*/function (_AbstractCheckbox) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(CheckboxMaterialDesignComponent, _AbstractCheckbox);

  /**
   * @param {Object} params
   */
  function CheckboxMaterialDesignComponent(params) {
    var _this;

    _this = _AbstractCheckbox.call(this, params) || this;
    _this.animationBox = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false).extend({
      falseTimeout: 200
    });
    _this.animationCheckmark = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false).extend({
      falseTimeout: 200
    });
    _this.animationBoxSetTrue = ___WEBPACK_IMPORTED_MODULE_2___default.a.bind(_this.animationBoxSetTrue, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.animationCheckmarkSetTrue = ___WEBPACK_IMPORTED_MODULE_2___default.a.bind(_this.animationCheckmarkSetTrue, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));

    _this.disposable.push(_this.value.subscribe(function (value) {
      _this.triggerAnimation(value);
    }, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this)));

    return _this;
  }

  var _proto = CheckboxMaterialDesignComponent.prototype;

  _proto.animationBoxSetTrue = function animationBoxSetTrue() {
    this.animationBox(true);
  };

  _proto.animationCheckmarkSetTrue = function animationCheckmarkSetTrue() {
    this.animationCheckmark(true);
  };

  _proto.triggerAnimation = function triggerAnimation(box) {
    if (box) {
      this.animationBoxSetTrue();

      ___WEBPACK_IMPORTED_MODULE_2___default.a.delay(this.animationCheckmarkSetTrue, 200);
    } else {
      this.animationCheckmarkSetTrue();

      ___WEBPACK_IMPORTED_MODULE_2___default.a.delay(this.animationBoxSetTrue, 200);
    }
  };

  return CheckboxMaterialDesignComponent;
}(Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_5__[/* AbstractCheckbox */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_4__[/* componentExportHelper */ "b"])(CheckboxMaterialDesignComponent, 'CheckboxMaterialDesignComponent'));

/***/ }),
/* 402 */,
/* 403 */
/*!**************************!*\
  !*** ./dev/App/Admin.js ***!
  \**************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* 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 _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* 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__);
/* 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 ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! progressJs */ 101);
/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(progressJs__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/Admin/App */ 110);
/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/Admin/Capa */ 88);
/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/Admin/Domain */ 164);
/* harmony import */ var Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/Admin/Plugin */ 125);
/* harmony import */ var Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/Admin/Package */ 94);
/* harmony import */ var Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/Admin/Core */ 40);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Screen_Admin_Settings__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Screen/Admin/Settings */ 469);
/* harmony import */ var Screen_Admin_Login__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Screen/Admin/Login */ 482);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var App_Abstract__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! App/Abstract */ 305);






















var AdminApp = /*#__PURE__*/function (_AbstractApp) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AdminApp, _AbstractApp);

  function AdminApp() {
    return _AbstractApp.call(this, Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"]) || this;
  }

  var _proto = AdminApp.prototype;

  _proto.remote = function remote() {
    return Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"];
  };

  _proto.reloadDomainList = function reloadDomainList() {
    Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].domains.loading(true);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].domainList(function (result, data) {
      Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].domains.loading(false);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Success === result && data && data.Result) {
        Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].domains(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, data.Result, function (_ref, name) {
          var enabled = _ref[0],
              alias = _ref[1];
          return {
            name: name,
            disabled: ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(!enabled),
            alias: alias,
            deleteAccess: ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false)
          };
        }));
      }
    });
  };

  _proto.reloadPluginList = function reloadPluginList() {
    Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].plugins.loading(true);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].pluginList(function (result, data) {
      Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].plugins.loading(false);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Success === result && data && data.Result) {
        Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].plugins(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, data.Result, function (item) {
          return {
            name: item.Name,
            disabled: ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(!item.Enabled),
            configured: ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(!!item.Configured)
          };
        }));
      }
    });
  };

  _proto.reloadPackagesList = function reloadPackagesList() {
    Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].packages.loading(true);
    Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].packagesReal(true);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].packagesList(function (result, data) {
      Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].packages.loading(false);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Success === result && data && data.Result) {
        Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].packagesReal(!!data.Result.Real);
        Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].packagesMainUpdatable(!!data.Result.MainUpdatable);
        var list = [];
        var loading = {};

        ___WEBPACK_IMPORTED_MODULE_3___default.a.each(Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].packages(), function (item) {
          if (item && item.loading()) {
            loading[item.file] = item;
          }
        });

        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isArray"])(data.Result.List)) {
          list = ___WEBPACK_IMPORTED_MODULE_3___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, data.Result.List, function (item) {
            if (item) {
              item.loading = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isUnd"])(loading[item.file]));
              return 'core' === item.type && !item.canBeInstalled ? null : item;
            }

            return null;
          }));
        }

        Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].packages(list);
      } else {
        Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].packagesReal(false);
      }
    });
  };

  _proto.updateCoreData = function updateCoreData() {
    Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreUpdating(true);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].updateCoreData(function (result, data) {
      Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreUpdating(false);
      Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreVersion('');
      Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreRemoteVersion('');
      Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreRemoteRelease('');
      Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreVersionCompare(-2);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Success === result && data && data.Result) {
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreReal(true);
        window__WEBPACK_IMPORTED_MODULE_2___default.a.location.reload();
      } else {
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreReal(false);
      }
    });
  };

  _proto.reloadCoreData = function reloadCoreData() {
    Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreChecking(true);
    Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreReal(true);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].coreData(function (result, data) {
      Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreChecking(false);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Success === result && data && data.Result) {
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreReal(!!data.Result.Real);
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreChannel(data.Result.Channel || 'stable');
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreType(data.Result.Type || 'stable');
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreUpdatable(!!data.Result.Updatable);
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreAccess(!!data.Result.Access);
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreWarning(!!data.Result.Warning);
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreVersion(data.Result.Version || '');
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreRemoteVersion(data.Result.RemoteVersion || '');
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreRemoteRelease(data.Result.RemoteRelease || '');
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreVersionCompare(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["pInt"])(data.Result.VersionCompare));
      } else {
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreReal(false);
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreChannel('stable');
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreType('stable');
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreWarning(false);
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreVersion('');
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreRemoteVersion('');
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreRemoteRelease('');
        Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].coreVersionCompare(-2);
      }
    });
  };

  _proto.bootend = function bootend(bootendCallback) {
    if (bootendCallback === void 0) {
      bootendCallback = null;
    }

    if (progressJs__WEBPACK_IMPORTED_MODULE_5___default.a) {
      progressJs__WEBPACK_IMPORTED_MODULE_5___default.a.end();
    }

    if (bootendCallback) {
      bootendCallback();
    }
  };

  _proto.bootstart = function bootstart() {
    _AbstractApp.prototype.bootstart.call(this);

    Stores_Admin_App__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].populate();
    Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].populate();
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["hideLoading"])();

    if (!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["appSettingsGet"]('allowAdminPanel')) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["routeOff"])();
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_6__[/* root */ "w"])(), true);
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["routeOff"])();

      ___WEBPACK_IMPORTED_MODULE_3___default.a.defer(function () {
        window__WEBPACK_IMPORTED_MODULE_2___default.a.location.href = '/';
      });
    } else {
      if (Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('Auth')) {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["startScreens"])([Screen_Admin_Settings__WEBPACK_IMPORTED_MODULE_17__[/* SettingsAdminScreen */ "a"]]);
      } else {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["startScreens"])([Screen_Admin_Login__WEBPACK_IMPORTED_MODULE_18__[/* LoginAdminScreen */ "a"]]);
      }
    }

    this.bootend();
  };

  return AdminApp;
}(App_Abstract__WEBPACK_IMPORTED_MODULE_20__[/* AbstractApp */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (new AdminApp());

/***/ }),
/* 404 */,
/* 405 */,
/* 406 */,
/* 407 */,
/* 408 */,
/* 409 */,
/* 410 */,
/* 411 */,
/* 412 */,
/* 413 */,
/* 414 */,
/* 415 */,
/* 416 */,
/* 417 */,
/* 418 */,
/* 419 */,
/* 420 */,
/* 421 */,
/* 422 */,
/* 423 */,
/* 424 */,
/* 425 */,
/* 426 */,
/* 427 */,
/* 428 */,
/* 429 */,
/* 430 */,
/* 431 */,
/* 432 */
/*!**********************************!*\
  !*** ./dev/View/Popup/Domain.js ***!
  \**********************************/
/*! exports provided: DomainPopupView, 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__, "DomainPopupView", function() { return DomainPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DomainPopupView; });
/* 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 _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/Admin/Capa */ 88);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Helper/Apps/Admin */ 68);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class, _class2;

















var DomainPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__["popup"])({
  name: 'View/Popup/Domain',
  templateID: 'PopupsDomain'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__["command"])(function (self) {
  return self.canBeSaved();
}), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__["command"])(function (self) {
  return self.canBeTested();
}), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__["command"])(), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__["command"])(), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_16__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(DomainPopupView, _AbstractViewNext);

  function DomainPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.edit = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.saving = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.savingError = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.page = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('main');
    _this.sieveSettings = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.testing = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.testingDone = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.testingImapError = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.testingSieveError = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.testingSmtpError = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.testingImapErrorDesc = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.testingSieveErrorDesc = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.testingSmtpErrorDesc = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');

    _this.testingImapError.subscribe(function (value) {
      if (!value) {
        _this.testingImapErrorDesc('');
      }
    });

    _this.testingSieveError.subscribe(function (value) {
      if (!value) {
        _this.testingSieveErrorDesc('');
      }
    });

    _this.testingSmtpError.subscribe(function (value) {
      if (!value) {
        _this.testingSmtpErrorDesc('');
      }
    });

    _this.imapServerFocus = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.sieveServerFocus = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.smtpServerFocus = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.name = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.name.focused = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.imapServer = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.imapPort = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('' + Common_Consts__WEBPACK_IMPORTED_MODULE_9__[/* IMAP_DEFAULT_PORT */ "h"]);
    _this.imapSecure = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["ServerSecure"].None);
    _this.imapShortLogin = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.useSieve = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.sieveAllowRaw = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.sieveServer = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.sievePort = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('' + Common_Consts__WEBPACK_IMPORTED_MODULE_9__[/* SIEVE_DEFAULT_PORT */ "o"]);
    _this.sieveSecure = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["ServerSecure"].None);
    _this.smtpServer = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.smtpPort = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('' + Common_Consts__WEBPACK_IMPORTED_MODULE_9__[/* SMTP_DEFAULT_PORT */ "p"]);
    _this.smtpSecure = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["ServerSecure"].None);
    _this.smtpShortLogin = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.smtpAuth = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(true);
    _this.smtpPhpMail = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.whiteList = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.aliasName = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.enableSmartPorts = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.allowSieve = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].filters() && Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].sieve();
    });
    _this.headerText = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      var name = _this.name(),
          aliasName = _this.aliasName();

      var result = '';

      if (_this.edit()) {
        result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_DOMAIN/TITLE_EDIT_DOMAIN', {
          'NAME': name
        });

        if (aliasName) {
          result += ' ← ' + aliasName;
        }
      } else {
        result = '' === name ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_DOMAIN/TITLE_ADD_DOMAIN') : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_DOMAIN/TITLE_ADD_DOMAIN_WITH_NAME', {
          'NAME': name
        });
      }

      return result;
    });
    _this.domainDesc = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      var name = _this.name();

      return !_this.edit() && name ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_DOMAIN/NEW_DOMAIN_DESC', {
        'NAME': '*@' + name
      }) : '';
    });
    _this.domainIsComputed = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      var usePhpMail = _this.smtpPhpMail(),
          allowSieve = _this.allowSieve(),
          useSieve = _this.useSieve();

      return '' !== _this.name() && '' !== _this.imapServer() && '' !== _this.imapPort() && (allowSieve && useSieve ? '' !== _this.sieveServer() && '' !== _this.sievePort() : true) && ('' !== _this.smtpServer() && '' !== _this.smtpPort() || usePhpMail);
    });
    _this.canBeTested = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return !_this.testing() && _this.domainIsComputed();
    });
    _this.canBeSaved = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return !_this.saving() && _this.domainIsComputed();
    });

    _this.page.subscribe(function () {
      _this.sieveSettings(false);
    }); // smart form improvements


    _this.imapServerFocus.subscribe(function (value) {
      if (value && '' !== _this.name() && '' === _this.imapServer()) {
        _this.imapServer(_this.name().replace(/[.]?[*][.]?/g, ''));
      }
    });

    _this.sieveServerFocus.subscribe(function (value) {
      if (value && '' !== _this.imapServer() && '' === _this.sieveServer()) {
        _this.sieveServer(_this.imapServer());
      }
    });

    _this.smtpServerFocus.subscribe(function (value) {
      if (value && '' !== _this.imapServer() && '' === _this.smtpServer()) {
        _this.smtpServer(_this.imapServer().replace(/imap/gi, 'smtp'));
      }
    });

    _this.imapSecure.subscribe(function (value) {
      if (_this.enableSmartPorts()) {
        var port = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(_this.imapPort());

        switch (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pString"])(value)) {
          case '0':
          case '2':
            if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].ImapSsl === port) {
              _this.imapPort(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pString"])(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].Imap));
            }

            break;

          case '1':
            if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].Imap === port) {
              _this.imapPort(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pString"])(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].ImapSsl));
            }

            break;
          // no default
        }
      }
    });

    _this.smtpSecure.subscribe(function (value) {
      if (_this.enableSmartPorts()) {
        var port = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(_this.smtpPort());

        switch (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pString"])(value)) {
          case '0':
            if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].SmtpSsl === port || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].SmtpStartTls === port) {
              _this.smtpPort(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pString"])(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].Smtp));
            }

            break;

          case '1':
            if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].Smtp === port || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].SmtpStartTls === port) {
              _this.smtpPort(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pString"])(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].SmtpSsl));
            }

            break;

          case '2':
            if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].Smtp === port || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].SmtpSsl === port) {
              _this.smtpPort(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pString"])(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Ports"].SmtpStartTls));
            }

            break;
          // no default
        }
      }
    });

    return _this;
  }

  var _proto = DomainPopupView.prototype;

  _proto.createOrAddCommand = function createOrAddCommand() {
    this.saving(true);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].createOrUpdateDomain(___WEBPACK_IMPORTED_MODULE_6___default.a.bind(this.onDomainCreateOrSaveResponse, this), !this.edit(), this.name(), this.imapServer(), Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(this.imapPort()), this.imapSecure(), this.imapShortLogin(), this.useSieve(), this.sieveAllowRaw(), this.sieveServer(), Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(this.sievePort()), this.sieveSecure(), this.smtpServer(), Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(this.smtpPort()), this.smtpSecure(), this.smtpShortLogin(), this.smtpAuth(), this.smtpPhpMail(), this.whiteList());
  };

  _proto.testConnectionCommand = function testConnectionCommand() {
    this.page('main');
    this.testingDone(false);
    this.testingImapError(false);
    this.testingSieveError(false);
    this.testingSmtpError(false);
    this.testing(true);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].testConnectionForDomain(___WEBPACK_IMPORTED_MODULE_6___default.a.bind(this.onTestConnectionResponse, this), this.name(), this.imapServer(), Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(this.imapPort()), this.imapSecure(), this.useSieve(), this.sieveServer(), Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(this.sievePort()), this.sieveSecure(), this.smtpServer(), Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(this.smtpPort()), this.smtpSecure(), this.smtpAuth(), this.smtpPhpMail());
  };

  _proto.whiteListCommand = function whiteListCommand() {
    this.page('white-list');
  };

  _proto.backCommand = function backCommand() {
    this.page('main');
  };

  _proto.sieveCommand = function sieveCommand() {
    this.sieveSettings(!this.sieveSettings());
    this.clearTesting();
  };

  _proto.onTestConnectionResponse = function onTestConnectionResponse(sResult, oData) {
    this.testing(false);

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["StorageResultType"].Success === sResult && oData.Result) {
      var bImap = false,
          bSieve = false;
      this.testingDone(true);
      this.testingImapError(true !== oData.Result.Imap);
      this.testingSieveError(true !== oData.Result.Sieve);
      this.testingSmtpError(true !== oData.Result.Smtp);

      if (this.testingImapError() && oData.Result.Imap) {
        bImap = true;
        this.testingImapErrorDesc('');
        this.testingImapErrorDesc(oData.Result.Imap);
      }

      if (this.testingSieveError() && oData.Result.Sieve) {
        bSieve = true;
        this.testingSieveErrorDesc('');
        this.testingSieveErrorDesc(oData.Result.Sieve);
      }

      if (this.testingSmtpError() && oData.Result.Smtp) {
        this.testingSmtpErrorDesc('');
        this.testingSmtpErrorDesc(oData.Result.Smtp);
      }

      if (this.sieveSettings()) {
        if (!bSieve && bImap) {
          this.sieveSettings(false);
        }
      } else if (bSieve && !bImap) {
        this.sieveSettings(true);
      }
    } else {
      this.testingImapError(true);
      this.testingSieveError(true);
      this.testingSmtpError(true);
      this.sieveSettings(false);
    }
  };

  _proto.onDomainCreateOrSaveResponse = function onDomainCreateOrSaveResponse(sResult, oData) {
    this.saving(false);

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["StorageResultType"].Success === sResult && oData) {
      if (oData.Result) {
        Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_15__[/* getApp */ "a"])().reloadDomainList();
        this.closeCommand();
      } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].DomainAlreadyExists === oData.ErrorCode) {
        this.savingError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('ERRORS/DOMAIN_ALREADY_EXISTS'));
      }
    } else {
      this.savingError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('ERRORS/UNKNOWN_ERROR'));
    }
  };

  _proto.clearTesting = function clearTesting() {
    this.testing(false);
    this.testingDone(false);
    this.testingImapError(false);
    this.testingSieveError(false);
    this.testingSmtpError(false);
  };

  _proto.onHide = function onHide() {
    this.page('main');
    this.sieveSettings(false);
  };

  _proto.onShow = function onShow(oDomain) {
    this.saving(false);
    this.page('main');
    this.sieveSettings(false);
    this.clearTesting();
    this.clearForm();

    if (oDomain) {
      this.enableSmartPorts(false);
      this.edit(true);
      this.name(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["trim"])(oDomain.Name));
      this.imapServer(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["trim"])(oDomain.IncHost));
      this.imapPort('' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(oDomain.IncPort));
      this.imapSecure(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["trim"])(oDomain.IncSecure));
      this.imapShortLogin(!!oDomain.IncShortLogin);
      this.useSieve(!!oDomain.UseSieve);
      this.sieveAllowRaw(!!oDomain.SieveAllowRaw);
      this.sieveServer(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["trim"])(oDomain.SieveHost));
      this.sievePort('' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(oDomain.SievePort));
      this.sieveSecure(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["trim"])(oDomain.SieveSecure));
      this.smtpServer(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["trim"])(oDomain.OutHost));
      this.smtpPort('' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["pInt"])(oDomain.OutPort));
      this.smtpSecure(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["trim"])(oDomain.OutSecure));
      this.smtpShortLogin(!!oDomain.OutShortLogin);
      this.smtpAuth(!!oDomain.OutAuth);
      this.smtpPhpMail(!!oDomain.OutUsePhpMail);
      this.whiteList(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["trim"])(oDomain.WhiteList));
      this.aliasName(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["trim"])(oDomain.AliasName));
      this.enableSmartPorts(true);
    }
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    if ('' === this.name() && !Common_Globals__WEBPACK_IMPORTED_MODULE_10__["bMobileDevice"]) {
      this.name.focused(true);
    }
  };

  _proto.clearForm = function clearForm() {
    this.edit(false);
    this.page('main');
    this.sieveSettings(false);
    this.enableSmartPorts(false);
    this.savingError('');
    this.name('');
    this.name.focused(false);
    this.imapServer('');
    this.imapPort('' + Common_Consts__WEBPACK_IMPORTED_MODULE_9__[/* IMAP_DEFAULT_PORT */ "h"]);
    this.imapSecure(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["ServerSecure"].None);
    this.imapShortLogin(false);
    this.useSieve(false);
    this.sieveAllowRaw(false);
    this.sieveServer('');
    this.sievePort('' + Common_Consts__WEBPACK_IMPORTED_MODULE_9__[/* SIEVE_DEFAULT_PORT */ "o"]);
    this.sieveSecure(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["ServerSecure"].None);
    this.smtpServer('');
    this.smtpPort('' + Common_Consts__WEBPACK_IMPORTED_MODULE_9__[/* SMTP_DEFAULT_PORT */ "p"]);
    this.smtpSecure(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["ServerSecure"].None);
    this.smtpShortLogin(false);
    this.smtpAuth(true);
    this.smtpPhpMail(false);
    this.whiteList('');
    this.aliasName('');
    this.enableSmartPorts(true);
  };

  return DomainPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_17__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "createOrAddCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "createOrAddCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "testConnectionCommand", [_dec3], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "testConnectionCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "whiteListCommand", [_dec4], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "whiteListCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "backCommand", [_dec5], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "backCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "sieveCommand", [_dec6], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "sieveCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 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 */
/*!**************************************!*\
  !*** ./dev/Screen/Admin/Settings.js ***!
  \**************************************/
/*! exports provided: SettingsAdminScreen, default */
/*! exports used: SettingsAdminScreen */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SettingsAdminScreen; });
/* unused harmony export default */
/* 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 Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Screen_AbstractSettings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Screen/AbstractSettings */ 304);
/* harmony import */ var Settings_Admin_General__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Settings/Admin/General */ 470);
/* harmony import */ var Settings_Admin_Domains__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Settings/Admin/Domains */ 471);
/* harmony import */ var Settings_Admin_Login__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Settings/Admin/Login */ 472);
/* harmony import */ var Settings_Admin_Contacts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Settings/Admin/Contacts */ 473);
/* harmony import */ var Settings_Admin_Security__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Settings/Admin/Security */ 474);
/* harmony import */ var Settings_Admin_Social__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Settings/Admin/Social */ 475);
/* harmony import */ var Settings_Admin_Plugins__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Settings/Admin/Plugins */ 476);
/* harmony import */ var Settings_Admin_Packages__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Settings/Admin/Packages */ 477);
/* harmony import */ var Settings_Admin_About__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Settings/Admin/About */ 478);
/* harmony import */ var Settings_Admin_Branding__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Settings/Admin/Branding */ 479);
/* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Helper/Apps/Admin */ 68);
/* harmony import */ var View_Admin_Settings_Menu__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! View/Admin/Settings/Menu */ 480);
/* harmony import */ var View_Admin_Settings_Pane__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! View/Admin/Settings/Pane */ 481);


















var SettingsAdminScreen = /*#__PURE__*/function (_AbstractSettingsScre) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SettingsAdminScreen, _AbstractSettingsScre);

  function SettingsAdminScreen() {
    return _AbstractSettingsScre.call(this, [View_Admin_Settings_Menu__WEBPACK_IMPORTED_MODULE_15__[/* MenuSettingsAdminView */ "a"], View_Admin_Settings_Pane__WEBPACK_IMPORTED_MODULE_16__[/* PaneSettingsAdminView */ "a"]]) || this;
  }
  /**
   * @param {Function=} fCallback = null
   */


  var _proto = SettingsAdminScreen.prototype;

  _proto.setupSettings = function setupSettings(fCallback) {
    if (fCallback === void 0) {
      fCallback = null;
    }

    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_General__WEBPACK_IMPORTED_MODULE_4__[/* GeneralAdminSettings */ "a"], 'AdminSettingsGeneral', 'TABS_LABELS/LABEL_GENERAL_NAME', 'general', true);
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_Domains__WEBPACK_IMPORTED_MODULE_5__[/* DomainsAdminSettings */ "a"], 'AdminSettingsDomains', 'TABS_LABELS/LABEL_DOMAINS_NAME', 'domains');
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_Login__WEBPACK_IMPORTED_MODULE_6__[/* LoginAdminSettings */ "a"], 'AdminSettingsLogin', 'TABS_LABELS/LABEL_LOGIN_NAME', 'login');
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_Branding__WEBPACK_IMPORTED_MODULE_13__[/* BrandingAdminSettings */ "a"], 'AdminSettingsBranding', 'TABS_LABELS/LABEL_BRANDING_NAME', 'branding');
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_Contacts__WEBPACK_IMPORTED_MODULE_7__[/* ContactsAdminSettings */ "a"], 'AdminSettingsContacts', 'TABS_LABELS/LABEL_CONTACTS_NAME', 'contacts');
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_Security__WEBPACK_IMPORTED_MODULE_8__[/* SecurityAdminSettings */ "a"], 'AdminSettingsSecurity', 'TABS_LABELS/LABEL_SECURITY_NAME', 'security');
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_Social__WEBPACK_IMPORTED_MODULE_9__[/* SocialAdminSettings */ "a"], 'AdminSettingsSocial', 'TABS_LABELS/LABEL_INTEGRATION_NAME', 'integrations');
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_Plugins__WEBPACK_IMPORTED_MODULE_10__[/* PluginsAdminSettings */ "a"], 'AdminSettingsPlugins', 'TABS_LABELS/LABEL_PLUGINS_NAME', 'plugins');
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_Packages__WEBPACK_IMPORTED_MODULE_11__[/* PackagesAdminSettings */ "a"], 'AdminSettingsPackages', 'TABS_LABELS/LABEL_PACKAGES_NAME', 'packages');
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["addSettingsViewModel"])(Settings_Admin_About__WEBPACK_IMPORTED_MODULE_12__[/* AboutAdminSettings */ "a"], 'AdminSettingsAbout', 'TABS_LABELS/LABEL_ABOUT_NAME', 'about');
    Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_2__[/* runSettingsViewModelHooks */ "g"])(true);

    if (fCallback) {
      fCallback();
    }
  };

  _proto.onShow = function onShow() {
    Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_14__[/* getApp */ "a"])().setWindowTitle('');
  };

  return SettingsAdminScreen;
}(Screen_AbstractSettings__WEBPACK_IMPORTED_MODULE_3__[/* AbstractSettingsScreen */ "a"]);



/***/ }),
/* 470 */
/*!***************************************!*\
  !*** ./dev/Settings/Admin/General.js ***!
  \***************************************/
/*! exports provided: GeneralAdminSettings, default */
/*! exports used: GeneralAdminSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return GeneralAdminSettings; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* 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);
/* 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);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/Theme */ 123);
/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/Language */ 72);
/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/Admin/App */ 110);
/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/Admin/Capa */ 88);
















var GeneralAdminSettings = /*#__PURE__*/function () {
  function GeneralAdminSettings() {
    var _this = this;

    this.language = Stores_Language__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].language;
    this.languages = Stores_Language__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].languages;
    this.languageAdmin = Stores_Language__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].languageAdmin;
    this.languagesAdmin = Stores_Language__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].languagesAdmin;
    this.theme = Stores_Theme__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].theme;
    this.themes = Stores_Theme__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].themes;
    this.capaThemes = Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].themes;
    this.capaUserBackground = Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].userBackground;
    this.capaGravatar = Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].gravatar;
    this.capaAdditionalAccounts = Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].additionalAccounts;
    this.capaIdentities = Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].identities;
    this.capaAttachmentThumbnails = Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].attachmentThumbnails;
    this.capaTemplates = Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].templates;
    this.allowLanguagesOnSettings = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].allowLanguagesOnSettings;
    this.weakPassword = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].weakPassword;
    this.newMoveToFolder = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].newMoveToFolder;
    this.dataFolderAccess = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].dataFolderAccess;
    this.mainAttachmentLimit = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pInt"])(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('AttachmentLimit')) / (Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].BitLength1024 * Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].BitLength1024)).extend({
      posInterer: 25
    });
    this.uploadData = Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('PhpUploadSizes');
    this.uploadDataDesc = this.uploadData && (this.uploadData.upload_max_filesize || this.uploadData.post_max_size) ? [this.uploadData.upload_max_filesize ? 'upload_max_filesize = ' + this.uploadData.upload_max_filesize + '; ' : '', this.uploadData.post_max_size ? 'post_max_size = ' + this.uploadData.post_max_size : ''].join('') : '';
    this.themesOptions = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, _this.themes(), function (theme) {
        return {
          optValue: theme,
          optText: Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["convertThemeName"])(theme)
        };
      });
    });
    this.languageFullName = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["convertLangName"])(_this.language());
    });
    this.languageAdminFullName = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["convertLangName"])(_this.languageAdmin());
    });
    this.attachmentLimitTrigger = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Idle);
    this.languageTrigger = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Idle);
    this.languageAdminTrigger = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Idle).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time100ms
    });
    this.themeTrigger = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Idle);
  }

  var _proto = GeneralAdminSettings.prototype;

  _proto.onBuild = function onBuild() {
    var _this2 = this;

    ___WEBPACK_IMPORTED_MODULE_2___default.a.delay(function () {
      var f1 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["settingsSaveHelperSimpleFunction"])(_this2.attachmentLimitTrigger, _this2),
          f2 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["settingsSaveHelperSimpleFunction"])(_this2.languageTrigger, _this2),
          f3 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["settingsSaveHelperSimpleFunction"])(_this2.themeTrigger, _this2),
          fReloadLanguageHelper = function fReloadLanguageHelper(saveSettingsStep) {
        return function () {
          _this2.languageAdminTrigger(saveSettingsStep);

          ___WEBPACK_IMPORTED_MODULE_2___default.a.delay(function () {
            return _this2.languageAdminTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Idle);
          }, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time1s);
        };
      };

      _this2.mainAttachmentLimit.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(f1, {
          'AttachmentLimit': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pInt"])(value)
        });
      });

      _this2.language.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(f2, {
          'Language': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["trim"])(value)
        });
      });

      _this2.languageAdmin.subscribe(function (value) {
        _this2.languageAdminTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Animate);

        Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["reload"])(true, value).then(fReloadLanguageHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].TrueResult), fReloadLanguageHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].FalseResult)).then(function () {
          Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
            'LanguageAdmin': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["trim"])(value)
          });
        });
      });

      _this2.theme.subscribe(function (value) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["changeTheme"])(value, _this2.themeTrigger);
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(f3, {
          'Theme': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["trim"])(value)
        });
      });

      _this2.capaAdditionalAccounts.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
          'CapaAdditionalAccounts': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
        });
      });

      _this2.capaIdentities.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
          'CapaIdentities': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
        });
      });

      _this2.capaTemplates.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
          'CapaTemplates': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
        });
      });

      _this2.capaGravatar.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
          'CapaGravatar': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
        });
      });

      _this2.capaAttachmentThumbnails.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
          'CapaAttachmentThumbnails': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
        });
      });

      _this2.capaThemes.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
          'CapaThemes': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
        });
      });

      _this2.capaUserBackground.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
          'CapaUserBackground': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
        });
      });

      _this2.allowLanguagesOnSettings.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
          'AllowLanguagesOnSettings': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
        });
      });

      _this2.newMoveToFolder.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
          'NewMoveToFolder': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
        });
      });
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time50ms);
  };

  _proto.selectLanguage = function selectLanguage() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 291), [this.language, this.languages(), Stores_Language__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].userLanguage()]);
  };

  _proto.selectLanguageAdmin = function selectLanguageAdmin() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 291), [this.languageAdmin, this.languagesAdmin(), Stores_Language__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].userLanguageAdmin()]);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.phpInfoLink = function phpInfoLink() {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_7__[/* phpInfo */ "u"])();
  };

  return GeneralAdminSettings;
}();



/***/ }),
/* 471 */
/*!***************************************!*\
  !*** ./dev/Settings/Admin/Domains.js ***!
  \***************************************/
/*! exports provided: DomainsAdminSettings, default */
/*! exports used: DomainsAdminSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DomainsAdminSettings; });
/* unused harmony export default */
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__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 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 Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/Admin/Domain */ 164);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Helper/Apps/Admin */ 68);









var DomainsAdminSettings = /*#__PURE__*/function () {
  function DomainsAdminSettings() {
    var _this = this;

    this.domains = Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].domains;
    this.visibility = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return _this.domains.loading() ? 'visible' : 'hidden';
    });
    this.domainForDeletion = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(null).deleteAccessHelper();
    this.onDomainListChangeRequest = ___WEBPACK_IMPORTED_MODULE_1___default.a.bind(this.onDomainListChangeRequest, this);
    this.onDomainLoadRequest = ___WEBPACK_IMPORTED_MODULE_1___default.a.bind(this.onDomainLoadRequest, this);
  }

  var _proto = DomainsAdminSettings.prototype;

  _proto.createDomain = function createDomain() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Domain */ 432));
  };

  _proto.createDomainAlias = function createDomainAlias() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["showScreenPopup"])(__webpack_require__(/*! View/Popup/DomainAlias */ 562));
  };

  _proto.deleteDomain = function deleteDomain(domain) {
    this.domains.remove(domain);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].domainDelete(this.onDomainListChangeRequest, domain.name);
  };

  _proto.disableDomain = function disableDomain(domain) {
    domain.disabled(!domain.disabled());
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].domainDisable(this.onDomainListChangeRequest, domain.name, domain.disabled());
  };

  _proto.onBuild = function onBuild(oDom) {
    var self = this;
    oDom.on('click', '.b-admin-domains-list-table .e-item .e-action', function () {
      // eslint-disable-line prefer-arrow-callback
      var domainItem = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (domainItem) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].domain(self.onDomainLoadRequest, domainItem.name);
      }
    });
    Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_7__[/* getApp */ "a"])().reloadDomainList();
  };

  _proto.onDomainLoadRequest = function onDomainLoadRequest(sResult, oData) {
    if (Common_Enums__WEBPACK_IMPORTED_MODULE_3__["StorageResultType"].Success === sResult && oData && oData.Result) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Domain */ 432), [oData.Result]);
    }
  };

  _proto.onDomainListChangeRequest = function onDomainListChangeRequest() {
    Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_7__[/* getApp */ "a"])().reloadDomainList();
  };

  return DomainsAdminSettings;
}();



/***/ }),
/* 472 */
/*!*************************************!*\
  !*** ./dev/Settings/Admin/Login.js ***!
  \*************************************/
/*! exports provided: LoginAdminSettings, default */
/*! exports used: LoginAdminSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoginAdminSettings; });
/* unused harmony export default */
/* 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_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Stores/Admin/App */ 110);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);







var LoginAdminSettings = /*#__PURE__*/function () {
  function LoginAdminSettings() {
    this.determineUserLanguage = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].determineUserLanguage;
    this.determineUserDomain = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].determineUserDomain;
    this.defaultDomain = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"])('LoginDefaultDomain')).idleTrigger();
    this.allowLanguagesOnLogin = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].allowLanguagesOnLogin;
    this.dummy = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
  }

  var _proto = LoginAdminSettings.prototype;

  _proto.onBuild = function onBuild() {
    var _this = this;

    ___WEBPACK_IMPORTED_MODULE_0___default.a.delay(function () {
      var f1 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["settingsSaveHelperSimpleFunction"])(_this.defaultDomain.trigger, _this);

      _this.determineUserLanguage.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(null, {
          'DetermineUserLanguage': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["boolToAjax"])(value)
        });
      });

      _this.determineUserDomain.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(null, {
          'DetermineUserDomain': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["boolToAjax"])(value)
        });
      });

      _this.allowLanguagesOnLogin.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(null, {
          'AllowLanguagesOnLogin': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["boolToAjax"])(value)
        });
      });

      _this.defaultDomain.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f1, {
          'LoginDefaultDomain': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["trim"])(value)
        });
      });
    }, 50);
  };

  return LoginAdminSettings;
}();



/***/ }),
/* 473 */
/*!****************************************!*\
  !*** ./dev/Settings/Admin/Contacts.js ***!
  \****************************************/
/*! exports provided: ContactsAdminSettings, default */
/*! exports used: ContactsAdminSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ContactsAdminSettings; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* 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 */ 17);
/* 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__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/Knoin */ 8);


var _dec, _class;











var ContactsAdminSettings = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["command"])(function (self) {
  return '' !== self.pdoDsn() && '' !== self.pdoUser();
}), (_class = /*#__PURE__*/function () {
  function ContactsAdminSettings() {
    var _this = this;

    this.defautOptionsAfterRender = Common_Utils__WEBPACK_IMPORTED_MODULE_5__["defautOptionsAfterRender"];
    this.enableContacts = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('ContactsEnable'));
    this.contactsSync = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('ContactsSync'));

    var supportedTypes = [],
        types = ['sqlite', 'mysql', 'pgsql'],
        getTypeName = function getTypeName(name) {
      switch (name) {
        case 'sqlite':
          name = 'SQLite';
          break;

        case 'mysql':
          name = 'MySQL';
          break;

        case 'pgsql':
          name = 'PostgreSQL';
          break;
        // no default
      }

      return name;
    };

    if (Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('SQLiteIsSupported')) {
      supportedTypes.push('sqlite');
    }

    if (Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('MySqlIsSupported')) {
      supportedTypes.push('mysql');
    }

    if (Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('PostgreSqlIsSupported')) {
      supportedTypes.push('pgsql');
    }

    this.contactsSupported = 0 < supportedTypes.length;
    this.contactsTypes = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observableArray([]);
    this.contactsTypesOptions = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, _this.contactsTypes(), function (value) {
        var disabled = -1 === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["inArray"])(value, supportedTypes);
        return {
          'id': value,
          'name': getTypeName(value) + (disabled ? ' (' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('HINTS/NOT_SUPPORTED') + ')' : ''),
          'disabled': disabled
        };
      });
    });
    this.contactsTypes(types);
    this.contactsType = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');
    this.mainContactsType = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].computed({
      read: this.contactsType,
      write: function write(value) {
        if (value !== _this.contactsType()) {
          if (-1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["inArray"])(value, supportedTypes)) {
            _this.contactsType(value);
          } else if (0 < supportedTypes.length) {
            _this.contactsType('');
          }
        } else {
          _this.contactsType.valueHasMutated();
        }
      }
    }).extend({
      notify: 'always'
    });
    this.contactsType.subscribe(function () {
      _this.testContactsSuccess(false);

      _this.testContactsError(false);

      _this.testContactsErrorMessage('');
    });
    this.pdoDsn = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('ContactsPdoDsn'));
    this.pdoUser = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('ContactsPdoUser'));
    this.pdoPassword = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('ContactsPdoPassword'));
    this.pdoDsnTrigger = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["SaveSettingsStep"].Idle);
    this.pdoUserTrigger = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["SaveSettingsStep"].Idle);
    this.pdoPasswordTrigger = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["SaveSettingsStep"].Idle);
    this.contactsTypeTrigger = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["SaveSettingsStep"].Idle);
    this.testing = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    this.testContactsSuccess = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    this.testContactsError = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    this.testContactsErrorMessage = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');
    this.contactsType(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('ContactsPdoType'));
    this.onTestContactsResponse = ___WEBPACK_IMPORTED_MODULE_3___default.a.bind(this.onTestContactsResponse, this);
  }

  var _proto = ContactsAdminSettings.prototype;

  _proto.testContactsCommand = function testContactsCommand() {
    this.testContactsSuccess(false);
    this.testContactsError(false);
    this.testContactsErrorMessage('');
    this.testing(true);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].testContacts(this.onTestContactsResponse, {
      'ContactsPdoType': this.contactsType(),
      'ContactsPdoDsn': this.pdoDsn(),
      'ContactsPdoUser': this.pdoUser(),
      'ContactsPdoPassword': this.pdoPassword()
    });
  };

  _proto.onTestContactsResponse = function onTestContactsResponse(result, data) {
    this.testContactsSuccess(false);
    this.testContactsError(false);
    this.testContactsErrorMessage('');

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_6__["StorageResultType"].Success === result && data && data.Result && data.Result.Result) {
      this.testContactsSuccess(true);
    } else {
      this.testContactsError(true);

      if (data && data.Result) {
        this.testContactsErrorMessage(data.Result.Message || '');
      } else {
        this.testContactsErrorMessage('');
      }
    }

    this.testing(false);
  };

  _proto.onShow = function onShow() {
    this.testContactsSuccess(false);
    this.testContactsError(false);
    this.testContactsErrorMessage('');
  };

  _proto.onBuild = function onBuild() {
    var _this2 = this;

    ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(function () {
      var f1 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["settingsSaveHelperSimpleFunction"])(_this2.pdoDsnTrigger, _this2),
          f3 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["settingsSaveHelperSimpleFunction"])(_this2.pdoUserTrigger, _this2),
          f4 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["settingsSaveHelperSimpleFunction"])(_this2.pdoPasswordTrigger, _this2),
          f5 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["settingsSaveHelperSimpleFunction"])(_this2.contactsTypeTrigger, _this2);

      _this2.enableContacts.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].saveAdminConfig(null, {
          'ContactsEnable': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["boolToAjax"])(value)
        });
      });

      _this2.contactsSync.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].saveAdminConfig(null, {
          'ContactsSync': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["boolToAjax"])(value)
        });
      });

      _this2.contactsType.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].saveAdminConfig(f5, {
          'ContactsPdoType': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(value)
        });
      });

      _this2.pdoDsn.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].saveAdminConfig(f1, {
          'ContactsPdoDsn': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(value)
        });
      });

      _this2.pdoUser.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].saveAdminConfig(f3, {
          'ContactsPdoUser': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(value)
        });
      });

      _this2.pdoPassword.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].saveAdminConfig(f4, {
          'ContactsPdoPassword': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(value)
        });
      });

      _this2.contactsType(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"])('ContactsPdoType'));
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].Time50ms);
  };

  return ContactsAdminSettings;
}(), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_class.prototype, "testContactsCommand", [_dec], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class.prototype, "testContactsCommand"), _class.prototype)), _class));


/***/ }),
/* 474 */
/*!****************************************!*\
  !*** ./dev/Settings/Admin/Security.js ***!
  \****************************************/
/*! exports provided: SecurityAdminSettings, default */
/*! exports used: SecurityAdminSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SecurityAdminSettings; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* 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);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Stores/Admin/App */ 110);
/* harmony import */ var Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/Admin/Capa */ 88);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Knoin/Knoin */ 8);


var _dec, _class;












var SecurityAdminSettings = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["command"])(function (self) {
  return '' !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["trim"])(self.adminLogin()) && '' !== self.adminPassword();
}), (_class = /*#__PURE__*/function () {
  function SecurityAdminSettings() {
    var _this = this;

    this.useLocalProxyForExternalImages = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].useLocalProxyForExternalImages;
    this.weakPassword = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].weakPassword;
    this.capaOpenPGP = Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].openPGP;
    this.capaTwoFactorAuth = Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].twoFactorAuth;
    this.capaTwoFactorAuthForce = Stores_Admin_Capa__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].twoFactorAuthForce;
    this.capaTwoFactorAuth.subscribe(function (value) {
      if (!value) {
        _this.capaTwoFactorAuthForce(false);
      }
    });
    this.verifySslCertificate = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('VerifySslCertificate'));
    this.allowSelfSigned = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('AllowSelfSigned'));
    this.verifySslCertificate.subscribe(function (value) {
      if (!value) {
        _this.allowSelfSigned(true);
      }
    });
    this.isTwoFactorDropperShown = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.twoFactorDropperUser = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    this.twoFactorDropperUser.focused = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.adminLogin = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('AdminLogin'));
    this.adminLoginError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.adminPassword = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    this.adminPasswordNew = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    this.adminPasswordNew2 = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    this.adminPasswordNewError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.adminPasswordUpdateError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.adminPasswordUpdateSuccess = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.adminPassword.subscribe(function () {
      _this.adminPasswordUpdateError(false);

      _this.adminPasswordUpdateSuccess(false);
    });
    this.adminLogin.subscribe(function () {
      _this.adminLoginError(false);
    });
    this.adminPasswordNew.subscribe(function () {
      _this.adminPasswordUpdateError(false);

      _this.adminPasswordUpdateSuccess(false);

      _this.adminPasswordNewError(false);
    });
    this.adminPasswordNew2.subscribe(function () {
      _this.adminPasswordUpdateError(false);

      _this.adminPasswordUpdateSuccess(false);

      _this.adminPasswordNewError(false);
    });
    this.onNewAdminPasswordResponse = ___WEBPACK_IMPORTED_MODULE_2___default.a.bind(this.onNewAdminPasswordResponse, this);
  }

  var _proto = SecurityAdminSettings.prototype;

  _proto.saveNewAdminPasswordCommand = function saveNewAdminPasswordCommand() {
    if ('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["trim"])(this.adminLogin())) {
      this.adminLoginError(true);
      return false;
    }

    if (this.adminPasswordNew() !== this.adminPasswordNew2()) {
      this.adminPasswordNewError(true);
      return false;
    }

    this.adminPasswordUpdateError(false);
    this.adminPasswordUpdateSuccess(false);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveNewAdminPassword(this.onNewAdminPasswordResponse, {
      'Login': this.adminLogin(),
      'Password': this.adminPassword(),
      'NewPassword': this.adminPasswordNew()
    });
    return true;
  };

  _proto.showTwoFactorDropper = function showTwoFactorDropper() {
    var _this2 = this;

    this.twoFactorDropperUser('');
    this.isTwoFactorDropperShown(true);

    ___WEBPACK_IMPORTED_MODULE_2___default.a.delay(function () {
      _this2.twoFactorDropperUser.focused(true);
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].Time50ms);
  };

  _proto.onNewAdminPasswordResponse = function onNewAdminPasswordResponse(result, data) {
    if (Common_Enums__WEBPACK_IMPORTED_MODULE_6__["StorageResultType"].Success === result && data && data.Result) {
      this.adminPassword('');
      this.adminPasswordNew('');
      this.adminPasswordNew2('');
      this.adminPasswordUpdateSuccess(true);
      this.weakPassword(!!data.Result.Weak);
    } else {
      this.adminPasswordUpdateError(true);
    }
  };

  _proto.onBuild = function onBuild() {
    this.capaOpenPGP.subscribe(function (value) {
      Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
        'CapaOpenPGP': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
      });
    });
    this.capaTwoFactorAuth.subscribe(function (value) {
      Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
        'CapaTwoFactorAuth': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
      });
    });
    this.capaTwoFactorAuthForce.subscribe(function (value) {
      Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
        'CapaTwoFactorAuthForce': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
      });
    });
    this.useLocalProxyForExternalImages.subscribe(function (value) {
      Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
        'UseLocalProxyForExternalImages': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
      });
    });
    this.verifySslCertificate.subscribe(function (value) {
      Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
        'VerifySslCertificate': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
      });
    });
    this.allowSelfSigned.subscribe(function (value) {
      Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveAdminConfig(null, {
        'AllowSelfSigned': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(value)
      });
    });
  };

  _proto.onHide = function onHide() {
    this.adminPassword('');
    this.adminPasswordNew('');
    this.adminPasswordNew2('');
    this.isTwoFactorDropperShown(false);
    this.twoFactorDropperUser('');
    this.twoFactorDropperUser.focused(false);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.phpInfoLink = function phpInfoLink() {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_5__[/* phpInfo */ "u"])();
  };

  return SecurityAdminSettings;
}(), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_class.prototype, "saveNewAdminPasswordCommand", [_dec], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype, "saveNewAdminPasswordCommand"), _class.prototype)), _class));


/***/ }),
/* 475 */
/*!**************************************!*\
  !*** ./dev/Settings/Admin/Social.js ***!
  \**************************************/
/*! exports provided: SocialAdminSettings, default */
/*! exports used: SocialAdminSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SocialAdminSettings; });
/* unused harmony export default */
/* 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 Stores_Social__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Stores/Social */ 26);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);







var SocialAdminSettings = /*#__PURE__*/function () {
  function SocialAdminSettings() {
    this.googleEnable = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.enabled;
    this.googleEnableAuth = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.capa.auth;
    this.googleEnableAuthGmail = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.capa.authGmail;
    this.googleEnableDrive = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.capa.drive;
    this.googleEnablePreview = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.capa.preview;
    this.googleEnableRequireClientSettings = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.require.clientSettings;
    this.googleEnableRequireApiKey = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.require.apiKeySettings;
    this.googleClientID = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.clientID;
    this.googleClientSecret = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.clientSecret;
    this.googleApiKey = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].google.apiKey;
    this.googleTrigger1 = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["SaveSettingsStep"].Idle);
    this.googleTrigger2 = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["SaveSettingsStep"].Idle);
    this.googleTrigger3 = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["SaveSettingsStep"].Idle);
    this.facebookSupported = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].facebook.supported;
    this.facebookEnable = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].facebook.enabled;
    this.facebookAppID = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].facebook.appID;
    this.facebookAppSecret = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].facebook.appSecret;
    this.facebookTrigger1 = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["SaveSettingsStep"].Idle);
    this.facebookTrigger2 = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["SaveSettingsStep"].Idle);
    this.twitterEnable = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].twitter.enabled;
    this.twitterConsumerKey = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].twitter.consumerKey;
    this.twitterConsumerSecret = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].twitter.consumerSecret;
    this.twitterTrigger1 = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["SaveSettingsStep"].Idle);
    this.twitterTrigger2 = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["SaveSettingsStep"].Idle);
    this.dropboxEnable = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].dropbox.enabled;
    this.dropboxApiKey = Stores_Social__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].dropbox.apiKey;
    this.dropboxTrigger1 = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["SaveSettingsStep"].Idle);
  }

  var _proto = SocialAdminSettings.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.facebookTrigger1, _this),
          f2 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.facebookTrigger2, _this),
          f3 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.twitterTrigger1, _this),
          f4 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.twitterTrigger2, _this),
          f5 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.googleTrigger1, _this),
          f6 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.googleTrigger2, _this),
          f7 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.googleTrigger3, _this),
          f8 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.dropboxTrigger1, _this);

      _this.facebookEnable.subscribe(function (value) {
        if (_this.facebookSupported()) {
          Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(null, {
            'FacebookEnable': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["boolToAjax"])(value)
          });
        }
      });

      _this.facebookAppID.subscribe(function (value) {
        if (_this.facebookSupported()) {
          Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f1, {
            'FacebookAppID': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
          });
        }
      });

      _this.facebookAppSecret.subscribe(function (value) {
        if (_this.facebookSupported()) {
          Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f2, {
            'FacebookAppSecret': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
          });
        }
      });

      _this.twitterEnable.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('TwitterEnable', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["boolToAjax"]));

      _this.twitterConsumerKey.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('TwitterConsumerKey', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"], f3));

      _this.twitterConsumerSecret.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('TwitterConsumerSecret', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"], f4));

      _this.googleEnable.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('GoogleEnable', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["boolToAjax"]));

      _this.googleEnableAuth.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('GoogleEnableAuth', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["boolToAjax"]));

      _this.googleEnableAuthGmail.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('GoogleEnableAuthGmail', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["boolToAjax"]));

      _this.googleEnableDrive.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('GoogleEnableDrive', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["boolToAjax"]));

      _this.googleEnablePreview.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('GoogleEnablePreview', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["boolToAjax"]));

      _this.googleClientID.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('GoogleClientID', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"], f5));

      _this.googleClientSecret.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('GoogleClientSecret', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"], f6));

      _this.googleApiKey.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('GoogleApiKey', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"], f7));

      _this.dropboxEnable.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('DropboxEnable', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["boolToAjax"]));

      _this.dropboxApiKey.subscribe(Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfigHelper('DropboxApiKey', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"], f8));
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Magics"].Time50ms);
  };

  return SocialAdminSettings;
}();



/***/ }),
/* 476 */
/*!***************************************!*\
  !*** ./dev/Settings/Admin/Plugins.js ***!
  \***************************************/
/*! exports provided: PluginsAdminSettings, default */
/*! exports used: PluginsAdminSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PluginsAdminSettings; });
/* unused harmony export default */
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__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 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_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Stores/Admin/Plugin */ 125);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Helper/Apps/Admin */ 68);












var PluginsAdminSettings = /*#__PURE__*/function () {
  function PluginsAdminSettings() {
    this.enabledPlugins = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('EnabledPlugins'));
    this.plugins = Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].plugins;
    this.pluginsError = Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].plugins.error;
    this.visibility = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].plugins.loading() ? 'visible' : 'hidden';
    });
    this.onPluginLoadRequest = ___WEBPACK_IMPORTED_MODULE_1___default.a.bind(this.onPluginLoadRequest, this);
    this.onPluginDisableRequest = ___WEBPACK_IMPORTED_MODULE_1___default.a.bind(this.onPluginDisableRequest, this);
  }

  var _proto = PluginsAdminSettings.prototype;

  _proto.disablePlugin = function disablePlugin(plugin) {
    plugin.disabled(!plugin.disabled());
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].pluginDisable(this.onPluginDisableRequest, plugin.name, plugin.disabled());
  };

  _proto.configurePlugin = function configurePlugin(plugin) {
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].plugin(this.onPluginLoadRequest, plugin.name);
  };

  _proto.onBuild = function onBuild(oDom) {
    var self = this;
    oDom.on('click', '.e-item .configure-plugin-action', function () {
      // eslint-disable-line prefer-arrow-callback
      var plugin = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (plugin) {
        self.configurePlugin(plugin);
      }
    }).on('click', '.e-item .disabled-plugin', function () {
      // eslint-disable-line prefer-arrow-callback
      var plugin = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (plugin) {
        self.disablePlugin(plugin);
      }
    });
    this.enabledPlugins.subscribe(function (value) {
      Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].saveAdminConfig(null, {
        'EnabledPlugins': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["boolToAjax"])(value)
      });
    });
  };

  _proto.onShow = function onShow() {
    Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].plugins.error('');
    Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_10__[/* getApp */ "a"])().reloadPluginList();
  };

  _proto.onPluginLoadRequest = function onPluginLoadRequest(result, data) {
    if (Common_Enums__WEBPACK_IMPORTED_MODULE_3__["StorageResultType"].Success === result && data && data.Result) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_7__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Plugin */ 563), [data.Result]);
    }
  };

  _proto.onPluginDisableRequest = function onPluginDisableRequest(result, data) {
    if (Common_Enums__WEBPACK_IMPORTED_MODULE_3__["StorageResultType"].Success === result && data) {
      if (!data.Result && data.ErrorCode) {
        if (Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Notification"].UnsupportedPluginPackage === data.ErrorCode && data.ErrorMessage && '' !== data.ErrorMessage) {
          Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].plugins.error(data.ErrorMessage);
        } else {
          Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].plugins.error(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["getNotification"])(data.ErrorCode));
        }
      }
    }

    Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_10__[/* getApp */ "a"])().reloadPluginList();
  };

  return PluginsAdminSettings;
}();



/***/ }),
/* 477 */
/*!****************************************!*\
  !*** ./dev/Settings/Admin/Packages.js ***!
  \****************************************/
/*! exports provided: PackagesAdminSettings, default */
/*! exports used: PackagesAdminSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PackagesAdminSettings; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__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 ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* 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);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/Package */ 94);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Helper/Apps/Admin */ 68);










var PackagesAdminSettings = /*#__PURE__*/function () {
  function PackagesAdminSettings() {
    var _this = this;

    this.packagesError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    this.packages = Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].packages;
    this.packagesReal = Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].packagesReal;
    this.packagesMainUpdatable = Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].packagesMainUpdatable;
    this.packagesCurrent = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, _this.packages(), function (item) {
        return item && '' !== item.installed && !item.compare;
      });
    });
    this.packagesAvailableForUpdate = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, _this.packages(), function (item) {
        return item && '' !== item.installed && !!item.compare;
      });
    });
    this.packagesAvailableForInstallation = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, _this.packages(), function (item) {
        return item && '' === item.installed;
      });
    });
    this.visibility = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      return Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].packages.loading() ? 'visible' : 'hidden';
    });
  }

  var _proto = PackagesAdminSettings.prototype;

  _proto.onShow = function onShow() {
    this.packagesError('');
  };

  _proto.onBuild = function onBuild() {
    Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_8__[/* getApp */ "a"])().reloadPackagesList();
  };

  _proto.requestHelper = function requestHelper(packageToRequest, install) {
    var _this2 = this;

    return function (result, data) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success !== result || !data || !data.Result) {
        if (data && data.ErrorCode) {
          _this2.packagesError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["getNotification"])(data.ErrorCode));
        } else {
          _this2.packagesError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["getNotification"])(install ? Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].CantInstallPackage : Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].CantDeletePackage));
        }
      }

      ___WEBPACK_IMPORTED_MODULE_2___default.a.each(_this2.packages(), function (item) {
        if (item && packageToRequest && item.loading && item.loading() && packageToRequest.file === item.file) {
          packageToRequest.loading(false);
          item.loading(false);
        }
      });

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === result && data && data.Result && data.Result.Reload) {
        window__WEBPACK_IMPORTED_MODULE_1___default.a.location.reload();
      } else {
        Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_8__[/* getApp */ "a"])().reloadPackagesList();
      }
    };
  };

  _proto.deletePackage = function deletePackage(packageToDelete) {
    if (packageToDelete) {
      packageToDelete.loading(true);
      Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].packageDelete(this.requestHelper(packageToDelete, false), packageToDelete);
    }
  };

  _proto.installPackage = function installPackage(packageToInstall) {
    if (packageToInstall) {
      packageToInstall.loading(true);
      Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].packageInstall(this.requestHelper(packageToInstall, true), packageToInstall);
    }
  };

  return PackagesAdminSettings;
}();



/***/ }),
/* 478 */
/*!*************************************!*\
  !*** ./dev/Settings/Admin/About.js ***!
  \*************************************/
/*! exports provided: AboutAdminSettings, default */
/*! exports used: AboutAdminSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AboutAdminSettings; });
/* unused harmony export default */
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Stores/Admin/Core */ 40);
/* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Helper/Apps/Admin */ 68);






var AboutAdminSettings = /*#__PURE__*/function () {
  function AboutAdminSettings() {
    var _this = this;

    this.version = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["appSettingsGet"])('version'));
    this.access = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(!!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"])('CoreAccess'));
    this.errorDesc = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
    this.coreReal = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreReal;
    this.coreChannel = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreChannel;
    this.coreType = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreType;
    this.coreUpdatable = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreUpdatable;
    this.coreAccess = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreAccess;
    this.coreChecking = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreChecking;
    this.coreUpdating = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreUpdating;
    this.coreWarning = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreWarning;
    this.coreVersion = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreVersion;
    this.coreRemoteVersion = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreRemoteVersion;
    this.coreRemoteRelease = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreRemoteRelease;
    this.coreVersionCompare = Stores_Admin_Core__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].coreVersionCompare;
    this.coreRemoteVersionHtmlDesc = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].computed(function () {
      Object(Common_Translator__WEBPACK_IMPORTED_MODULE_1__["trigger"])();
      return Object(Common_Translator__WEBPACK_IMPORTED_MODULE_1__["i18n"])('TAB_ABOUT/HTML_NEW_VERSION', {
        'VERSION': _this.coreRemoteVersion()
      });
    });
    this.statusType = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].computed(function () {
      var type = '';

      var versionToCompare = _this.coreVersionCompare(),
          isChecking = _this.coreChecking(),
          isUpdating = _this.coreUpdating(),
          isReal = _this.coreReal();

      if (isChecking) {
        type = 'checking';
      } else if (isUpdating) {
        type = 'updating';
      } else if (isReal && 0 === versionToCompare) {
        type = 'up-to-date';
      } else if (isReal && -1 === versionToCompare) {
        type = 'available';
      } else if (!isReal) {
        type = 'error';

        _this.errorDesc('Cannot access the repository at the moment.');
      }

      return type;
    });
  }

  var _proto = AboutAdminSettings.prototype;

  _proto.onBuild = function onBuild() {
    if (this.access()) {
      Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_4__[/* getApp */ "a"])().reloadCoreData();
    }
  };

  _proto.updateCoreData = function updateCoreData() {
    if (!this.coreUpdating()) {
      Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_4__[/* getApp */ "a"])().updateCoreData();
    }
  };

  return AboutAdminSettings;
}();



/***/ }),
/* 479 */
/*!****************************************!*\
  !*** ./dev/Settings/Admin/Branding.js ***!
  \****************************************/
/*! exports provided: BrandingAdminSettings, default */
/*! exports used: BrandingAdminSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return BrandingAdminSettings; });
/* unused harmony export default */
/* 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 */ 18);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Storage/Settings */ 5);








var BrandingAdminSettings = /*#__PURE__*/function () {
  function BrandingAdminSettings() {
    this.title = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('Title')).idleTrigger();
    this.loadingDesc = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('LoadingDescription')).idleTrigger();
    this.faviconUrl = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('FaviconUrl')).idleTrigger();
    this.loginLogo = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('LoginLogo') || '').idleTrigger();
    this.loginBackground = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('LoginBackground') || '').idleTrigger();
    this.userLogo = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('UserLogo') || '').idleTrigger();
    this.userLogoMessage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('UserLogoMessage') || '').idleTrigger();
    this.userIframeMessage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('UserIframeMessage') || '').idleTrigger();
    this.userLogoTitle = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('UserLogoTitle') || '').idleTrigger();
    this.loginDescription = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('LoginDescription')).idleTrigger();
    this.loginCss = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('LoginCss')).idleTrigger();
    this.userCss = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('UserCss')).idleTrigger();
    this.welcomePageUrl = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"])('WelcomePageUrl')).idleTrigger();
    this.welcomePageDisplay = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["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')
      }];
    });
  }

  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);

    ___WEBPACK_IMPORTED_MODULE_0___default.a.delay(function () {
      var f1 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.loginLogo.trigger, _this),
          f2 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.loginDescription.trigger, _this),
          f3 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.loginCss.trigger, _this),
          f4 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.userLogo.trigger, _this),
          f5 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.userLogoTitle.trigger, _this),
          f6 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.loginBackground.trigger, _this),
          f7 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.userCss.trigger, _this),
          f8 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.welcomePageUrl.trigger, _this),
          f9 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.welcomePageDisplay.trigger, _this),
          f10 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.userLogoMessage.trigger, _this),
          f11 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.userIframeMessage.trigger, _this);

      _this.loginLogo.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f1, {
          'LoginLogo': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });

      _this.loginDescription.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f2, {
          'LoginDescription': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });

      _this.loginCss.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f3, {
          'LoginCss': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });

      _this.userLogo.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f4, {
          'UserLogo': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });

      _this.userLogoTitle.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f5, {
          'UserLogoTitle': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });

      _this.userLogoMessage.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f10, {
          'UserLogoMessage': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });

      _this.userIframeMessage.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f11, {
          'UserIframeMessage': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });

      _this.loginBackground.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f6, {
          'LoginBackground': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });

      _this.userCss.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f7, {
          'UserCss': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });

      _this.welcomePageUrl.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f8, {
          'WelcomePageUrl': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });

      _this.welcomePageDisplay.subscribe(function (value) {
        Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f9, {
          'WelcomePageDisplay': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value)
        });
      });
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Magics"].Time50ms);
  };

  return BrandingAdminSettings;
}();



/***/ }),
/* 480 */
/*!*****************************************!*\
  !*** ./dev/View/Admin/Settings/Menu.js ***!
  \*****************************************/
/*! exports provided: MenuSettingsAdminView, default */
/*! exports used: MenuSettingsAdminView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MenuSettingsAdminView; });
/* unused harmony export default */
/* 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 core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.link.js */ 204);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;








var MenuSettingsAdminView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["view"])({
  name: 'View/Admin/Settings/Menu',
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["ViewType"].Left,
  templateID: 'AdminMenu'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(MenuSettingsAdminView, _AbstractViewNext);

  /**
   * @param {?} screen
   */
  function MenuSettingsAdminView(screen) {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.leftPanelDisabled = Common_Globals__WEBPACK_IMPORTED_MODULE_4__["leftPanelDisabled"];
    _this.menu = screen.menu;
    return _this;
  }

  var _proto = MenuSettingsAdminView.prototype;

  _proto.link = function link(route) {
    return '#/' + route;
  };

  _proto.onBuild = function onBuild(dom) {
    key__WEBPACK_IMPORTED_MODULE_3___default()('up, down', Common_Enums__WEBPACK_IMPORTED_MODULE_5__["KeyState"].Settings, Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["settingsMenuKeysHandler"])($__WEBPACK_IMPORTED_MODULE_2___default()('.b-admin-menu .e-item', dom)));
  };

  return MenuSettingsAdminView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_7__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 481 */
/*!*****************************************!*\
  !*** ./dev/View/Admin/Settings/Pane.js ***!
  \*****************************************/
/*! exports provided: PaneSettingsAdminView, default */
/*! exports used: PaneSettingsAdminView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PaneSettingsAdminView; });
/* unused harmony export default */
/* 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 core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/Admin/Domain */ 164);
/* harmony import */ var Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/Plugin */ 125);
/* harmony import */ var Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/Admin/Package */ 94);
/* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Helper/Apps/Admin */ 68);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;











var PaneSettingsAdminView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["view"])({
  name: 'View/Admin/Settings/Pane',
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["ViewType"].Right,
  templateID: 'AdminPane'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(PaneSettingsAdminView, _AbstractViewNext);

  function PaneSettingsAdminView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.adminDomain = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AdminDomain'));
    _this.version = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["appSettingsGet"]('version'));
    _this.adminManLoading = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return '000' !== [Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].domains.loading() ? '1' : '0', Stores_Admin_Plugin__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].plugins.loading() ? '1' : '0', Stores_Admin_Package__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].packages.loading() ? '1' : '0'].join('');
    });
    _this.adminManLoadingVisibility = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return _this.adminManLoading() ? 'visible' : 'hidden';
    }).extend({
      rateLimit: 300
    });
    return _this;
  }

  var _proto = PaneSettingsAdminView.prototype;

  _proto.logoutClick = function logoutClick() {
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].adminLogout(function () {
      Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_8__[/* getApp */ "a"])().loginAndLogoutReload(true, true);
    });
  };

  return PaneSettingsAdminView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_10__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 482 */
/*!***********************************!*\
  !*** ./dev/Screen/Admin/Login.js ***!
  \***********************************/
/*! exports provided: LoginAdminScreen, default */
/*! exports used: LoginAdminScreen */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoginAdminScreen; });
/* unused harmony export default */
/* 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 Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/AbstractScreen */ 152);
/* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Helper/Apps/Admin */ 68);
/* harmony import */ var View_Admin_Login__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! View/Admin/Login */ 483);





var LoginAdminScreen = /*#__PURE__*/function (_AbstractScreen) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(LoginAdminScreen, _AbstractScreen);

  function LoginAdminScreen() {
    return _AbstractScreen.call(this, 'login', [View_Admin_Login__WEBPACK_IMPORTED_MODULE_3__[/* LoginAdminView */ "a"]]) || this;
  }

  var _proto = LoginAdminScreen.prototype;

  _proto.onShow = function onShow() {
    Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_2__[/* getApp */ "a"])().setWindowTitle('');
  };

  return LoginAdminScreen;
}(Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_1__[/* AbstractScreen */ "a"]);



/***/ }),
/* 483 */
/*!*********************************!*\
  !*** ./dev/View/Admin/Login.js ***!
  \*********************************/
/*! exports provided: LoginAdminView, default */
/*! exports used: LoginAdminView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoginAdminView; });
/* unused harmony export default */
/* 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 _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1);
/* 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_Enums__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Helper/Apps/Admin */ 68);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;













var LoginAdminView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["view"])({
  name: 'View/Admin/Login',
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["ViewType"].Center,
  templateID: 'AdminLogin'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["command"])(function (self) {
  return !self.submitRequest();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(LoginAdminView, _AbstractViewNext);

  function LoginAdminView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.mobile = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["appSettingsGet"]('mobile');
    _this.mobileDevice = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["appSettingsGet"]('mobileDevice');
    _this.hideSubmitButton = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["appSettingsGet"]('hideSubmitButton');
    _this.login = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.password = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.loginError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.passwordError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.loginErrorAnimation = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false).extend({
      'falseTimeout': 500
    });
    _this.passwordErrorAnimation = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false).extend({
      'falseTimeout': 500
    });
    _this.loginFocus = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.formHidden = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.formError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      return _this.loginErrorAnimation() || _this.passwordErrorAnimation();
    });

    _this.login.subscribe(function () {
      return _this.loginError(false);
    });

    _this.password.subscribe(function () {
      return _this.passwordError(false);
    });

    _this.loginError.subscribe(function (v) {
      return _this.loginErrorAnimation(!!v);
    });

    _this.passwordError.subscribe(function (v) {
      _this.passwordErrorAnimation(!!v);
    });

    _this.submitRequest = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.submitError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    return _this;
  }

  var _proto = LoginAdminView.prototype;

  _proto.submitCommand = function submitCommand() {
    var _this2 = this;

    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["triggerAutocompleteInputChange"])();
    this.loginError(false);
    this.passwordError(false);
    this.loginError('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(this.login()));
    this.passwordError('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(this.password()));

    if (this.loginError() || this.passwordError()) {
      return false;
    }

    this.submitRequest(true);
    Common_Globals__WEBPACK_IMPORTED_MODULE_8__["$win"].trigger('rl.tooltips.diactivate');
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].adminLogin(function (sResult, oData) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_8__["$win"].trigger('rl.tooltips.diactivate');
      Common_Globals__WEBPACK_IMPORTED_MODULE_8__["$win"].trigger('rl.tooltips.activate');

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_6__["StorageResultType"].Success === sResult && oData && 'AdminLogin' === oData.Action) {
        if (oData.Result) {
          Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_11__[/* getApp */ "a"])().loginAndLogoutReload(true);
        } else if (oData.ErrorCode) {
          _this2.submitRequest(false);

          _this2.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["getNotification"])(oData.ErrorCode));
        }
      } else {
        _this2.submitRequest(false);

        _this2.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Notification"].UnknownError));
      }
    }, this.login(), this.password());
    return true;
  };

  _proto.onShow = function onShow() {
    var _this3 = this;

    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["routeOff"])();

    ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
      _this3.loginFocus(true);
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].Time100ms);
  };

  _proto.onHide = function onHide() {
    this.loginFocus(false);
  };

  _proto.onBuild = function onBuild() {
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["triggerAutocompleteInputChange"])(true);
  };

  _proto.submitForm = function submitForm() {
    this.submitCommand();
  };

  return LoginAdminView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_13__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "submitCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "submitCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 484 */,
/* 485 */,
/* 486 */,
/* 487 */,
/* 488 */,
/* 489 */,
/* 490 */,
/* 491 */,
/* 492 */,
/* 493 */,
/* 494 */,
/* 495 */,
/* 496 */,
/* 497 */,
/* 498 */,
/* 499 */,
/* 500 */,
/* 501 */,
/* 502 */,
/* 503 */,
/* 504 */,
/* 505 */,
/* 506 */,
/* 507 */,
/* 508 */,
/* 509 */,
/* 510 */,
/* 511 */,
/* 512 */,
/* 513 */,
/* 514 */,
/* 515 */,
/* 516 */,
/* 517 */,
/* 518 */,
/* 519 */,
/* 520 */,
/* 521 */,
/* 522 */,
/* 523 */,
/* 524 */,
/* 525 */,
/* 526 */,
/* 527 */,
/* 528 */,
/* 529 */,
/* 530 */,
/* 531 */,
/* 532 */,
/* 533 */,
/* 534 */,
/* 535 */,
/* 536 */,
/* 537 */,
/* 538 */,
/* 539 */,
/* 540 */,
/* 541 */,
/* 542 */,
/* 543 */,
/* 544 */,
/* 545 */,
/* 546 */,
/* 547 */,
/* 548 */,
/* 549 */,
/* 550 */,
/* 551 */,
/* 552 */,
/* 553 */,
/* 554 */,
/* 555 */,
/* 556 */,
/* 557 */,
/* 558 */,
/* 559 */,
/* 560 */,
/* 561 */
/*!**********************!*\
  !*** ./dev/admin.js ***!
  \**********************/
/*! no exports provided */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ 292);
/* harmony import */ var App_Admin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! App/Admin */ 403);


Object(bootstrap__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(App_Admin__WEBPACK_IMPORTED_MODULE_1__["default"]);

/***/ }),
/* 562 */
/*!***************************************!*\
  !*** ./dev/View/Popup/DomainAlias.js ***!
  \***************************************/
/*! exports provided: DomainAliasPopupView, 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__, "DomainAliasPopupView", function() { return DomainAliasPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DomainAliasPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* 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 _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/Admin/Domain */ 164);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Helper/Apps/Admin */ 68);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);




var _dec, _dec2, _class, _class2;














var DomainAliasPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["popup"])({
  name: 'View/Popup/DomainAlias',
  templateID: 'PopupsDomainAlias'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["command"])(function (self) {
  return self.canBeSaved();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(DomainAliasPopupView, _AbstractViewNext);

  function DomainAliasPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.saving = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.savingError = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.name = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.name.focused = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.alias = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.domains = Stores_Admin_Domain__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].domainsWithoutAliases;
    _this.domainsOptions = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, _this.domains(), function (item) {
        return {
          optValue: item.name,
          optText: item.name
        };
      });
    });
    _this.canBeSaved = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return !_this.saving() && '' !== _this.name() && '' !== _this.alias();
    });
    _this.onDomainAliasCreateOrSaveResponse = ___WEBPACK_IMPORTED_MODULE_6___default.a.bind(_this.onDomainAliasCreateOrSaveResponse, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    return _this;
  }

  var _proto = DomainAliasPopupView.prototype;

  _proto.createCommand = function createCommand() {
    this.saving(true);
    Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].createDomainAlias(this.onDomainAliasCreateOrSaveResponse, this.name(), this.alias());
  };

  _proto.onDomainAliasCreateOrSaveResponse = function onDomainAliasCreateOrSaveResponse(result, data) {
    this.saving(false);

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["StorageResultType"].Success === result && data) {
      if (data.Result) {
        Object(Helper_Apps_Admin__WEBPACK_IMPORTED_MODULE_13__[/* getApp */ "a"])().reloadDomainList();
        this.closeCommand();
      } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].DomainAlreadyExists === data.ErrorCode) {
        this.savingError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('ERRORS/DOMAIN_ALREADY_EXISTS'));
      }
    } else {
      this.savingError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('ERRORS/UNKNOWN_ERROR'));
    }
  };

  _proto.onShow = function onShow() {
    this.clearForm();
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    if ('' === this.name() && !Common_Globals__WEBPACK_IMPORTED_MODULE_9__["bMobileDevice"]) {
      this.name.focused(true);
    }
  };

  _proto.clearForm = function clearForm() {
    this.saving(false);
    this.savingError('');
    this.name('');
    this.name.focused(false);
    this.alias('');
  };

  return DomainAliasPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_15__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "createCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default()(_class2.prototype, "createCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 563 */
/*!**********************************!*\
  !*** ./dev/View/Popup/Plugin.js ***!
  \**********************************/
/*! exports provided: PluginPopupView, 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__, "PluginPopupView", function() { return PluginPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return PluginPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* 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 _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Remote/Admin/Ajax */ 18);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);




var _dec, _dec2, _class, _class2;













var PluginPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["popup"])({
  name: 'View/Popup/Plugin',
  templateID: 'PopupsPlugin'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["command"])(function (self) {
  return self.hasConfiguration();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(PluginPopupView, _AbstractViewNext);

  function PluginPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.onPluginSettingsUpdateResponse = ___WEBPACK_IMPORTED_MODULE_6___default.a.bind(_this.onPluginSettingsUpdateResponse, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.saveError = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.name = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.readme = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.configures = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observableArray([]);
    _this.hasReadme = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return '' !== _this.readme();
    });
    _this.hasConfiguration = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return 0 < _this.configures().length;
    });
    _this.readmePopoverConf = {
      'placement': 'right',
      'trigger': 'hover',
      'title': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["i18n"])('POPUPS_PLUGIN/TOOLTIP_ABOUT_TITLE'),
      'container': 'body',
      'html': true,
      'content': function content() {
        return "<pre>" + _this.readme() + "</pre>";
      }
    };
    _this.bDisabeCloseOnEsc = true;
    _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_9__["KeyState"].All;
    _this.tryToClosePopup = ___WEBPACK_IMPORTED_MODULE_6___default.a.debounce(___WEBPACK_IMPORTED_MODULE_6___default.a.bind(_this.tryToClosePopup, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this)), Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time200ms);
    return _this;
  }

  var _proto = PluginPopupView.prototype;

  _proto.saveCommand = function saveCommand() {
    var list = {};
    list.Name = this.name();

    ___WEBPACK_IMPORTED_MODULE_6___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_12__[/* default */ "a"].pluginSettingsUpdate(this.onPluginSettingsUpdateResponse, list);
  };

  _proto.onPluginSettingsUpdateResponse = function onPluginSettingsUpdateResponse(result, data) {
    if (Common_Enums__WEBPACK_IMPORTED_MODULE_9__["StorageResultType"].Success === result && data && data.Result) {
      this.cancelCommand();
    } else {
      this.saveError('');

      if (data && data.ErrorCode) {
        this.saveError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["getNotification"])(data.ErrorCode));
      } else {
        this.saveError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_9__["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_10__["isNonEmptyArray"])(config)) {
        this.configures(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, config, function (item) {
          return {
            'value': ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(item[0]),
            'placeholder': ko__WEBPACK_IMPORTED_MODULE_7__[/* 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 */ 238);

    if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["isPopupVisible"])(PopupsAskViewModel)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_13__["showScreenPopup"])(PopupsAskViewModel, [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["i18n"])('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () {
        if (_this2.modalVisibility()) {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["delegateRun"])(_this2, 'cancelCommand');
        }
      }]);
    }
  };

  _proto.onBuild = function onBuild() {
    var _this3 = this;

    key__WEBPACK_IMPORTED_MODULE_8___default()('esc', Common_Enums__WEBPACK_IMPORTED_MODULE_9__["KeyState"].All, function () {
      if (_this3.modalVisibility()) {
        _this3.tryToClosePopup();
      }

      return false;
    });
  };

  return PluginPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_14__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "saveCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default()(_class2.prototype, "saveCommand"), _class2.prototype)), _class2)) || _class);


/***/ })
/******/ ]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9FbnVtcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwva28uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9VdGlscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuX1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvd1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yYWdlL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vR2xvYmFscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cualF1ZXJ5XCIiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0tub2luLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vVHJhbnNsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9MaW5rcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1JlbW90ZS9BZG1pbi9BamF4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5rZXlcIiIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NvbnN0cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vQWJzdHJhY3RWaWV3TmV4dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1NvY2lhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc2V0LXRpbWVvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vUGx1Z2lucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWRtaW4vQ29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc2V0LWludGVydmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vTW9tZW50b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuaGFzaGVyXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvSGVscGVyL0FwcHMvQWRtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW50cnktdmlydHVhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0xhbmd1YWdlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9FbWFpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3RJbnB1dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0NhcGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL1BhY2thZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cubW9tZW50XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LnByb2dyZXNzSnNcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9BcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vSmFzc2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVGhlbWUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9QbHVnaW4uanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0U2NyZWVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LnNzbVwiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9Eb21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmNyb3Nzcm9hZHNcIiIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0Q2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VtYWlsanMtYWRkcmVzc3BhcnNlci9kaXN0L2FkZHJlc3NwYXJzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2h0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLm1hdGNoLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQ2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9IdG1sRWRpdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwvT3BlbnRpcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGlrYWRheS9waWthZGF5LmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5BdXRvbGlua2VyXCIiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9NaW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvQXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LWludGVydmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzLmpzIiwid2VicGFjazovLy8uL2Rldi9ib290c3RyYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BYnN0cmFjdEFwcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWJzdHJhY3RBamF4LmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWJzdHJhY3RTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQXBwL0Fic3RyYWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Lbm9pbi9BYnN0cmFjdEJvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdFJhZGlvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWh0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS90cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N0cmluZy92aXJ0dWFsL3RyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zYW1lLXZhbHVlLmpzIiwid2VicGFjazovLy8uL2Rldi9IdG1sL1ByZXZpZXdNZXNzYWdlLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9TYXZlVHJpZ2dlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0lucHV0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2VsZWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvUmFkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9UZXh0QXJlYS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9TY3JpcHQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9NYXRlcmlhbERlc2lnbi9DaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQXBwL0FkbWluLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0RvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2NyZWVuL0FkbWluL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9HZW5lcmFsLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9Eb21haW5zLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9Mb2dpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vQ29udGFjdHMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL1NlY3VyaXR5LmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9Tb2NpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL1BsdWdpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL1BhY2thZ2VzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9BYm91dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vQnJhbmRpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9BZG1pbi9TZXR0aW5ncy9QYW5lLmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L2FkbWluLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0RvbWFpbkFsaWFzLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL1BsdWdpbi5qcyJdLCJuYW1lcyI6WyJGaWxlVHlwZSIsIlN0b3JhZ2VSZXN1bHRUeXBlIiwiRm9jdXNlZCIsIlN0YXRlIiwiU3RhdGVUeXBlIiwiQ2FwYSIsIktleVN0YXRlIiwiRm9sZGVyVHlwZSIsIlNlcnZlckZvbGRlclR5cGUiLCJMb2dpblNpZ25NZVR5cGVBc1N0cmluZyIsIkxvZ2luU2lnbk1lVHlwZSIsIkNvbXBvc2VUeXBlIiwiVXBsb2FkRXJyb3JDb2RlIiwiU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiIsIkNsaWVudFNpZGVLZXlOYW1lIiwiRXZlbnRLZXlDb2RlIiwiTWVzc2FnZVNldEFjdGlvbiIsIk1lc3NhZ2VTZWxlY3RBY3Rpb24iLCJEZXNrdG9wTm90aWZpY2F0aW9uIiwiTWVzc2FnZVByaW9yaXR5IiwiRWRpdG9yRGVmYXVsdFR5cGUiLCJTZXJ2ZXJTZWN1cmUiLCJTZWFyY2hEYXRlVHlwZSIsIlNhdmVTZXR0aW5nc1N0ZXAiLCJMYXlvdXQiLCJGaWx0ZXJDb25kaXRpb25GaWVsZCIsIkZpbHRlckNvbmRpdGlvblR5cGUiLCJGaWx0ZXJzQWN0aW9uIiwiRmlsdGVyUnVsZXNUeXBlIiwiU2lnbmVkVmVyaWZ5U3RhdHVzIiwiQ29udGFjdFByb3BlcnR5VHlwZSIsIk1hZ2ljcyIsIlBvcnRzIiwiTm90aWZpY2F0aW9uIiwia28iLCJ3aW5kb3ciLCIkd2luIiwiJCIsImZEaXNwb3NhbFRvb2x0aXBIZWxwZXIiLCJlbGVtZW50IiwidXRpbHMiLCJkb21Ob2RlRGlzcG9zYWwiLCJhZGREaXNwb3NlQ2FsbGJhY2siLCJfX29wZW50aXAiLCJkZWFjdGl2YXRlIiwiYmluZGluZ0hhbmRsZXJzIiwidXBkYXRlV2lkdGgiLCJpbml0IiwiZlZhbHVlQWNjZXNzb3IiLCIkZWwiLCJmVmFsdWUiLCJmSW5pdCIsIndpZHRoIiwiVGltZTUwMG1zIiwib24iLCJvZmYiLCJlZGl0b3IiLCJIdG1sRWRpdG9yIiwicmVxdWlyZSIsImRlZmF1bHQiLCJmVXBkYXRlRWRpdG9yVmFsdWUiLCJfX2VkaXRvciIsInNldEh0bWxPclBsYWluIiwiZlVwZGF0ZUtvVmFsdWUiLCJnZXREYXRhV2l0aEh0bWxNYXJrIiwiZk9uUmVhZHkiLCJpc09ic2VydmFibGUiLCJfX2ZldGNoRWRpdG9yVmFsdWUiLCJzdWJzY3JpYmUiLCJqc29uIiwidGV4dCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bndyYXAiLCJ1cGRhdGUiLCJzY3JvbGxlclNoYWRvd3MiLCJsaW1pdCIsImNvbnQiLCJmRnVuYyIsIl8iLCJ0aHJvdHRsZSIsInRvZ2dsZUNsYXNzIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwicGlrYWRheSIsImZBbGxCaW5kaW5nc0FjY2Vzc29yIiwidmlld01vZGVsIiwiYmluZGluZ0NvbnRleHQiLCJ0ZXh0SW5wdXQiLCJQaWthZGF5IiwiX19waWthZGF5IiwiZmllbGQiLCJ2aXNpYmxlQW5pbWF0ZWQiLCJhZGRDbGFzcyIsInNob3ciLCJoaWRlIiwiZGVsYXkiLCJyZW1vdmVDbGFzcyIsInRvb2x0aXAiLCJpc01vYmlsZSIsImRhdGEiLCJpc0kxOE4iLCJHbG9iYWxzIiwiYk1vYmlsZURldmljZSIsInNWYWx1ZSIsImlzRnVuY3Rpb24iLCJPcGVudGlwIiwiZHJvcGRvd25WaXNpYmlsaXR5IiwidiIsInNldENvbnRlbnQiLCJhY3RpdmF0ZSIsIlRyYW5zbGF0b3IiLCJpMThuIiwidHJpZ2dlciIsInRvb2x0aXBFcnJvclRpcCIsInN0eWxlIiwiaGlkZU9uIiwidGlwSm9pbnQiLCJkb2N1bWVudCIsInZhbHVlIiwib3BlblRpcHMiLCJpcyIsIlRpbWUxMDBtcyIsInJlZ2lzdHJhdGVCb290c3RyYXBEcm9wZG93biIsImFCb290c3RyYXBEcm9wZG93bnMiLCJwdXNoIiwiY2xpY2siLCJkZXRlY3REcm9wZG93blZpc2liaWxpdHkiLCJvcGVuRHJvcGRvd25UcmlnZ2VyIiwiaGFzQ2xhc3MiLCJkcm9wZG93biIsImZvY3VzIiwiZHJvcGRvd25DbG9zZXIiLCJjbG9zZXN0IiwicG9wb3ZlciIsImNzc3RleHQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsInJlc2l6ZWNyb3AiLCJvbktleURvd24iLCJldmVudCIsImNhbGwiLCJvbkVudGVyIiwicGFyc2VJbnQiLCJrZXlDb2RlIiwib25TcGFjZSIsIm9uVGFiIiwic2hpZnRLZXkiLCJvbkVzYyIsImNsaWNrT25UcnVlIiwibW9kYWwiLCJVdGlscyIsIndpbmRvd1Jlc2l6ZUNhbGxiYWNrIiwiJGh0bWwiLCJtb21lbnQiLCJtb21lbnRUb05vZGUiLCJpMThuSW5pdCIsImkxOG5Ub05vZGVzIiwidHJhbnNsYXRvckluaXQiLCJpMThuVXBkYXRlIiwibGluayIsImF0dHIiLCJ0aXRsZSIsInRleHRGIiwiaW5pdERvbSIsImluaXRGaXhlZFRyaWdnZXIiLCJ2YWx1ZXMiLCJ0b3AiLCIkY29udGFpbmVyIiwicmVzaXplIiwib2Zmc2V0IiwiY3NzIiwiaW5pdFJlc2l6ZVRyaWdnZXIiLCJvRWxlbWVudCIsInBJbnQiLCJzaXplIiwiaGVpZ2h0IiwiYXBwZW5kRG9tIiwiZW1wdHkiLCJhcHBlbmQiLCJkcmFnZ2FibGUiLCJ0cmlnZ2VyWm9uZSIsInNjcm9sbFNwZWVkIiwiZkFsbFZhbHVlRnVuYyIsImRyb3BwYWJsZVNlbGVjdG9yIiwiY29uZiIsImRpc3RhbmNlIiwiaGFuZGxlIiwiY3Vyc29yQXQiLCJsZWZ0IiwicmVmcmVzaFBvc2l0aW9ucyIsInNjcm9sbCIsImRyYWciLCJzdG9wIiwiaGVscGVyIiwiZWFjaCIsIiR0aGlzIiwiYm90dG9tUG9zIiwiY2xlYXJJbnRlcnZhbCIsInBhZ2VYIiwicGFnZVkiLCJtb3ZlVXAiLCJ3aW5kb3dSZXNpemUiLCJtb3ZlRG93biIsInRhcmdldCIsImRhdGFGb3IiLCJyZW1vdmVJbkZvY3VzIiwiZHJvcHBhYmxlIiwiZlZhbHVlRnVuYyIsImZPdmVyQ2FsbGJhY2siLCJkcm9wcGFibGVPdmVyIiwiZk91dENhbGxiYWNrIiwiZHJvcHBhYmxlT3V0IiwidG9sZXJhbmNlIiwiaG92ZXJDbGFzcyIsImRyb3AiLCJvdmVyIiwib3V0IiwidWkiLCJuYW5vIiwiU2V0dGluZ3MiLCJiRGlzYWJsZU5hbm9TY3JvbGwiLCJhcHBTZXR0aW5nc0dldCIsIm5hbm9TY3JvbGxlciIsImlPU05hdGl2ZVNjcm9sbGluZyIsInByZXZlbnRQYWdlU2Nyb2xsaW5nIiwic2F2ZVRyaWdnZXIiLCJ0b1N0cmluZyIsImVuZCIsImVtYWlsc1RhZ3MiLCJFbWFpbE1vZGVsIiwiZkFsbEJpbmRpbmdzIiwiZkF1dG9Db21wbGV0ZVNvdXJjZSIsImF1dG9Db21wbGV0ZVNvdXJjZSIsImlucHV0RGVsaW1pdGVycyIsImZGb2N1c0NhbGxiYWNrIiwiZm9jdXNlZCIsImlucHV0b3NhdXJ1cyIsInBhcnNlT25CbHVyIiwiYWxsb3dEcmFnQW5kRHJvcCIsImZvY3VzQ2FsbGJhY2siLCJzcGxpdEhvb2siLCJpbmRleE9mIiwic3Vic3RyIiwic3BsaXRFbWFpbExpbmUiLCJwYXJzZUhvb2siLCJpbnB1dCIsImZsYXR0ZW4iLCJpbnB1dFZhbHVlIiwicGFyc2VFbWFpbExpbmUiLCJsZW5ndGgiLCJpdGVtIiwiaXNPYmplY3QiLCJ0b0xpbmUiLCJjaGFuZ2UiLCIkb0VsIiwidmFsIiwiY29tbWFuZCIsImpxRWxlbWVudCIsImlzQ29tbWFuZCIsIkVycm9yIiwiZW5hYmxlZCIsIm9ic2VydmFibGUiLCJjYW5FeGVjdXRlIiwiX19yZWFsQ2FuRXhlY3V0ZSIsImNvbXB1dGVkIiwicmVzdWx0IiwicHJvcCIsImV4dGVuZGVycyIsInRyaW1tZXIiLCJyZWFkIiwid3JpdGUiLCJuZXdWYWx1ZSIsInBvc0ludGVyZXIiLCJkZWZhdWx0VmFsIiwibGltaXRlZExpc3QiLCJjdXJyZW50VmFsdWUiLCJsaXN0IiwiaXNOb25FbXB0eUFycmF5IiwiaW5BcnJheSIsImV4dGVuZCIsIm5vdGlmeSIsInZhbHVlSGFzTXV0YXRlZCIsInJldmVyc2libGUiLCJjb21taXQiLCJyZXZlcnNlIiwiY29tbWl0ZWRWYWx1ZSIsInRvZ2dsZVN1YnNjcmliZSIsIm9wdGlvbnMiLCJ0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eSIsInByZXYiLCJuZXh0IiwiZmFsc2VUaW1lb3V0Iiwib3B0aW9uIiwiaUZhbHNlVGltZW91dFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzcGVjaWFsVGhyb3R0bGUiLCJpU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlIiwiaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQiLCJ2YWx1ZUZvclJlYWQiLCJiVmFsdWUiLCJpZGxlVHJpZ2dlciIsIklkbGUiLCJmbiIsInZhbGlkYXRlTm9uZSIsImhhc0Vycm9yIiwidmFsaWRhdGVFbWFpbCIsInRlc3QiLCJ2YWxpZGF0ZVNpbXBsZUVtYWlsIiwiZGVsZXRlQWNjZXNzSGVscGVyIiwidmFsaWRhdGVGdW5jIiwiaGFzRnVuY0Vycm9yIiwidHJpbSIsImlzQXJyYXkiLCJpc0Z1bmMiLCJpc1VuZCIsImlzVW5kZWZpbmVkIiwiaXNOdWxsIiwiaGFzIiwiYmluZCIsIm5vb3AiLCJub29wVHJ1ZSIsIm5vb3BGYWxzZSIsInNpbGVudFRyeUNhdGNoIiwiZnVuYyIsImUiLCJpc05vcm1hbCIsImlzUG9zTnVtZXJpYyIsImluY2x1ZGVaZXJvIiwiZGVmYXVsdFZhbHVyIiwiaXNOYU4iLCJwU3RyaW5nIiwicEJvb2wiLCJib29sVG9BamF4IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY29tcG9uZW50IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZGVjb2RlVVJJIiwidXJsIiwiZW5jb2RlVVJJIiwic2ltcGxlUXVlcnlQYXJzZXIiLCJxdWVyeVN0cmluZyIsImluZGV4IiwibGVuIiwidGVtcCIsInF1ZXJpZXMiLCJzcGxpdCIsInBhcmFtcyIsImZha2VNZDUiLCJsaW5lIiwibGluZUxlbiIsIk1hdGgiLCJyb3VuZCIsInJhbmRvbSIsImVuY29kZUh0bWwiLCJlc2NhcGUiLCJzcGxpdFBsYWluVGV4dCIsInByZWZpeCIsInN1YlRleHQiLCJzcGFjZVBvcyIsIm5ld0xpbmVQb3MiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInRpbWVPdXRBY3Rpb24iLCJ0aW1lT3V0cyIsImFjdGlvbiIsImZGdW5jdGlvbiIsInRpbWVPdXQiLCJ0aW1lT3V0QWN0aW9uU2Vjb25kIiwiZGVNb2R1bGUiLCJtIiwiaW5Gb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJfX2luRm9jdXNDYWNoZSIsImZvcmNlIiwiYmx1ciIsImFjdGl2ZUVsIiwicmVtb3ZlU2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwic2VsIiwicmVtb3ZlQWxsUmFuZ2VzIiwic2VsZWN0aW9uIiwicmVwbHlTdWJqZWN0QWRkIiwic3ViamVjdCIsInRvVXBwZXJDYXNlIiwicmVwbGFjZSIsInJlIiwiZndkIiwicGFydHMiLCJwcmVmaXhJc1JlIiwicGFydCIsInRyaW1tZWRQYXJ0Iiwiam9pbiIsInJvdW5kTnVtYmVyIiwibnVtIiwiZGVjIiwicG93IiwiZnJpZW5kbHlTaXplIiwic2l6ZUluQnl0ZXMiLCJsb2ciLCJkZXNjIiwiY29uc29sZSIsImRlbGVnYXRlUnVuIiwib2JqZWN0IiwibWV0aG9kTmFtZSIsImtpbGxDdHJsQUN0cmxTIiwiY3RybEtleSIsImFsdEtleSIsImtleSIsIndoaWNoIiwiUyIsInByZXZlbnREZWZhdWx0IiwiQSIsInNlbmRlciIsInNyY0VsZW1lbnQiLCJjb250ZW50RWRpdGFibGUiLCJ0YWdOYW1lIiwibWF0Y2giLCJjbGVhciIsImNyZWF0ZUNvbW1hbmRMZWdhY3kiLCJjb250ZXh0IiwiZkV4ZWN1dGUiLCJmQ2FuRXhlY3V0ZSIsImZSZXN1bHQiLCJmTm9uRW1wdHkiLCJhcmdzIiwiYXBwbHkiLCJjb252ZXJ0VGhlbWVOYW1lIiwibWVtb2l6ZSIsInRoZW1lIiwicXVvdGVOYW1lIiwibmFtZSIsIm1pY3JvdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwidGltZXN0YW1wIiwiY29udmVydExhbmdOYW1lIiwibGFuZ3VhZ2UiLCJpc0VuZyIsImRyYWdnYWJsZVBsYWNlIiwiYXBwZW5kVG8iLCJkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIiLCJkb21JdGVtIiwiZGlzYWJsZWQiLCJjbGVhckJxU3dpdGNoZXIiLCJib2R5IiwicmVtb3ZlIiwicmVtb3ZlQXR0ciIsInByZXZpZXdNZXNzYWdlIiwiaXNIdG1sIiwicHJpbnQiLCJkYXRlIiwiZnJvbUNyZWRzIiwidG9DcmVkcyIsInRvTGFiZWwiLCJjY0NsYXNzIiwiY2NDcmVkcyIsImNjTGFiZWwiLCJ3aW4iLCJvcGVuIiwiZG9jIiwiYm9keUNsb25lIiwiY2xvbmUiLCJib2R5Q2xhc3MiLCJodG1sIiwiY2xvc2UiLCJzZXR0aW5nc1NhdmVIZWxwZXJGdW5jdGlvbiIsImZDYWxsYmFjayIsImtvVHJpZ2dlciIsInRpbWVyIiwidHlwZSIsImNhY2hlZCIsInJlcXVlc3RBY3Rpb24iLCJyZXF1ZXN0UGFyYW1ldGVycyIsIlJlc3VsdCIsIlRydWVSZXN1bHQiLCJGYWxzZVJlc3VsdCIsInNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uIiwic2V0dGluZ3NTYXZlSGVscGVyU3Vic2NyaWJlRnVuY3Rpb24iLCJyZW1vdGUiLCJzZXR0aW5nTmFtZSIsImZUcmlnZ2VyRnVuY3Rpb24iLCJzYXZlQWRtaW5Db25maWciLCJzYXZlU2V0dGluZ3MiLCJmaW5kRW1haWxBbmRMaW5rcyIsIkF1dG9saW5rZXIiLCJuZXdXaW5kb3ciLCJzdHJpcFByZWZpeCIsInVybHMiLCJlbWFpbCIsIm1lbnRpb24iLCJwaG9uZSIsImhhc2h0YWciLCJyZXBsYWNlRm4iLCJnZXRUeXBlIiwibWF0Y2hlZFRleHQiLCJodG1sVG9QbGFpbiIsInBvcyIsImlQMSIsImlQMiIsImlQMyIsImNvbnZlcnRCbG9ja3F1b3RlIiwiYmxvY2txdW90ZVRleHQiLCJjb252ZXJ0RGl2cyIsImRpdlRleHQiLCJjb252ZXJ0UHJlIiwiZml4QXR0aWJ1dGVWYWx1ZSIsImNvbnZlcnRMaW5rcyIsIiRkaXYiLCJwbGFpblRvSHRtbCIsInBsYWluIiwiZmluZEVtYWlsQW5kTGlua3NJblRleHQiLCJiSW4iLCJiRG8iLCJiU3RhcnQiLCJhTmV4dFRleHQiLCJzTGluZSIsImlJbmRleCIsImFUZXh0IiwiZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyIiwiYVN5c3RlbSIsImFMaXN0IiwiYURpc2FibGVkIiwiYUhlYWRlckxpbmVzIiwiaVVuRGVlcCIsImZEaXNhYmxlQ2FsbGJhY2siLCJmVmlzaWJsZUNhbGxiYWNrIiwiZlJlbmFtZUNhbGxiYWNrIiwiYlN5c3RlbSIsImJCdWlsZFVudmlzaWJsZSIsIm9JdGVtIiwiYlNlcCIsImlMZW4iLCJhUmVzdWx0Iiwic0RlZXBQcmVmaXgiLCJpZCIsInN5c3RlbSIsInNlcG9yYXRvciIsImZ1bGxOYW1lUmF3Iiwic2VsZWN0YWJsZSIsInN1YlNjcmliZWQiLCJleGlzdGVuIiwiaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMiLCJVc2VyIiwiQXJyYXkiLCJkZWVwIiwic3ViRm9sZGVycyIsInNlbGVjdEVsZW1lbnQiLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZUNvbnRlbnRzIiwiYWRkUmFuZ2UiLCJjcmVhdGVUZXh0UmFuZ2UiLCJtb3ZlVG9FbGVtZW50VGV4dCIsInNlbGVjdCIsImRlYm91bmNlIiwiR2xvYmFsc0RhdGEiLCJ0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UiLCJjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGUiLCJnZXRDb25maWd1cmF0aW9uRnJvbVNjcmlwdFRhZyIsImNvbmZpZ3VyYXRpb24iLCJwYXJzZSIsImRpc3Bvc2VPbmUiLCJwcm9wT3JWYWx1ZSIsImRpc3Bvc2FibGUiLCJkaXNwb3NlIiwiZGlzcG9zZU9iamVjdCIsImRpc3Bvc2FibGVzIiwib2JqZWN0Rm9yRWFjaCIsImRlbGVnYXRlUnVuT25EZXN0cm95Iiwib2JqZWN0T3JPYmplY3RzIiwib25EZXN0cm95IiwiYXBwZW5kU3R5bGVzIiwiJHN0eWxlVGFnIiwiX190aGVtZVRpbWVyIiwiX190aGVtZUFqYXgiLCJjaGFuZ2VUaGVtZSIsInRoZW1lVHJpZ2dlciIsInRoZW1lTGluayIsImNsZWFyVGltZXIiLCJ0aGVtZVN0eWxlIiwiQW5pbWF0ZSIsImFib3J0IiwiYWpheCIsImRhdGFUeXBlIiwidGhlbiIsImFmdGVyIiwiY29tcHV0ZWRQYWdlbmF0b3JIZWxwZXIiLCJrb0N1cnJlbnRQYWdlIiwia29QYWdlQ291bnQiLCJjdXJyZW50UGFnZSIsInBhZ2VDb3VudCIsImZBZGQiLCJjdXN0b21OYW1lIiwiY3VycmVudCIsImN1c3RvbSIsInVuc2hpZnQiLCJnZXRGaWxlRXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsInBvcCIsIm1pbWVDb250ZW50VHlwZSIsImV4dCIsIk1pbWUiLCJpc1RyYW5zcGFyZW50IiwiY29sb3IiLCJnZXRSZWFsSGVpZ2h0IiwiJGhjb250IiwicmVzaXplQW5kQ3JvcCIsImltZyIsIkltYWdlIiwib25sb2FkIiwiZGlmZiIsImNhbnZhcyIsImNyZWF0ZUVsZW1lbnQiLCJjdHgiLCJnZXRDb250ZXh0IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJkcmF3SW1hZ2UiLCJ0b0RhdGFVUkwiLCJzcmMiLCJtYWlsVG9IZWxwZXIiLCJtYWlsVG9VcmwiLCJQb3B1cENvbXBvc2VWaWV3TW9kZWwiLCJ0byIsImNjIiwiYmNjIiwicXVlcnkiLCJzaG93U2NyZWVuUG9wdXAiLCJFbXB0eSIsImRvbVJlYWR5IiwidGltZW91dCIsIlN0cmluZyIsInN0ciIsInN0YXJ0IiwiU0VUVElOR1MiLCJfX3JsYWhfZGF0YSIsIkFQUF9TRVRUSU5HUyIsIlN5c3RlbSIsInNldHRpbmdzR2V0Iiwic2V0dGluZ3NTZXQiLCJjYXBhIiwiX19zaXplcyIsIiRkb2MiLCIkYm9keSIsInBvc2l0aW9uIiwic3RhcnRNaWNyb3RpbWUiLCJyYXRlTGltaXQiLCJ1c2VLZXlib2FyZFNob3J0Y3V0cyIsInNVc2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJiSUUiLCJiQ2hyb21lIiwiYlNhZmFyaSIsImJBbmltYXRpb25TdXBwb3J0ZWQiLCJiWE1MSHR0cFJlcXVlc3RTdXBwb3J0ZWQiLCJYTUxIdHRwUmVxdWVzdCIsImJJc0h0dHBzIiwibG9jYXRpb24iLCJwcm90b2NvbCIsImh0bWxFZGl0b3JEZWZhdWx0Q29uZmlnIiwiZ3JvdXBzIiwiaHRtbEVkaXRvckxhbmdzTWFwIiwiYkFsbG93UGRmUHJldmlldyIsIm1pbWVUeXBlcyIsIlZJRVdfTU9ERUxTIiwic2V0dGluZ3MiLCJtb3ZlQWN0aW9uIiwibGVmdFBhbmVsRGlzYWJsZWQiLCJsZWZ0UGFuZWxUeXBlIiwibGVmdFBhbmVsV2lkdGgiLCJwb3B1cFZpc2liaWxpdHlOYW1lcyIsIm9ic2VydmFibGVBcnJheSIsInBvcHVwVmlzaWJpbGl0eSIsImtleVNjb3BlUmVhbCIsIkFsbCIsImtleVNjb3BlRmFrZSIsImtleVNjb3BlIiwiTWVudSIsIkNvbXBvc2UiLCJmaWx0ZXIiLCJlbCIsImNsYXNzTmFtZSIsInNldFNjb3BlIiwiZ2V0U2NvcGUiLCJfX0FQUF9fIiwiaUFqYXhFcnJvckNvdW50IiwiaVRva2VuRXJyb3JDb3VudCIsImlNZXNzYWdlQm9keUNhY2hlQ291bnQiLCJiVW5sb2FkIiwiY3VycmVudFNjcmVlbiIsImRlZmF1bHRTY3JlZW5OYW1lIiwiU0NSRUVOUyIsIlZpZXdUeXBlIiwiUG9wdXAiLCJMZWZ0IiwiUmlnaHQiLCJDZW50ZXIiLCJoaWRlTG9hZGluZyIsImNyZWF0ZUNvbW1hbmQiLCJhZGRTZXR0aW5nc1ZpZXdNb2RlbCIsIlNldHRpbmdzVmlld01vZGVsQ2xhc3MiLCJ0ZW1wbGF0ZSIsImxhYmVsTmFtZSIsInJvdXRlIiwiaXNEZWZhdWx0IiwiX19ybFNldHRpbmdzRGF0YSIsIkxhYmVsIiwiVGVtcGxhdGUiLCJSb3V0ZSIsIklzRGVmYXVsdCIsInJlbW92ZVNldHRpbmdzVmlld01vZGVsIiwiZGlzYWJsZVNldHRpbmdzVmlld01vZGVsIiwicm91dGVPZmYiLCJoYXNoZXIiLCJjaGFuZ2VkIiwiYWN0aXZlIiwicm91dGVPbiIsInNjcmVlbiIsInNjcmVlbk5hbWUiLCJnZXRTY3JlZW5Qb3B1cCIsIlBvcHVWaWV3TW9kZWxDbGFzcyIsImhpZGVTY3JlZW5Qb3B1cCIsIlZpZXdNb2RlbENsYXNzVG9IaWRlIiwiTW9kYWxWaWV3IiwiX192bSIsIl9fZG9tIiwibW9kYWxWaXNpYmlsaXR5Iiwidm1SdW5Ib29rIiwiaG9va05hbWUiLCJWaWV3TW9kZWxDbGFzcyIsIl9fbmFtZXMiLCJydW5Ib29rIiwiYnVpbGRWaWV3TW9kZWwiLCJ2bVNjcmVlbiIsIl9fYnVpbGRlZCIsInZtRG9tIiwidm0iLCJfX3R5cGUiLCJ2bVBsYWNlIiwib25TaG93VHJpZ2dlciIsIm9uSGlkZVRyaWdnZXIiLCJ2aWV3TW9kZWxOYW1lIiwiX19uYW1lIiwidmlld01vZGVsTmFtZXMiLCJ2aWV3TW9kZWxUZW1wbGF0ZUlEIiwiX190ZW1wbGF0ZUlEIiwidmlld01vZGVsUG9zaXRpb24iLCJ2aWV3TW9kZWxEb20iLCJjYW5jZWxDb21tYW5kIiwiY2xvc2VDb21tYW5kIiwic3RvcmVBbmRTZXRLZXlTY29wZSIsInJlc3RvcmVLZXlTY29wZSIsImFwcGx5QmluZGluZ0FjY2Vzc29yc1RvTm9kZSIsInJlZ2lzdGVyUG9wdXBLZXlEb3duIiwiVmlld01vZGVsQ2xhc3NUb1Nob3ciLCJ3YXJtVXBTY3JlZW5Qb3B1cCIsImlzUG9wdXBWaXNpYmxlIiwic2NyZWVuT25Sb3V0ZSIsInN1YlBhcnQiLCJpc1NhbWVTY3JlZW4iLCJjcm9zcyIsIl9fc3RhcnRlZCIsInZpZXdNb2RlbHMiLCJkZWZlciIsInZpZXdNb2RlbFZpc2liaWxpdHkiLCJfX2Nyb3NzIiwic3RhcnRTY3JlZW5zIiwic2NyZWVuc0NsYXNzZXMiLCJDU2NyZWVuIiwiX19zdGFydCIsImNyb3Nzcm9hZHMiLCJjcmVhdGUiLCJhZGRSb3V0ZSIsImluaXRpYWxpemVkIiwiYWRkIiwic2V0SGFzaCIsImhhc2giLCJzaWxlbmNlIiwiY21kIiwidmlld0RlY29yYXRvciIsInRlbXBsYXRlSUQiLCJwb3B1cERlY29yYXRvciIsImNvbW1hbmREZWNvcmF0b3IiLCJkZXNjcmlwdG9yIiwiaW5pdGlhbGl6ZXIiLCJub3JtQ2FuRXhlY3V0ZSIsInNldHRpbmdzTWVudUtleXNIYW5kbGVyIiwiJGl0ZW1zIiwiaGFuZGxlciIsInVwIiwic2hvcnRjdXQiLCJyZXN1bHRIYXNoIiwiZXEiLCJUaW1lMjAwbXMiLCJJMThOX0RBVEEiLCJyYWlubG9vcEkxOE4iLCJJMThOX05PVElGSUNBVElPTl9EQVRBIiwiSTE4Tl9OT1RJRklDQVRJT05fTUFQIiwiSW52YWxpZFRva2VuIiwiQXV0aEVycm9yIiwiQWNjZXNzRXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJDYXB0Y2hhRXJyb3IiLCJTb2NpYWxGYWNlYm9va0xvZ2luQWNjZXNzRGlzYWJsZSIsIlNvY2lhbFR3aXR0ZXJMb2dpbkFjY2Vzc0Rpc2FibGUiLCJTb2NpYWxHb29nbGVMb2dpbkFjY2Vzc0Rpc2FibGUiLCJEb21haW5Ob3RBbGxvd2VkIiwiQWNjb3VudE5vdEFsbG93ZWQiLCJBY2NvdW50VHdvRmFjdG9yQXV0aFJlcXVpcmVkIiwiQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvciIsIkNvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkIiwiQ3VycmVudFBhc3N3b3JkSW5jb3JyZWN0IiwiTmV3UGFzc3dvcmRTaG9ydCIsIk5ld1Bhc3N3b3JkV2VhayIsIk5ld1Bhc3N3b3JkRm9yYmlkZGVuIiwiQ29udGFjdHNTeW5jRXJyb3IiLCJDYW50R2V0TWVzc2FnZUxpc3QiLCJDYW50R2V0TWVzc2FnZSIsIkNhbnREZWxldGVNZXNzYWdlIiwiQ2FudE1vdmVNZXNzYWdlIiwiQ2FudENvcHlNZXNzYWdlIiwiQ2FudFNhdmVNZXNzYWdlIiwiQ2FudFNlbmRNZXNzYWdlIiwiSW52YWxpZFJlY2lwaWVudHMiLCJDYW50U2F2ZUZpbHRlcnMiLCJDYW50R2V0RmlsdGVycyIsIkZpbHRlcnNBcmVOb3RDb3JyZWN0IiwiQ2FudENyZWF0ZUZvbGRlciIsIkNhbnRSZW5hbWVGb2xkZXIiLCJDYW50RGVsZXRlRm9sZGVyIiwiQ2FudERlbGV0ZU5vbkVtcHR5Rm9sZGVyIiwiQ2FudFN1YnNjcmliZUZvbGRlciIsIkNhbnRVbnN1YnNjcmliZUZvbGRlciIsIkNhbnRTYXZlU2V0dGluZ3MiLCJDYW50U2F2ZVBsdWdpblNldHRpbmdzIiwiRG9tYWluQWxyZWFkeUV4aXN0cyIsIkNhbnRJbnN0YWxsUGFja2FnZSIsIkNhbnREZWxldGVQYWNrYWdlIiwiSW52YWxpZFBsdWdpblBhY2thZ2UiLCJVbnN1cHBvcnRlZFBsdWdpblBhY2thZ2UiLCJMaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlIiwiTGljZW5zaW5nRXhwaXJlZCIsIkxpY2Vuc2luZ0Jhbm5lZCIsIkRlbW9TZW5kTWVzc2FnZUVycm9yIiwiRGVtb0FjY291bnRFcnJvciIsIkFjY291bnRBbHJlYWR5RXhpc3RzIiwiQWNjb3VudERvZXNOb3RFeGlzdCIsIk1haWxTZXJ2ZXJFcnJvciIsIkludmFsaWRJbnB1dEFyZ3VtZW50IiwiVW5rbm93bk5vdGlmaWNhdGlvbiIsIlVua25vd25FcnJvciIsInZhbHVlTGlzdCIsImRlZmF1bFZhbHVlIiwidmFsdWVOYW1lIiwiaTE4blRvTm9kZSIsImVsZW1lbnRzIiwiYW5pbWF0ZSIsImxldHRlcmZ4IiwicmVsb2FkRGF0YSIsIm1vbWVudG9yUmVsb2FkIiwiaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlIiwiZm9yRWFjaCIsImluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlIiwic3RhcnRDYWxsYmFjayIsImxhbmdDYWxsYmFjayIsImdldE5vdGlmaWNhdGlvbiIsImNvZGUiLCJtZXNzYWdlIiwiZGVmQ29kZSIsIkNsaWVudFZpZXdFcnJvciIsImdldE5vdGlmaWNhdGlvbkZyb21SZXNwb25zZSIsInJlc3BvbnNlIiwiRXJyb3JDb2RlIiwiRXJyb3JNZXNzYWdlIiwiZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlIiwiRmlsZUlzVG9vQmlnIiwiRmlsZVBhcnRpYWxseVVwbG9hZGVkIiwiRmlsZU5vVXBsb2FkZWQiLCJNaXNzaW5nVGVtcEZvbGRlciIsIkZpbGVPblNhdmVpbmdFcnJvciIsInJlbG9hZCIsImFkbWluIiwicmVzb2x2ZSIsInJlamVjdCIsImxhbmdMaW5rIiwiY2FjaGUiLCJpc1J0bCIsIlJPT1QiLCJIQVNIX1BSRUZJWCIsIlNFUlZFUl9QUkVGSVgiLCJTVUJfUVVFUllfUFJFRklYIiwiVkVSU0lPTiIsIldFQl9QUkVGSVgiLCJWRVJTSU9OX1BSRUZJWCIsIlNUQVRJQ19QUkVGSVgiLCJBRE1JTl9IT1NUX1VTRSIsIkFETUlOX1BBVEgiLCJBVVRIX1BSRUZJWCIsInBvcHVsYXRlQXV0aFN1ZmZpeCIsInN1YlF1ZXJ5UHJlZml4Iiwicm9vdCIsInN0YXJ0dXBVcmwiLCJyb290QWRtaW4iLCJyb290VXNlciIsImF0dGFjaG1lbnRSYXciLCJkb3dubG9hZCIsImN1c3RvbVNwZWNTdWZmaXgiLCJhdHRhY2htZW50RG93bmxvYWQiLCJhdHRhY2htZW50UHJldmlldyIsImF0dGFjaG1lbnRUaHVtYm5haWxQcmV2aWV3IiwiYXR0YWNobWVudFByZXZpZXdBc1BsYWluIiwiYXR0YWNobWVudEZyYW1lZCIsInNlcnZlclJlcXVlc3QiLCJ1cGxvYWQiLCJ1cGxvYWRDb250YWN0cyIsInVwbG9hZEJhY2tncm91bmQiLCJtZXNzYWdlVmlld0xpbmsiLCJyZXF1ZXN0SGFzaCIsIm1lc3NhZ2VEb3dubG9hZExpbmsiLCJhdmF0YXJMaW5rIiwicHVibGljTGluayIsInVzZXJCYWNrZ3JvdW5kIiwicGhwSW5mbyIsImxhbmciLCJpc0FkbWluIiwiZXhwb3J0Q29udGFjdHNWY2YiLCJleHBvcnRDb250YWN0c0NzdiIsInNvY2lhbEdvb2dsZSIsInhhdXRoIiwic29jaWFsVHdpdHRlciIsInNvY2lhbEZhY2Vib29rIiwic3RhdGljUHJlZml4IiwicGF0aCIsImVtcHR5Q29udGFjdFBpYyIsInNvdW5kIiwibm90aWZpY2F0aW9uTWFpbEljb24iLCJvcGVuUGdwSnMiLCJvcGVuUGdwV29ya2VySnMiLCJvcGVuUGdwV29ya2VyUGF0aCIsInRoZW1lUHJldmlld0xpbmsiLCJpbmJveCIsImluYm94Rm9sZGVyTmFtZSIsImFib3V0IiwibWFpbEJveCIsImZvbGRlciIsInBhZ2UiLCJzZWFyY2giLCJ0aHJlYWRVaWQiLCJyZXN1bHRUaHJlYWRVaWQiLCJSZW1vdGVBZG1pbkFqYXgiLCJvUmVxdWVzdHMiLCJhZG1pbkxvZ2luIiwic0xvZ2luIiwic1Bhc3N3b3JkIiwiZGVmYXVsdFJlcXVlc3QiLCJhZG1pbkxvZ291dCIsIm9EYXRhIiwic2F2ZUFkbWluQ29uZmlnSGVscGVyIiwidmFsdWVGbiIsImRvbWFpbkxpc3QiLCJiSW5jbHVkZUFsaWFzZXMiLCJwbHVnaW5MaXN0IiwicGFja2FnZXNMaXN0IiwiY29yZURhdGEiLCJ1cGRhdGVDb3JlRGF0YSIsInBhY2thZ2VJbnN0YWxsIiwib1BhY2thZ2UiLCJmaWxlIiwicGFja2FnZURlbGV0ZSIsImRvbWFpbiIsInNOYW1lIiwicGx1Z2luIiwiZG9tYWluRGVsZXRlIiwiZG9tYWluRGlzYWJsZSIsImJEaXNhYmxlZCIsIk5hbWUiLCJEaXNhYmxlZCIsInBsdWdpblNldHRpbmdzVXBkYXRlIiwib0NvbmZpZyIsImxpY2Vuc2luZyIsImJGb3JjZSIsIkZvcmNlIiwibGljZW5zaW5nQWN0aXZhdGUiLCJzRG9tYWluIiwic0tleSIsIkRvbWFpbiIsIktleSIsInBsdWdpbkRpc2FibGUiLCJjcmVhdGVEb21haW5BbGlhcyIsInNBbGlhcyIsIkFsaWFzIiwiY3JlYXRlT3JVcGRhdGVEb21haW4iLCJiQ3JlYXRlIiwic0luY0hvc3QiLCJpSW5jUG9ydCIsInNJbmNTZWN1cmUiLCJiSW5jU2hvcnRMb2dpbiIsImJVc2VTaWV2ZSIsInNTaWV2ZUFsbG93UmF3Iiwic1NpZXZlSG9zdCIsImlTaWV2ZVBvcnQiLCJzU2lldmVTZWN1cmUiLCJzT3V0SG9zdCIsImlPdXRQb3J0Iiwic091dFNlY3VyZSIsImJPdXRTaG9ydExvZ2luIiwiYk91dEF1dGgiLCJiT3V0UGhwTWFpbCIsInNXaGl0ZUxpc3QiLCJ0ZXN0Q29ubmVjdGlvbkZvckRvbWFpbiIsInRlc3RDb250YWN0cyIsInNhdmVOZXdBZG1pblBhc3N3b3JkIiwiYWRtaW5QaW5nIiwiQWJzdHJhY3RBamF4UmVtb3RlIiwiU1VCUyIsInN1YiIsInN1YkZ1bmMiLCJzdWJOYW1lIiwicHViIiwiUGx1Z2lucyIsIml0ZW1zIiwiTUVTU0FHRVNfUEVSX1BBR0UiLCJNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMiLCJDT05UQUNUU19QRVJfUEFHRSIsIkRFRkFVTFRfQUpBWF9USU1FT1VUIiwiU0VBUkNIX0FKQVhfVElNRU9VVCIsIlNFTkRfTUVTU0FHRV9BSkFYX1RJTUVPVVQiLCJTQVZFX01FU1NBR0VfQUpBWF9USU1FT1VUIiwiQ09OVEFDVFNfU1lOQ19BSkFYX1RJTUVPVVQiLCJVTlVTRURfT1BUSU9OX1ZBTFVFIiwiQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FIiwiSU1BUF9ERUZBVUxUX1BPUlQiLCJJTUFQX0RFRkFVTFRfU0VDVVJFX1BPUlQiLCJTTVRQX0RFRkFVTFRfUE9SVCIsIlNNVFBfREVGQVVMVF9TRUNVUkVfUE9SVCIsIlNJRVZFX0RFRkFVTFRfUE9SVCIsIk1FU1NBR0VfQk9EWV9DQUNIRV9MSU1JVCIsIkFKQVhfRVJST1JfTElNSVQiLCJUT0tFTl9FUlJPUl9MSU1JVCIsIlJBSU5MT09QX1RSSUFMX0tFWSIsIkRBVEFfSU1BR0VfVVNFUl9ET1RfUElDIiwiREFUQV9JTUFHRV9UUkFOU1BfUElDIiwiREFUQV9JTUFHRV9MQVpZX1BMQUNFSE9MREVSX1BJQyIsIkFic3RyYWN0Vmlld05leHQiLCJiRGlzYWJlQ2xvc2VPbkVzYyIsInNEZWZhdWx0S2V5U2NvcGUiLCJOb25lIiwic0N1cnJlbnRLZXlTY29wZSIsIkVzYyIsIkJhY2tzcGFjZSIsIlNvY2lhbFN0b3JlIiwiZ29vZ2xlIiwidHdpdHRlciIsImZhY2Vib29rIiwiZHJvcGJveCIsImNsaWVudElEIiwiY2xpZW50U2VjcmV0IiwiYXBpS2V5IiwibG9hZGluZyIsInVzZXJOYW1lIiwibG9nZ2luZWQiLCJhdXRoIiwiYXV0aEdtYWlsIiwiZHJpdmUiLCJwcmV2aWV3IiwiY2xpZW50U2V0dGluZ3MiLCJhcGlLZXlTZXR0aW5ncyIsImFwcElEIiwiYXBwU2VjcmV0Iiwic3VwcG9ydGVkIiwiY29uc3VtZXJLZXkiLCJjb25zdW1lclNlY3JldCIsInBvcHVsYXRlIiwiYXBwZW5kRHJvcGJveCIsIkRyb3Bib3giLCJnZXRFbGVtZW50QnlJZCIsInNjcmlwdCIsImFwcGVuZENoaWxkIiwiQWJzdHJhY3RDb21wb25lbnQiLCJmdW5jVG9EaXNwb3NlIiwiY29tcG9uZW50RXhwb3J0SGVscGVyIiwiQ2xhc3NPYmplY3QiLCJjcmVhdGVWaWV3TW9kZWwiLCJjb21wb25lbnRJbmZvIiwiaW5saW5lIiwiU0lNUExFX0hPT0tTIiwiVVNFUl9WSUVXX01PREVMU19IT09LUyIsIkFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTIiwiYWRkSG9vayIsImNhbGxiYWNrIiwibWFpblNldHRpbmdzR2V0IiwicmVtb3RlUmVxdWVzdCIsInBhcmFtZXRlcnMiLCJhZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluIiwicnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyIsIktub2luIiwidmlldyIsInBsdWdpblNlY3Rpb24iLCJwbHVnaW5zIiwiQ29yZUFkbWluU3RvcmUiLCJjb3JlUmVhbCIsImNvcmVDaGFubmVsIiwiY29yZVR5cGUiLCJjb3JlVXBkYXRhYmxlIiwiY29yZUFjY2VzcyIsImNvcmVXYXJuaW5nIiwiY29yZUNoZWNraW5nIiwiY29yZVVwZGF0aW5nIiwiY29yZVZlcnNpb24iLCJjb3JlUmVtb3RlVmVyc2lvbiIsImNvcmVSZW1vdGVSZWxlYXNlIiwiY29yZVZlcnNpb25Db21wYXJlIiwiX21vbWVudCIsIl9tb21lbnROb3ciLCJ1cGRhdGVNb21lbnROb3ciLCJ1cGRhdGVNb21lbnROb3dVbml4IiwidW5peCIsIm1vbWVudE5vdyIsIm1vbWVudE5vd1VuaXgiLCJzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIiLCJzdWJ0cmFjdCIsImZvcm1hdCIsImZvcm1hdEN1c3RvbVNob3J0RGF0ZSIsIm5vdyIsImZyb21Ob3ciLCJUSU1FIiwieWVhciIsInRpbWVTdGFtcEluVVRDIiwiZm9ybWF0U3RyIiwidGltZSIsImdldEFwcCIsIkxhbmd1YWdlU3RvcmUiLCJsYW5ndWFnZXMiLCJsYW5ndWFnZXNBZG1pbiIsImxhbmd1YWdlQWRtaW4iLCJ1c2VyTGFuZ3VhZ2UiLCJ1c2VyTGFuZ3VhZ2VBZG1pbiIsImFMYW5ndWFnZXMiLCJhTGFuZ3VhZ2VzQWRtaW4iLCJka2ltU3RhdHVzIiwiZGtpbVZhbHVlIiwiY2xlYXJEdXBsaWNhdGVOYW1lIiwibmV3SW5zdGFuY2VGcm9tSnNvbiIsImluaXRCeUpzb24iLCJ2YWxpZGF0ZSIsIndpdGhvdXROYW1lIiwiRW1haWwiLCJEa2ltU3RhdHVzIiwiRGtpbVZhbHVlIiwiZnJpZW5kbHlWaWV3Iiwid3JhcFdpdGhMaW5rIiwidXNlRW5jb2RlSHRtbCIsInBhcnNlZFJlc3VsdCIsImFkZHJlc3NwYXJzZXIiLCJleGlzdHMiLCJhZGRyZXNzIiwiY29tcGFjdCIsImVtYWlsQWRkcmVzcyIsIkFic3RyYWN0SW5wdXQiLCJsYWJlbCIsInByZUxhYmVsIiwiZW5hYmxlIiwicGxhY2Vob2xkZXIiLCJsYWJlbGVkIiwicHJlTGFiZWxlZCIsInRyaWdnZXJlZCIsImNsYXNzRm9yVHJpZ2dlciIsInN1ZmZpeFZhbHVlIiwic2V0VHJpZ2dlclN0YXRlIiwiQ2FwYUFkbWluU3RvcmUiLCJhZGRpdGlvbmFsQWNjb3VudHMiLCJpZGVudGl0aWVzIiwiZ3JhdmF0YXIiLCJhdHRhY2htZW50VGh1bWJuYWlscyIsInNpZXZlIiwiZmlsdGVycyIsInRoZW1lcyIsIm9wZW5QR1AiLCJ0d29GYWN0b3JBdXRoIiwidHdvRmFjdG9yQXV0aEZvcmNlIiwidGVtcGxhdGVzIiwiQWRkaXRpb25hbEFjY291bnRzIiwiSWRlbnRpdGllcyIsIkdyYXZhdGFyIiwiQXR0YWNobWVudFRodW1ibmFpbHMiLCJTaWV2ZSIsIkZpbHRlcnMiLCJUaGVtZXMiLCJVc2VyQmFja2dyb3VuZCIsIk9wZW5QR1AiLCJUd29GYWN0b3IiLCJUd29GYWN0b3JGb3JjZSIsIlRlbXBsYXRlcyIsIlBhY2thZ2VBZG1pblN0b3JlIiwicGFja2FnZXMiLCJwYWNrYWdlc1JlYWwiLCJwYWNrYWdlc01haW5VcGRhdGFibGUiLCJBcHBBZG1pblN0b3JlIiwiZGV0ZXJtaW5lVXNlckxhbmd1YWdlIiwiZGV0ZXJtaW5lVXNlckRvbWFpbiIsIndlYWtQYXNzd29yZCIsInVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyIsImRhdGFGb2xkZXJBY2Nlc3MiLCJnZXQiLCJBYnN0cmFjdEFwcFN0b3JlIiwiamFzc2wiLCJhc3luYyIsImFsbCIsIm9uZXJyb3IiLCJUaGVtZVN0b3JlIiwidGhlbWVCYWNrZ3JvdW5kTmFtZSIsInRoZW1lQmFja2dyb3VuZEhhc2giLCJQbHVnaW5BZG1pblN0b3JlIiwiZXJyb3IiLCJBYnN0cmFjdFNjcmVlbiIsIm9Dcm9zcyIsInNTY3JlZW5OYW1lIiwiYVZpZXdNb2RlbHMiLCJyb3V0ZXMiLCJmTWF0Y2hlciIsIm9uUm91dGUiLCJydWxlcyIsIkRvbWFpbkFkbWluU3RvcmUiLCJkb21haW5zIiwiZG9tYWluc1dpdGhvdXRBbGlhc2VzIiwiYWxpYXMiLCJBYnN0cmFjdENoZWNrYm94IiwiZGlzYWJsZSIsInJlYWRPbmx5IiwiaW52ZXJ0ZWQiLCJsYWJlbEFuaW1hdGVkIiwiQ2hlY2tib3hDb21wb25lbnQiLCJvbkJsdXIiLCJvblJlYWR5Iiwib25Nb2RlQ2hhbmdlIiwiYmx1clRpbWVyIiwiX19yZXNpemFibGUiLCJfX2luaXRlZCIsIiRlbGVtZW50IiwicmVzaXplRWRpdG9yIiwicnVuT25CbHVyIiwiYmx1clRyaWdnZXIiLCJmb2N1c1RyaWdnZXIiLCJtb2RlIiwiY2xlYXJDYWNoZWRTaWduYXR1cmUiLCJleGVjQ29tbWFuZCIsImNsZWFyQ2FjaGUiLCJzZXRTaWduYXR1cmUiLCJzaWduYXR1cmUiLCJpbnNlcnRCZWZvcmUiLCJjaGVja0RpcnR5IiwicmVzZXREaXJ0eSIsImdldERhdGEiLCJ3cmFwSXNIdG1sIiwiX19wbGFpbiIsImdldFJhd0RhdGEiLCJtb2RlVG9nZ2xlIiwic2V0TW9kZSIsInNldEh0bWwiLCJzZXRQbGFpbiIsInNldERhdGEiLCJyZXBsYWNlSHRtbCIsImZpbmQiLCJzZXRSYXdEYXRhIiwiaW5pdEZ1bmMiLCJjb25maWciLCJhbGxvd1NvdXJjZSIsImJpdGkiLCJ0b29sYmFyR3JvdXBzIiwiX19jZmdJbml0ZWQiLCJyZW1vdmVCdXR0b25zIiwicmVtb3ZlUGx1Z2lucyIsImVudGVyTW9kZSIsIkNLRURJVE9SIiwiRU5URVJfQlIiLCJzaGlmdEVudGVyTW9kZSIsIkVOVEVSX1AiLCJlbnYiLCJpc0NvbXBhdGlibGUiLCJUYWIiLCJGaWxlUmVhZGVyIiwiZGF0YVRyYW5zZmVyIiwiZ2V0RmlsZXNDb3VudCIsImdldEZpbGUiLCJpbWFnZUlkIiwicmVhZGVyIiwib25sb2FkZW5kIiwicmVhZEFzRGF0YVVSTCIsInJlbW92ZU1lbnVJdGVtIiwiX19pbml0RWRpdG9yIiwiaGFzRm9jdXMiLCJmb2N1c01hbmFnZXIiLCJpbm5lckhlaWdodCIsInNldFJlYWRPbmx5Iiwic3R5bGVzIiwicmFpbmxvb3AiLCJyYWlubG9vcFRpcCIsInJhaW5sb29wRXJyb3JUaXAiLCJBc2tQb3B1cFZpZXciLCJwb3B1cCIsImFza0Rlc2MiLCJ5ZXNCdXR0b24iLCJub0J1dHRvbiIsInllc0ZvY3VzIiwibm9Gb2N1cyIsImZZZXNBY3Rpb24iLCJmTm9BY3Rpb24iLCJiRm9jdXNZZXNPblNob3ciLCJQb3B1cEFzayIsImNsZWFyUG9wdXAiLCJ5ZXNDbGljayIsIm5vQ2xpY2siLCJvblNob3ciLCJmWWVzRnVuYyIsImZOb0Z1bmMiLCJpc0ZvY3VzWWVzT25TaG93Iiwib25TaG93V2l0aERlbGF5Iiwib25CdWlsZCIsIkxhbmd1YWdlc1BvcHVwVmlldyIsImZMYW5nIiwibGFuZ3MiLCJ1c2VyIiwic2VsZWN0ZWQiLCJmdWxsTmFtZSIsInNldExhbmd1YWdlU2VsZWN0aW9uIiwibGFuZ3VhZ2VUb29sdGlwTmFtZSIsImN1cnJlbnRMYW5nIiwib25CZWZvcmVTaG93IiwiZkxhbmd1YWdlIiwiY2hhbmdlTGFuZ3VhZ2UiLCJBcHAiLCJybCIsInBsdWdpblNldHRpbmdzR2V0IiwicGx1Z2luUmVtb3RlUmVxdWVzdCIsIkVudW1zIiwiYm9vdHN0YXJ0IiwiVGltZTEwbXMiLCJfX0FQUF9CT09UIiwiZkVycm9yQ2FsbGJhY2siLCJyYWlubG9vcFRFTVBMQVRFUyIsImlubmVySFRNTCIsImFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyIsImFsbG93TGFuZ3VhZ2VzT25Mb2dpbiIsIm5ld01vdmVUb0ZvbGRlciIsImludGVyZmFjZUFuaW1hdGlvbiIsImFuaW0iLCJkZWZhdWx0UmVzcG9uc2UiLCJzUmVxdWVzdEFjdGlvbiIsInNUeXBlIiwiYkNhY2hlZCIsIm9SZXF1ZXN0UGFyYW1ldGVycyIsImZDYWxsIiwiU3VjY2VzcyIsIlVubG9hZCIsImxvZ2luQW5kTG9nb3V0UmVsb2FkIiwiQ2xlYXJBdXRoIiwiTG9nb3V0IiwiY2xlYXJDbGllbnRTaWRlVG9rZW4iLCJBYm9ydCIsImFqYXhSZXF1ZXN0IiwiZlJlc3VsdENhbGxiYWNrIiwiaVRpbWVPdXQiLCJzR2V0QWRkIiwiYWJvcnRBY3Rpb25zIiwiaXNQb3N0IiwiaGVhZGVycyIsIkFjdGlvbiIsImFjdGlvblRvQWJvcnQiLCJfX2Fib3J0ZWQiLCJYVG9rZW4iLCJvRGVmQWpheCIsImdsb2JhbCIsImFsd2F5cyIsIlRpbWUiLCJVcGRhdGVUb2tlbiIsInNldENsaWVudFNpZGVUb2tlbiIsImNhdGNoIiwic0FjdGlvbiIsIm9QYXJhbWV0ZXJzIiwiaVRpbWVvdXQiLCJhQWJvcnRBY3Rpb25zIiwiZ2V0UHVibGljS2V5IiwianNWZXJzaW9uIiwic1ZlcnNpb24iLCJBYnN0cmFjdFNldHRpbmdzU2NyZWVuIiwibWVudSIsIm9DdXJyZW50U3ViU2NyZWVuIiwib1ZpZXdNb2RlbFBsYWNlIiwic2V0dXBTZXR0aW5ncyIsInNldHRpbmdzU2NyZWVuIiwiUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwiLCJ2aWV3TW9kZWxQbGFjZSIsIlNldHRpbmdzVmlld01vZGVsIiwiRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCIsInRtcGwiLCJvbkhpZGUiLCJSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCIsIkRlZmF1bHRWaWV3TW9kZWwiLCJkZWZhdWx0Um91dGUiLCJzdWJuYW1lIiwibm9ybWFsaXplXyIsInJxdWVzdCIsInZhbHMiLCJBYnN0cmFjdEFwcCIsImdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSIsImlzTG9jYWxBdXRvY29tcGxldGUiLCJpZnJhbWUiLCJsYXN0RXJyb3JUaW1lIiwiRXZlbnRzIiwiaUgiLCJpVyIsIlRpbWU1MG1zIiwiVGltZTVzIiwiZ2V0QXBwbGljYXRpb25Db25maWd1cmF0aW9uIiwiZGVmYXVsdF8iLCJhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24iLCJvTGluayIsImhyZWYiLCJjcmVhdGVFdmVudCIsIm9FIiwiTW91c2VFdmVudHMiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZ29vZ2xlUHJldmlld1N1cHBvcnRlZCIsInNldFdpbmRvd1RpdGxlIiwicmVkaXJlY3RUb0FkbWluUGFuZWwiLCJfX3JsYWhfY2xlYXIiLCJ0b2tlbiIsIl9fcmxhaF9zZXQiLCJsb2dvdXQiLCJpbklmcmFtZSIsImN1c3RvbUxvZ291dExpbmsiLCJwYXJlbnQiLCJoaXN0b3J5QmFjayIsImhpc3RvcnkiLCJiYWNrIiwibW9iaWxlIiwiY29tcG9uZW50cyIsInJlZ2lzdGVyIiwiVGltZTFzIiwic3NtIiwiYWRkU3RhdGUiLCJvbkxlYXZlIiwiQWJzdHJhY3RCb290IiwiQWJzdHJhY3RSYWRpbyIsIlNhdmVUcmlnZ2VyQ29tcG9uZW50IiwidmVydGljYWxBbGlnbiIsInNldFN0YXRlIiwiSW5wdXRDb21wb25lbnQiLCJTZWxlY3RDb21wb25lbnQiLCJvcHRpb25zVGV4dCIsIm9wdGlvbnNWYWx1ZSIsIm9wdGlvbnNDYXB0aW9uIiwiUmFkaW9Db21wb25lbnQiLCJERUZBVUxUX1JPV1MiLCJUZXh0QXJlYUNvbXBvbmVudCIsInJvd3MiLCJzcGVsbGNoZWNrIiwiRGF0ZUNvbXBvbmVudCIsIlNjcmlwdENvbXBvbmVudCIsInRlbXBsYXRlTm9kZXMiLCJvdXRlckhUTUwiLCJyZXBsYWNlV2l0aCIsIm5vZGVWYWx1ZSIsIkNoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQiLCJhbmltYXRpb25Cb3giLCJhbmltYXRpb25DaGVja21hcmsiLCJhbmltYXRpb25Cb3hTZXRUcnVlIiwiYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSIsInRyaWdnZXJBbmltYXRpb24iLCJib3giLCJBZG1pbkFwcCIsIlJlbW90ZSIsInJlbG9hZERvbWFpbkxpc3QiLCJEb21haW5TdG9yZSIsImRlbGV0ZUFjY2VzcyIsInJlbG9hZFBsdWdpbkxpc3QiLCJQbHVnaW5TdG9yZSIsIkVuYWJsZWQiLCJjb25maWd1cmVkIiwiQ29uZmlndXJlZCIsInJlbG9hZFBhY2thZ2VzTGlzdCIsIlBhY2thZ2VTdG9yZSIsIlJlYWwiLCJNYWluVXBkYXRhYmxlIiwiTGlzdCIsImNhbkJlSW5zdGFsbGVkIiwiQ29yZVN0b3JlIiwicmVsb2FkQ29yZURhdGEiLCJDaGFubmVsIiwiVHlwZSIsIlVwZGF0YWJsZSIsIkFjY2VzcyIsIldhcm5pbmciLCJWZXJzaW9uIiwiUmVtb3RlVmVyc2lvbiIsIlJlbW90ZVJlbGVhc2UiLCJWZXJzaW9uQ29tcGFyZSIsImJvb3RlbmQiLCJib290ZW5kQ2FsbGJhY2siLCJwcm9ncmVzc0pzIiwiQXBwU3RvcmUiLCJDYXBhU3RvcmUiLCJTZXR0aW5nc0FkbWluU2NyZWVuIiwiTG9naW5BZG1pblNjcmVlbiIsIkRvbWFpblBvcHVwVmlldyIsInNlbGYiLCJjYW5CZVNhdmVkIiwiY2FuQmVUZXN0ZWQiLCJlZGl0Iiwic2F2aW5nIiwic2F2aW5nRXJyb3IiLCJzaWV2ZVNldHRpbmdzIiwidGVzdGluZyIsInRlc3RpbmdEb25lIiwidGVzdGluZ0ltYXBFcnJvciIsInRlc3RpbmdTaWV2ZUVycm9yIiwidGVzdGluZ1NtdHBFcnJvciIsInRlc3RpbmdJbWFwRXJyb3JEZXNjIiwidGVzdGluZ1NpZXZlRXJyb3JEZXNjIiwidGVzdGluZ1NtdHBFcnJvckRlc2MiLCJpbWFwU2VydmVyRm9jdXMiLCJzaWV2ZVNlcnZlckZvY3VzIiwic210cFNlcnZlckZvY3VzIiwiaW1hcFNlcnZlciIsImltYXBQb3J0IiwiaW1hcFNlY3VyZSIsImltYXBTaG9ydExvZ2luIiwidXNlU2lldmUiLCJzaWV2ZUFsbG93UmF3Iiwic2lldmVTZXJ2ZXIiLCJzaWV2ZVBvcnQiLCJzaWV2ZVNlY3VyZSIsInNtdHBTZXJ2ZXIiLCJzbXRwUG9ydCIsInNtdHBTZWN1cmUiLCJzbXRwU2hvcnRMb2dpbiIsInNtdHBBdXRoIiwic210cFBocE1haWwiLCJ3aGl0ZUxpc3QiLCJhbGlhc05hbWUiLCJlbmFibGVTbWFydFBvcnRzIiwiYWxsb3dTaWV2ZSIsImhlYWRlclRleHQiLCJkb21haW5EZXNjIiwiZG9tYWluSXNDb21wdXRlZCIsInVzZVBocE1haWwiLCJwb3J0IiwiSW1hcFNzbCIsIkltYXAiLCJTbXRwU3NsIiwiU210cFN0YXJ0VGxzIiwiU210cCIsImNyZWF0ZU9yQWRkQ29tbWFuZCIsIm9uRG9tYWluQ3JlYXRlT3JTYXZlUmVzcG9uc2UiLCJ0ZXN0Q29ubmVjdGlvbkNvbW1hbmQiLCJvblRlc3RDb25uZWN0aW9uUmVzcG9uc2UiLCJ3aGl0ZUxpc3RDb21tYW5kIiwiYmFja0NvbW1hbmQiLCJzaWV2ZUNvbW1hbmQiLCJjbGVhclRlc3RpbmciLCJzUmVzdWx0IiwiYkltYXAiLCJiU2lldmUiLCJvRG9tYWluIiwiY2xlYXJGb3JtIiwiSW5jSG9zdCIsIkluY1BvcnQiLCJJbmNTZWN1cmUiLCJJbmNTaG9ydExvZ2luIiwiVXNlU2lldmUiLCJTaWV2ZUFsbG93UmF3IiwiU2lldmVIb3N0IiwiU2lldmVQb3J0IiwiU2lldmVTZWN1cmUiLCJPdXRIb3N0IiwiT3V0UG9ydCIsIk91dFNlY3VyZSIsIk91dFNob3J0TG9naW4iLCJPdXRBdXRoIiwiT3V0VXNlUGhwTWFpbCIsIldoaXRlTGlzdCIsIkFsaWFzTmFtZSIsIk1lbnVTZXR0aW5nc0FkbWluVmlldyIsIlBhbmVTZXR0aW5nc0FkbWluVmlldyIsIkdlbmVyYWxBZG1pblNldHRpbmdzIiwiRG9tYWluc0FkbWluU2V0dGluZ3MiLCJMb2dpbkFkbWluU2V0dGluZ3MiLCJCcmFuZGluZ0FkbWluU2V0dGluZ3MiLCJDb250YWN0c0FkbWluU2V0dGluZ3MiLCJTZWN1cml0eUFkbWluU2V0dGluZ3MiLCJTb2NpYWxBZG1pblNldHRpbmdzIiwiUGx1Z2luc0FkbWluU2V0dGluZ3MiLCJQYWNrYWdlc0FkbWluU2V0dGluZ3MiLCJBYm91dEFkbWluU2V0dGluZ3MiLCJjYXBhVGhlbWVzIiwiY2FwYVVzZXJCYWNrZ3JvdW5kIiwiY2FwYUdyYXZhdGFyIiwiY2FwYUFkZGl0aW9uYWxBY2NvdW50cyIsImNhcGFJZGVudGl0aWVzIiwiY2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzIiwiY2FwYVRlbXBsYXRlcyIsIm1haW5BdHRhY2htZW50TGltaXQiLCJCaXRMZW5ndGgxMDI0IiwidXBsb2FkRGF0YSIsInVwbG9hZERhdGFEZXNjIiwidXBsb2FkX21heF9maWxlc2l6ZSIsInBvc3RfbWF4X3NpemUiLCJ0aGVtZXNPcHRpb25zIiwib3B0VmFsdWUiLCJvcHRUZXh0IiwibGFuZ3VhZ2VGdWxsTmFtZSIsImxhbmd1YWdlQWRtaW5GdWxsTmFtZSIsImF0dGFjaG1lbnRMaW1pdFRyaWdnZXIiLCJsYW5ndWFnZVRyaWdnZXIiLCJsYW5ndWFnZUFkbWluVHJpZ2dlciIsImYxIiwiZjIiLCJmMyIsImZSZWxvYWRMYW5ndWFnZUhlbHBlciIsInNhdmVTZXR0aW5nc1N0ZXAiLCJ0cmFuc2xhdG9yUmVsb2FkIiwic2VsZWN0TGFuZ3VhZ2UiLCJzZWxlY3RMYW5ndWFnZUFkbWluIiwicGhwSW5mb0xpbmsiLCJ2aXNpYmlsaXR5IiwiZG9tYWluRm9yRGVsZXRpb24iLCJvbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0Iiwib25Eb21haW5Mb2FkUmVxdWVzdCIsImNyZWF0ZURvbWFpbiIsImRlbGV0ZURvbWFpbiIsImRpc2FibGVEb21haW4iLCJvRG9tIiwiZG9tYWluSXRlbSIsImRlZmF1bHREb21haW4iLCJkdW1teSIsInBkb0RzbiIsInBkb1VzZXIiLCJlbmFibGVDb250YWN0cyIsImNvbnRhY3RzU3luYyIsInN1cHBvcnRlZFR5cGVzIiwidHlwZXMiLCJnZXRUeXBlTmFtZSIsImNvbnRhY3RzU3VwcG9ydGVkIiwiY29udGFjdHNUeXBlcyIsImNvbnRhY3RzVHlwZXNPcHRpb25zIiwiY29udGFjdHNUeXBlIiwibWFpbkNvbnRhY3RzVHlwZSIsInRlc3RDb250YWN0c1N1Y2Nlc3MiLCJ0ZXN0Q29udGFjdHNFcnJvciIsInRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSIsInBkb1Bhc3N3b3JkIiwicGRvRHNuVHJpZ2dlciIsInBkb1VzZXJUcmlnZ2VyIiwicGRvUGFzc3dvcmRUcmlnZ2VyIiwiY29udGFjdHNUeXBlVHJpZ2dlciIsIm9uVGVzdENvbnRhY3RzUmVzcG9uc2UiLCJ0ZXN0Q29udGFjdHNDb21tYW5kIiwiTWVzc2FnZSIsImY0IiwiZjUiLCJhZG1pblBhc3N3b3JkIiwiY2FwYU9wZW5QR1AiLCJjYXBhVHdvRmFjdG9yQXV0aCIsImNhcGFUd29GYWN0b3JBdXRoRm9yY2UiLCJ2ZXJpZnlTc2xDZXJ0aWZpY2F0ZSIsImFsbG93U2VsZlNpZ25lZCIsImlzVHdvRmFjdG9yRHJvcHBlclNob3duIiwidHdvRmFjdG9yRHJvcHBlclVzZXIiLCJhZG1pbkxvZ2luRXJyb3IiLCJhZG1pblBhc3N3b3JkTmV3IiwiYWRtaW5QYXNzd29yZE5ldzIiLCJhZG1pblBhc3N3b3JkTmV3RXJyb3IiLCJhZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IiLCJhZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyIsIm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlIiwic2F2ZU5ld0FkbWluUGFzc3dvcmRDb21tYW5kIiwic2hvd1R3b0ZhY3RvckRyb3BwZXIiLCJXZWFrIiwiZ29vZ2xlRW5hYmxlIiwiZ29vZ2xlRW5hYmxlQXV0aCIsImdvb2dsZUVuYWJsZUF1dGhHbWFpbCIsImdvb2dsZUVuYWJsZURyaXZlIiwiZ29vZ2xlRW5hYmxlUHJldmlldyIsImdvb2dsZUVuYWJsZVJlcXVpcmVDbGllbnRTZXR0aW5ncyIsImdvb2dsZUVuYWJsZVJlcXVpcmVBcGlLZXkiLCJnb29nbGVDbGllbnRJRCIsImdvb2dsZUNsaWVudFNlY3JldCIsImdvb2dsZUFwaUtleSIsImdvb2dsZVRyaWdnZXIxIiwiZ29vZ2xlVHJpZ2dlcjIiLCJnb29nbGVUcmlnZ2VyMyIsImZhY2Vib29rU3VwcG9ydGVkIiwiZmFjZWJvb2tFbmFibGUiLCJmYWNlYm9va0FwcElEIiwiZmFjZWJvb2tBcHBTZWNyZXQiLCJmYWNlYm9va1RyaWdnZXIxIiwiZmFjZWJvb2tUcmlnZ2VyMiIsInR3aXR0ZXJFbmFibGUiLCJ0d2l0dGVyQ29uc3VtZXJLZXkiLCJ0d2l0dGVyQ29uc3VtZXJTZWNyZXQiLCJ0d2l0dGVyVHJpZ2dlcjEiLCJ0d2l0dGVyVHJpZ2dlcjIiLCJkcm9wYm94RW5hYmxlIiwiZHJvcGJveEFwaUtleSIsImRyb3Bib3hUcmlnZ2VyMSIsImY2IiwiZjciLCJmOCIsImVuYWJsZWRQbHVnaW5zIiwicGx1Z2luc0Vycm9yIiwib25QbHVnaW5Mb2FkUmVxdWVzdCIsIm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QiLCJkaXNhYmxlUGx1Z2luIiwiY29uZmlndXJlUGx1Z2luIiwicGFja2FnZXNFcnJvciIsInBhY2thZ2VzQ3VycmVudCIsImluc3RhbGxlZCIsImNvbXBhcmUiLCJwYWNrYWdlc0F2YWlsYWJsZUZvclVwZGF0ZSIsInBhY2thZ2VzQXZhaWxhYmxlRm9ySW5zdGFsbGF0aW9uIiwicmVxdWVzdEhlbHBlciIsInBhY2thZ2VUb1JlcXVlc3QiLCJpbnN0YWxsIiwiUmVsb2FkIiwiZGVsZXRlUGFja2FnZSIsInBhY2thZ2VUb0RlbGV0ZSIsImluc3RhbGxQYWNrYWdlIiwicGFja2FnZVRvSW5zdGFsbCIsInZlcnNpb24iLCJhY2Nlc3MiLCJlcnJvckRlc2MiLCJjb3JlUmVtb3RlVmVyc2lvbkh0bWxEZXNjIiwidHJhbnNsYXRvclRyaWdnZXIiLCJzdGF0dXNUeXBlIiwidmVyc2lvblRvQ29tcGFyZSIsImlzQ2hlY2tpbmciLCJpc1VwZGF0aW5nIiwiaXNSZWFsIiwibG9hZGluZ0Rlc2MiLCJmYXZpY29uVXJsIiwibG9naW5Mb2dvIiwibG9naW5CYWNrZ3JvdW5kIiwidXNlckxvZ28iLCJ1c2VyTG9nb01lc3NhZ2UiLCJ1c2VySWZyYW1lTWVzc2FnZSIsInVzZXJMb2dvVGl0bGUiLCJsb2dpbkRlc2NyaXB0aW9uIiwibG9naW5Dc3MiLCJ1c2VyQ3NzIiwid2VsY29tZVBhZ2VVcmwiLCJ3ZWxjb21lUGFnZURpc3BsYXkiLCJmOSIsImYxMCIsImYxMSIsImRvbSIsImFkbWluRG9tYWluIiwiYWRtaW5NYW5Mb2FkaW5nIiwiYWRtaW5NYW5Mb2FkaW5nVmlzaWJpbGl0eSIsImxvZ291dENsaWNrIiwiTG9naW5BZG1pblZpZXciLCJzdWJtaXRSZXF1ZXN0IiwibW9iaWxlRGV2aWNlIiwiaGlkZVN1Ym1pdEJ1dHRvbiIsImxvZ2luIiwicGFzc3dvcmQiLCJsb2dpbkVycm9yIiwicGFzc3dvcmRFcnJvciIsImxvZ2luRXJyb3JBbmltYXRpb24iLCJwYXNzd29yZEVycm9yQW5pbWF0aW9uIiwibG9naW5Gb2N1cyIsImZvcm1IaWRkZW4iLCJmb3JtRXJyb3IiLCJzdWJtaXRFcnJvciIsInN1Ym1pdENvbW1hbmQiLCJzdWJtaXRGb3JtIiwiYm9vdHN0cmFwIiwiRG9tYWluQWxpYXNQb3B1cFZpZXciLCJkb21haW5zT3B0aW9ucyIsIm9uRG9tYWluQWxpYXNDcmVhdGVPclNhdmVSZXNwb25zZSIsIlBsdWdpblBvcHVwVmlldyIsImhhc0NvbmZpZ3VyYXRpb24iLCJvblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UiLCJzYXZlRXJyb3IiLCJyZWFkbWUiLCJjb25maWd1cmVzIiwiaGFzUmVhZG1lIiwicmVhZG1lUG9wb3ZlckNvbmYiLCJ0cnlUb0Nsb3NlUG9wdXAiLCJzYXZlQ29tbWFuZCIsIm9QbHVnaW4iLCJSZWFkbWUiLCJDb25maWciLCJQb3B1cHNBc2tWaWV3TW9kZWwiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdB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QUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdDQUF3QztBQUN4QztBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsOENBQThDOztBQUUxRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLFFBQVE7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBLHNCQUFzQiw0QkFBNEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdEQUF3RCxnQkFBZ0I7QUFDeEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9EQUFvRCxnQkFBZ0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0EsMkJBQTJCLDRCQUE0QjtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIseUJBQXlCO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsV0FBVztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtB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QUFNeEIsdUJBQVdBLElBQUksQ0FBQyxDQUFELENBTlM7QUFPeEIsb0JBQVFBLElBQUksQ0FBQyxDQUFEO0FBUFksV0FBWDtBQUFBLFNBQWIsQ0FERjtBQVdBO0FBQ0Q7QUFDRCxHOztTQUVEb2dELGUsR0FBQSwyQkFBa0I7QUFBQTs7QUFDakIsUUFBTUssa0JBQWtCLEdBQUczc0QsbUJBQU8sQ0FBQyx5QkFBRCxDQUFsQzs7QUFDQSxRQUFJLENBQUM4ckIsbUVBQWMsQ0FBQzZnQyxrQkFBRCxDQUFuQixFQUF5QztBQUN4Qy9vQywwRUFBZSxDQUFDK29DLGtCQUFELEVBQXFCLENBQ25DcHBELCtEQUFJLENBQUMsd0NBQUQsQ0FEK0IsRUFFbkMsWUFBTTtBQUNMLFlBQUksTUFBSSxDQUFDeW1CLGVBQUwsRUFBSixFQUE0QjtBQUMzQnZVLDJFQUFXLENBQUMsTUFBRCxFQUFPLGVBQVAsQ0FBWDtBQUNBO0FBQ0QsT0FOa0MsQ0FBckIsQ0FBZjtBQVFBO0FBQ0QsRzs7U0FFRHM1QixPLEdBQUEsbUJBQVU7QUFBQTs7QUFDVGg1Qiw4Q0FBRyxDQUFDLEtBQUQsRUFBUW5aLHFEQUFRLENBQUNncUIsR0FBakIsRUFBc0IsWUFBTTtBQUM5QixVQUFJLE1BQUksQ0FBQ29ELGVBQUwsRUFBSixFQUE0QjtBQUMzQixjQUFJLENBQUNzaUMsZUFBTDtBQUNBOztBQUVELGFBQU8sS0FBUDtBQUNBLEtBTkUsQ0FBSDtBQU9BLEc7OztFQTdHNEJ6dUIsZ0YiLCJmaWxlIjoianMvYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcInJhaW5sb29wL3YvMC4wLjAvc3RhdGljL2pzL1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNTYxKTtcbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogMCAqL1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWxlVHlwZSA9IHtcblx0J1Vua25vd24nOiAndW5rbm93bicsXG5cdCdUZXh0JzogJ3RleHQnLFxuXHQnSHRtbCc6ICdodG1sJyxcblx0J0NvZGUnOiAnY29kZScsXG5cdCdFbWwnOiAnZW1sJyxcblx0J1dvcmRUZXh0JzogJ3dvcmQtdGV4dCcsXG5cdCdQZGYnOiAncGRmJyxcblx0J0ltYWdlJzogJ2ltYWdlJyxcblx0J0F1ZGlvJzogJ2F1ZGlvJyxcblx0J1ZpZGVvJzogJ3ZpZGVvJyxcblx0J1NoZWV0JzogJ3NoZWV0Jyxcblx0J1ByZXNlbnRhdGlvbic6ICdwcmVzZW50YXRpb24nLFxuXHQnQ2VydGlmaWNhdGUnOiAnY2VydGlmaWNhdGUnLFxuXHQnQ2VydGlmaWNhdGVCaW4nOiAnY2VydGlmaWNhdGUtYmluJyxcblx0J0FyY2hpdmUnOiAnYXJjaGl2ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFN0b3JhZ2VSZXN1bHRUeXBlID0ge1xuXHQnU3VjY2Vzcyc6ICdzdWNjZXNzJyxcblx0J0Fib3J0JzogJ2Fib3J0Jyxcblx0J0Vycm9yJzogJ2Vycm9yJyxcblx0J1VubG9hZCc6ICd1bmxvYWQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGb2N1c2VkID0ge1xuXHQnTm9uZSc6ICdub25lJyxcblx0J01lc3NhZ2VMaXN0JzogJ21lc3NhZ2UtbGlzdCcsXG5cdCdNZXNzYWdlVmlldyc6ICdtZXNzYWdlLXZpZXcnLFxuXHQnRm9sZGVyTGlzdCc6ICdmb2xkZXItbGlzdCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlID0ge1xuXHQnRW1wdHknOiAxMCxcblx0J0xvZ2luJzogMjAsXG5cdCdBdXRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlVHlwZSA9IHtcblx0J1dlYm1haWwnOiAwLFxuXHQnQWRtaW4nOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBDYXBhID0ge1xuXHQnVHdvRmFjdG9yJzogJ1RXT19GQUNUT1InLFxuXHQnVHdvRmFjdG9yRm9yY2UnOiAnVFdPX0ZBQ1RPUl9GT1JDRScsXG5cdCdPcGVuUEdQJzogJ09QRU5fUEdQJyxcblx0J1ByZWZldGNoJzogJ1BSRUZFVENIJyxcblx0J0dyYXZhdGFyJzogJ0dSQVZBVEFSJyxcblx0J0ZvbGRlcnMnOiAnRk9MREVSUycsXG5cdCdDb21wb3Nlcic6ICdDT01QT1NFUicsXG5cdCdDb250YWN0cyc6ICdDT05UQUNUUycsXG5cdCdSZWxvYWQnOiAnUkVMT0FEJyxcblx0J1NlYXJjaCc6ICdTRUFSQ0gnLFxuXHQnU2VhcmNoQWR2JzogJ1NFQVJDSF9BRFYnLFxuXHQnTWVzc2FnZUFjdGlvbnMnOiAnTUVTU0FHRV9BQ1RJT05TJyxcblx0J01lc3NhZ2VMaXN0QWN0aW9ucyc6ICdNRVNTQUdFTElTVF9BQ1RJT05TJyxcblx0J0F0dGFjaG1lbnRzQWN0aW9ucyc6ICdBVFRBQ0hNRU5UU19BQ1RJT05TJyxcblx0J0Rhbmdlcm91c0FjdGlvbnMnOiAnREFOR0VST1VTX0FDVElPTlMnLFxuXHQnU2V0dGluZ3MnOiAnU0VUVElOR1MnLFxuXHQnSGVscCc6ICdIRUxQJyxcblx0J1RoZW1lcyc6ICdUSEVNRVMnLFxuXHQnVXNlckJhY2tncm91bmQnOiAnVVNFUl9CQUNLR1JPVU5EJyxcblx0J1NpZXZlJzogJ1NJRVZFJyxcblx0J0ZpbHRlcnMnOiAnRklMVEVSUycsXG5cdCdBdHRhY2htZW50VGh1bWJuYWlscyc6ICdBVFRBQ0hNRU5UX1RIVU1CTkFJTFMnLFxuXHQnVGVtcGxhdGVzJzogJ1RFTVBMQVRFUycsXG5cdCdBdXRvTG9nb3V0JzogJ0FVVE9MT0dPVVQnLFxuXHQnQWRkaXRpb25hbEFjY291bnRzJzogJ0FERElUSU9OQUxfQUNDT1VOVFMnLFxuXHQnSWRlbnRpdGllcyc6ICdJREVOVElUSUVTJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgS2V5U3RhdGUgPSB7XG5cdCdBbGwnOiAnYWxsJyxcblx0J05vbmUnOiAnbm9uZScsXG5cdCdDb250YWN0TGlzdCc6ICdjb250YWN0LWxpc3QnLFxuXHQnTWVzc2FnZUxpc3QnOiAnbWVzc2FnZS1saXN0Jyxcblx0J0ZvbGRlckxpc3QnOiAnZm9sZGVyLWxpc3QnLFxuXHQnTWVzc2FnZVZpZXcnOiAnbWVzc2FnZS12aWV3Jyxcblx0J0NvbXBvc2UnOiAnY29tcG9zZScsXG5cdCdTZXR0aW5ncyc6ICdzZXR0aW5ncycsXG5cdCdNZW51JzogJ21lbnUnLFxuXHQnUG9wdXBDb21wb3NlT3BlblBHUCc6ICdjb21wb3NlLW9wZW4tcGdwJyxcblx0J1BvcHVwTWVzc2FnZU9wZW5QR1AnOiAnbWVzc2FnZS1vcGVuLXBncCcsXG5cdCdQb3B1cFZpZXdPcGVuUEdQJzogJ3ZpZXctb3Blbi1wZ3AnLFxuXHQnUG9wdXBLZXlib2FyZFNob3J0Y3V0c0hlbHAnOiAncG9wdXAta2V5Ym9hcmQtc2hvcnRjdXRzLWhlbHAnLFxuXHQnUG9wdXBBc2snOiAncG9wdXAtYXNrJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRm9sZGVyVHlwZSA9IHtcblx0J0luYm94JzogMTAsXG5cdCdTZW50SXRlbXMnOiAxMSxcblx0J0RyYWZ0JzogMTIsXG5cdCdUcmFzaCc6IDEzLFxuXHQnU3BhbSc6IDE0LFxuXHQnQXJjaGl2ZSc6IDE1LFxuXHQnTm90U3BhbSc6IDgwLFxuXHQnVXNlcic6IDk5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJGb2xkZXJUeXBlID0ge1xuXHQnVVNFUic6IDAsXG5cdCdJTkJPWCc6IDEsXG5cdCdTRU5UJzogMixcblx0J0RSQUZUUyc6IDMsXG5cdCdKVU5LJzogNCxcblx0J1RSQVNIJzogNSxcblx0J0lNUE9SVEFOVCc6IDEwLFxuXHQnRkxBR0dFRCc6IDExLFxuXHQnQUxMJzogMTJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nID0ge1xuXHQnRGVmYXVsdE9mZic6ICdkZWZhdWx0b2ZmJyxcblx0J0RlZmF1bHRPbic6ICdkZWZhdWx0b24nLFxuXHQnVW51c2VkJzogJ3VudXNlZCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZSA9IHtcblx0J0RlZmF1bHRPZmYnOiAwLFxuXHQnRGVmYXVsdE9uJzogMSxcblx0J1VudXNlZCc6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBvc2VUeXBlID0ge1xuXHQnRW1wdHknOiAnZW1wdHknLFxuXHQnUmVwbHknOiAncmVwbHknLFxuXHQnUmVwbHlBbGwnOiAncmVwbHlhbGwnLFxuXHQnRm9yd2FyZCc6ICdmb3J3YXJkJyxcblx0J0ZvcndhcmRBc0F0dGFjaG1lbnQnOiAnZm9yd2FyZC1hcy1hdHRhY2htZW50Jyxcblx0J0RyYWZ0JzogJ2RyYWZ0Jyxcblx0J0VkaXRBc05ldyc6ICdlZGl0YXNuZXcnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBVcGxvYWRFcnJvckNvZGUgPSB7XG5cdCdOb3JtYWwnOiAwLFxuXHQnRmlsZUlzVG9vQmlnJzogMSxcblx0J0ZpbGVQYXJ0aWFsbHlVcGxvYWRlZCc6IDIsXG5cdCdGaWxlTm9VcGxvYWRlZCc6IDMsXG5cdCdNaXNzaW5nVGVtcEZvbGRlcic6IDQsXG5cdCdGaWxlT25TYXZlaW5nRXJyb3InOiA1LFxuXHQnRmlsZVR5cGUnOiA5OCxcblx0J1Vua25vd24nOiA5OVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiA9IHtcblx0J05vbmUnOiAwLFxuXHQnU2VudCc6IDEsXG5cdCdEcmFmdCc6IDIsXG5cdCdTcGFtJzogMyxcblx0J1RyYXNoJzogNCxcblx0J0FyY2hpdmUnOiA1XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDbGllbnRTaWRlS2V5TmFtZSA9IHtcblx0J0ZvbGRlcnNMYXNoSGFzaCc6IDAsXG5cdCdNZXNzYWdlc0luYm94TGFzdEhhc2gnOiAxLFxuXHQnTWFpbEJveExpc3RTaXplJzogMixcblx0J0V4cGFuZGVkRm9sZGVycyc6IDMsXG5cdCdGb2xkZXJMaXN0U2l6ZSc6IDQsXG5cdCdNZXNzYWdlTGlzdFNpemUnOiA1LFxuXHQnTGFzdFJlcGx5QWN0aW9uJzogNixcblx0J0xhc3RTaWduTWUnOiA3LFxuXHQnQ29tcG9zZUxhc3RJZGVudGl0eUlEJzogOCxcblx0J01lc3NhZ2VIZWFkZXJGdWxsSW5mbyc6IDksXG5cdCdNZXNzYWdlQXR0YWNobW5ldENvbnRyb2xzJzogMTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IEV2ZW50S2V5Q29kZSA9IHtcblx0J0JhY2tzcGFjZSc6IDgsXG5cdCdUYWInOiA5LFxuXHQnRW50ZXInOiAxMyxcblx0J0VzYyc6IDI3LFxuXHQnUGFnZVVwJzogMzMsXG5cdCdQYWdlRG93bic6IDM0LFxuXHQnTGVmdCc6IDM3LFxuXHQnUmlnaHQnOiAzOSxcblx0J1VwJzogMzgsXG5cdCdEb3duJzogNDAsXG5cdCdFbmQnOiAzNSxcblx0J0hvbWUnOiAzNixcblx0J1NwYWNlJzogMzIsXG5cdCdJbnNlcnQnOiA0NSxcblx0J0RlbGV0ZSc6IDQ2LFxuXHQnQSc6IDY1LFxuXHQnUyc6IDgzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2V0QWN0aW9uID0ge1xuXHQnU2V0U2Vlbic6IDAsXG5cdCdVbnNldFNlZW4nOiAxLFxuXHQnU2V0RmxhZyc6IDIsXG5cdCdVbnNldEZsYWcnOiAzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2VsZWN0QWN0aW9uID0ge1xuXHQnQWxsJzogMCxcblx0J05vbmUnOiAxLFxuXHQnSW52ZXJ0JzogMixcblx0J1Vuc2Vlbic6IDMsXG5cdCdTZWVuJzogNCxcblx0J0ZsYWdnZWQnOiA1LFxuXHQnVW5mbGFnZ2VkJzogNlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRGVza3RvcE5vdGlmaWNhdGlvbiA9IHtcblx0J0FsbG93ZWQnOiAwLFxuXHQnTm90QWxsb3dlZCc6IDEsXG5cdCdEZW5pZWQnOiAyLFxuXHQnTm90U3VwcG9ydGVkJzogOVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVByaW9yaXR5ID0ge1xuXHQnTG93JzogNSxcblx0J05vcm1hbCc6IDMsXG5cdCdIaWdoJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yRGVmYXVsdFR5cGUgPSB7XG5cdCdIdG1sJzogJ0h0bWwnLFxuXHQnUGxhaW4nOiAnUGxhaW4nLFxuXHQnSHRtbEZvcmNlZCc6ICdIdG1sRm9yY2VkJyxcblx0J1BsYWluRm9yY2VkJzogJ1BsYWluRm9yY2VkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VydmVyU2VjdXJlID0ge1xuXHQnTm9uZSc6IDAsXG5cdCdTU0wnOiAxLFxuXHQnVExTJzogMlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VhcmNoRGF0ZVR5cGUgPSB7XG5cdCdBbGwnOiAtMSxcblx0J0RheXMzJzogMyxcblx0J0RheXM3JzogNyxcblx0J01vbnRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNhdmVTZXR0aW5nc1N0ZXAgPSB7XG5cdCdBbmltYXRlJzogLTIsXG5cdCdJZGxlJzogLTEsXG5cdCdUcnVlUmVzdWx0JzogMSxcblx0J0ZhbHNlUmVzdWx0JzogMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTGF5b3V0ID0ge1xuXHQnTm9QcmV2aWV3JzogMCxcblx0J1NpZGVQcmV2aWV3JzogMSxcblx0J0JvdHRvbVByZXZpZXcnOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJDb25kaXRpb25GaWVsZCA9IHtcblx0J0Zyb20nOiAnRnJvbScsXG5cdCdSZWNpcGllbnQnOiAnUmVjaXBpZW50Jyxcblx0J1N1YmplY3QnOiAnU3ViamVjdCcsXG5cdCdIZWFkZXInOiAnSGVhZGVyJyxcblx0J1NpemUnOiAnU2l6ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlckNvbmRpdGlvblR5cGUgPSB7XG5cdCdDb250YWlucyc6ICdDb250YWlucycsXG5cdCdOb3RDb250YWlucyc6ICdOb3RDb250YWlucycsXG5cdCdFcXVhbFRvJzogJ0VxdWFsVG8nLFxuXHQnTm90RXF1YWxUbyc6ICdOb3RFcXVhbFRvJyxcblx0J1JlZ2V4JzogJ1JlZ2V4Jyxcblx0J092ZXInOiAnT3ZlcicsXG5cdCdVbmRlcic6ICdVbmRlcidcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlcnNBY3Rpb24gPSB7XG5cdCdOb25lJzogJ05vbmUnLFxuXHQnTW92ZVRvJzogJ01vdmVUbycsXG5cdCdEaXNjYXJkJzogJ0Rpc2NhcmQnLFxuXHQnVmFjYXRpb24nOiAnVmFjYXRpb24nLFxuXHQnUmVqZWN0JzogJ1JlamVjdCcsXG5cdCdGb3J3YXJkJzogJ0ZvcndhcmQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJSdWxlc1R5cGUgPSB7XG5cdCdBbGwnOiAnQWxsJyxcblx0J0FueSc6ICdBbnknXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTaWduZWRWZXJpZnlTdGF0dXMgPSB7XG5cdCdVbmtub3duUHVibGljS2V5cyc6IC00LFxuXHQnVW5rbm93blByaXZhdGVLZXknOiAtMyxcblx0J1VudmVyaWZpZWQnOiAtMixcblx0J0Vycm9yJzogLTEsXG5cdCdOb25lJzogMCxcblx0J1N1Y2Nlc3MnOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDb250YWN0UHJvcGVydHlUeXBlID0ge1xuXHQnVW5rbm93bic6IDAsXG5cblx0J0Z1bGxOYW1lJzogMTAsXG5cblx0J0ZpcnN0TmFtZSc6IDE1LFxuXHQnTGFzdE5hbWUnOiAxNixcblx0J01pZGRsZU5hbWUnOiAxNixcblx0J05pY2snOiAxOCxcblxuXHQnTmFtZVByZWZpeCc6IDIwLFxuXHQnTmFtZVN1ZmZpeCc6IDIxLFxuXG5cdCdFbWFpbCc6IDMwLFxuXHQnUGhvbmUnOiAzMSxcblx0J1dlYic6IDMyLFxuXG5cdCdCaXJ0aGRheSc6IDQwLFxuXG5cdCdGYWNlYm9vayc6IDkwLFxuXHQnU2t5cGUnOiA5MSxcblx0J0dpdEh1Yic6IDkyLFxuXG5cdCdOb3RlJzogMTEwLFxuXG5cdCdDdXN0b20nOiAyNTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1hZ2ljcyA9IHtcblx0J0V2ZW50V2hpY2hNb3VzZU1pZGRsZSc6IDMsXG5cdCdpZnZpc2libGVJZGxlMTBzJzogMTAsXG5cblx0J0JpdExlbmd0aDIwNDgnOiAyMDQ4LFxuXHQnQml0TGVuZ3RoMTAyNCc6IDEwMjQsXG5cblx0J1NpemUzNTBweCc6IDM1MCxcblx0J1NpemU1MHB4JzogNTAsXG5cdCdTaXplMjBweCc6IDIwLFxuXHQnU2l6ZTFweCc6IDEsXG5cblx0J1RpbWUzMG1Jbk1pbic6IDMwLFxuXG5cdCdUaW1lNjBtJzogNjAwMDAgKiA2MCxcblx0J1RpbWUzMG0nOiA2MDAwMCAqIDMwLFxuXHQnVGltZTIwbSc6IDYwMDAwICogMjAsXG5cdCdUaW1lMTVtJzogNjAwMDAgKiAxNSxcblx0J1RpbWUxMG0nOiA2MDAwMCAqIDEwLFxuXHQnVGltZTVtJzogNjAwMDAgKiA1LFxuXHQnVGltZTNtJzogNjAwMDAgKiAzLFxuXHQnVGltZTJtJzogNjAwMDAgKiAyLFxuXHQnVGltZTFtJzogNjAwMDAsXG5cdCdUaW1lMzBzJzogMzAwMDAsXG5cdCdUaW1lMTBzJzogMTAwMDAsXG5cdCdUaW1lN3MnOiA3MDAwLFxuXHQnVGltZTVzJzogNTAwMCxcblx0J1RpbWUzcyc6IDMwMDAsXG5cdCdUaW1lMXMnOiAxMDAwLFxuXHQnVGltZTUwMG1zJzogNTAwLFxuXHQnVGltZTM1MG1zJzogMzUwLFxuXHQnVGltZTI1MG1zJzogMjUwLFxuXHQnVGltZTIwMG1zJzogMjAwLFxuXHQnVGltZTEwMG1zJzogMTAwLFxuXHQnVGltZTUwbXMnOiA1MCxcblx0J1RpbWUyMG1zJzogMjAsXG5cdCdUaW1lMTBtcyc6IDEwLFxuXHQnVGltZTFtcyc6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFBvcnRzID0ge1xuXHQnSW1hcCc6IDE0Myxcblx0J0ltYXBTc2wnOiA5OTMsXG5cdCdTbXRwJzogMjUsXG5cdCdTbXRwU3NsJzogNDY1LFxuXHQnU210cFN0YXJ0VGxzJzogNTg3XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBOb3RpZmljYXRpb24gPSB7XG5cdCdJbnZhbGlkVG9rZW4nOiAxMDEsXG5cdCdBdXRoRXJyb3InOiAxMDIsXG5cdCdBY2Nlc3NFcnJvcic6IDEwMyxcblx0J0Nvbm5lY3Rpb25FcnJvcic6IDEwNCxcblx0J0NhcHRjaGFFcnJvcic6IDEwNSxcblx0J1NvY2lhbEZhY2Vib29rTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA2LFxuXHQnU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwNyxcblx0J1NvY2lhbEdvb2dsZUxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwOCxcblx0J0RvbWFpbk5vdEFsbG93ZWQnOiAxMDksXG5cdCdBY2NvdW50Tm90QWxsb3dlZCc6IDExMCxcblxuXHQnQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCc6IDEyMCxcblx0J0FjY291bnRUd29GYWN0b3JBdXRoRXJyb3InOiAxMjEsXG5cblx0J0NvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkJzogMTMwLFxuXHQnQ3VycmVudFBhc3N3b3JkSW5jb3JyZWN0JzogMTMxLFxuXHQnTmV3UGFzc3dvcmRTaG9ydCc6IDEzMixcblx0J05ld1Bhc3N3b3JkV2Vhayc6IDEzMyxcblx0J05ld1Bhc3N3b3JkRm9yYmlkZGVuJzogMTM0LFxuXG5cdCdDb250YWN0c1N5bmNFcnJvcic6IDE0MCxcblxuXHQnQ2FudEdldE1lc3NhZ2VMaXN0JzogMjAxLFxuXHQnQ2FudEdldE1lc3NhZ2UnOiAyMDIsXG5cdCdDYW50RGVsZXRlTWVzc2FnZSc6IDIwMyxcblx0J0NhbnRNb3ZlTWVzc2FnZSc6IDIwNCxcblx0J0NhbnRDb3B5TWVzc2FnZSc6IDIwNSxcblxuXHQnQ2FudFNhdmVNZXNzYWdlJzogMzAxLFxuXHQnQ2FudFNlbmRNZXNzYWdlJzogMzAyLFxuXHQnSW52YWxpZFJlY2lwaWVudHMnOiAzMDMsXG5cblx0J0NhbnRTYXZlRmlsdGVycyc6IDM1MSxcblx0J0NhbnRHZXRGaWx0ZXJzJzogMzUyLFxuXHQnRmlsdGVyc0FyZU5vdENvcnJlY3QnOiAzNTUsXG5cblx0J0NhbnRDcmVhdGVGb2xkZXInOiA0MDAsXG5cdCdDYW50UmVuYW1lRm9sZGVyJzogNDAxLFxuXHQnQ2FudERlbGV0ZUZvbGRlcic6IDQwMixcblx0J0NhbnRTdWJzY3JpYmVGb2xkZXInOiA0MDMsXG5cdCdDYW50VW5zdWJzY3JpYmVGb2xkZXInOiA0MDQsXG5cdCdDYW50RGVsZXRlTm9uRW1wdHlGb2xkZXInOiA0MDUsXG5cblx0J0NhbnRTYXZlU2V0dGluZ3MnOiA1MDEsXG5cdCdDYW50U2F2ZVBsdWdpblNldHRpbmdzJzogNTAyLFxuXG5cdCdEb21haW5BbHJlYWR5RXhpc3RzJzogNjAxLFxuXG5cdCdDYW50SW5zdGFsbFBhY2thZ2UnOiA3MDEsXG5cdCdDYW50RGVsZXRlUGFja2FnZSc6IDcwMixcblx0J0ludmFsaWRQbHVnaW5QYWNrYWdlJzogNzAzLFxuXHQnVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlJzogNzA0LFxuXG5cdCdMaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlJzogNzEwLFxuXHQnTGljZW5zaW5nRXhwaXJlZCc6IDcxMSxcblx0J0xpY2Vuc2luZ0Jhbm5lZCc6IDcxMixcblxuXHQnRGVtb1NlbmRNZXNzYWdlRXJyb3InOiA3NTAsXG5cdCdEZW1vQWNjb3VudEVycm9yJzogNzUxLFxuXG5cdCdBY2NvdW50QWxyZWFkeUV4aXN0cyc6IDgwMSxcblx0J0FjY291bnREb2VzTm90RXhpc3QnOiA4MDIsXG5cblx0J01haWxTZXJ2ZXJFcnJvcic6IDkwMSxcblx0J0NsaWVudFZpZXdFcnJvcic6IDkwMixcblx0J0ludmFsaWRJbnB1dEFyZ3VtZW50JzogOTAzLFxuXG5cdCdBamF4RmFsc2UnOiA5NTAsXG5cdCdBamF4QWJvcnQnOiA5NTEsXG5cdCdBamF4UGFyc2UnOiA5NTIsXG5cdCdBamF4VGltZW91dCc6IDk1MyxcblxuXHQnVW5rbm93bk5vdGlmaWNhdGlvbic6IDk5OSxcblx0J1Vua25vd25FcnJvcic6IDk5OVxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgT3BlbnRpcCBmcm9tICdPcGVudGlwJztcbmltcG9ydCBQaWthZGF5IGZyb20gJ3Bpa2FkYXknO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jb25zdCBrbyA9IHdpbmRvdy5rbyxcblx0JHdpbiA9ICQod2luZG93KSxcblx0ZkRpc3Bvc2FsVG9vbHRpcEhlbHBlciA9IChlbGVtZW50KSA9PiB7XG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy51cGRhdGVXaWR0aCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRmSW5pdCA9ICgpID0+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+Jyk7XG4kaGNvbnRcblx0LmF0dHIoJ2FyZWEnLCAnaGlkZGVuJylcblx0LmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAtNTAwMCB9KVxuXHQuYXBwZW5kVG8oJGJvZHkpO1xuXG5leHBvcnQgY29uc3Qgc3RhcnRNaWNyb3RpbWUgPSBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG5cbi8qKlxuICogQHR5cGUgez99XG4gKi9cbmV4cG9ydCBjb25zdCBkcm9wZG93blZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCB1c2VLZXlib2FyZFNob3J0Y3V0cyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IHNVc2VyQWdlbnQgPVxuXHQoJ25hdmlnYXRvcicgaW4gd2luZG93ICYmICd1c2VyQWdlbnQnIGluIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkgfHwgJyc7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiSUUgPSAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignbXNpZScpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYkNocm9tZSA9IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJTYWZhcmkgPSAhYkNocm9tZSAmJiAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignc2FmYXJpJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiTW9iaWxlRGV2aWNlID1cblx0KC9hbmRyb2lkL2kpLnRlc3Qoc1VzZXJBZ2VudCkgfHxcblx0KC9pcGhvbmUvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwb2QvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwYWQvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2JsYWNrYmVycnkvaSkudGVzdChzVXNlckFnZW50KTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJEaXNhYmxlTmFub1Njcm9sbCA9IGJNb2JpbGVEZXZpY2U7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiQW5pbWF0aW9uU3VwcG9ydGVkID1cblx0IWJNb2JpbGVEZXZpY2UgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc3RyYW5zaXRpb25zJykgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc2FuaW1hdGlvbnMnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCA9ICEhd2luZG93LlhNTEh0dHBSZXF1ZXN0O1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYklzSHR0cHMgPVxuXHR3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmxvY2F0aW9uID8gJ2h0dHBzOicgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA6IGZhbHNlO1xuXG4vKipcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyA9IHtcblx0J3RpdGxlJzogZmFsc2UsXG5cdCdzdHlsZXNTZXQnOiBmYWxzZSxcblx0J2N1c3RvbUNvbmZpZyc6ICcnLFxuXHQnY29udGVudHNDc3MnOiAnJyxcblx0J3Rvb2xiYXJHcm91cHMnOiBbXG5cdFx0eyBuYW1lOiAnc3BlYycgfSxcblx0XHR7IG5hbWU6ICdzdHlsZXMnIH0sXG5cdFx0eyBuYW1lOiAnYmFzaWNzdHlsZXMnLCBncm91cHM6IFsnYmFzaWNzdHlsZXMnLCAnY2xlYW51cCcsICdiaWRpJ10gfSxcblx0XHR7IG5hbWU6ICdjb2xvcnMnIH0sXG5cdFx0Yk1vYmlsZURldmljZSA/IHt9IDogeyBuYW1lOiAncGFyYWdyYXBoJywgZ3JvdXBzOiBbJ2xpc3QnLCAnaW5kZW50JywgJ2Jsb2NrcycsICdhbGlnbiddIH0sXG5cdFx0eyBuYW1lOiAnbGlua3MnIH0sXG5cdFx0eyBuYW1lOiAnaW5zZXJ0JyB9LFxuXHRcdHsgbmFtZTogJ2RvY3VtZW50JywgZ3JvdXBzOiBbJ21vZGUnLCAnZG9jdW1lbnQnLCAnZG9jdG9vbHMnXSB9LFxuXHRcdHsgbmFtZTogJ290aGVycycgfVxuXHRdLFxuXG5cdCdyZW1vdmVQbHVnaW5zJzogJ2xpc3RzdHlsZScsXG5cdCdyZW1vdmVCdXR0b25zJzogJ0Zvcm1hdCxVbmRvLFJlZG8sQ3V0LENvcHksUGFzdGUsQW5jaG9yLFN0cmlrZSxTdWJzY3JpcHQsU3VwZXJzY3JpcHQsSW1hZ2UsU2VsZWN0QWxsLFNvdXJjZScsXG5cdCdyZW1vdmVEaWFsb2dUYWJzJzogJ2xpbms6YWR2YW5jZWQ7bGluazp0YXJnZXQ7aW1hZ2U6YWR2YW5jZWQ7aW1hZ2VzOmFkdmFuY2VkJyxcblxuXHQnZXh0cmFQbHVnaW5zJzogJ3BsYWluLHNpZ25hdHVyZScsXG5cblx0J2FsbG93ZWRDb250ZW50JzogdHJ1ZSxcblx0J2V4dHJhQWxsb3dlZENvbnRlbnQnOiB0cnVlLFxuXG5cdCdmaWxsRW1wdHlCbG9ja3MnOiBmYWxzZSxcblx0J2lnbm9yZUVtcHR5UGFyYWdyYXBoJzogdHJ1ZSxcblx0J2Rpc2FibGVOYXRpdmVTcGVsbENoZWNrZXInOiBmYWxzZSxcblxuXHQnY29sb3JCdXR0b25fZW5hYmxlQXV0b21hdGljJzogZmFsc2UsXG5cdCdjb2xvckJ1dHRvbl9lbmFibGVNb3JlJzogdHJ1ZSxcblxuXHQnZm9udF9kZWZhdWx0TGFiZWwnOiAnQXJpYWwnLFxuXHQnZm9udFNpemVfZGVmYXVsdExhYmVsJzogJzEzJyxcblx0J2ZvbnRTaXplX3NpemVzJzogJzEwLzEwcHg7MTIvMTJweDsxMy8xM3B4OzE0LzE0cHg7MTYvMTZweDsxOC8xOHB4OzIwLzIwcHg7MjQvMjRweDsyOC8yOHB4OzM2LzM2cHg7NDgvNDhweCdcbn07XG5cbi8qKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxFZGl0b3JMYW5nc01hcCA9IHtcblx0J2FyX3NhJzogJ2FyLXNhJyxcblx0J2JnX2JnJzogJ2JnJyxcblx0J2NzX0NaJzogJ2NzJyxcblx0J2RlX2RlJzogJ2RlJyxcblx0J2VsX2dyJzogJ2VsJyxcblx0J2VzX2VzJzogJ2VzJyxcblx0J2V0X2VlJzogJ2V0Jyxcblx0J2ZyX2ZyJzogJ2ZyJyxcblx0J2h1X2h1JzogJ2h1Jyxcblx0J2lzX2lzJzogJ2lzJyxcblx0J2l0X2l0JzogJ2l0Jyxcblx0J2phX2pwJzogJ2phJyxcblx0J2tvX2tyJzogJ2tvJyxcblx0J2x0X2x0JzogJ2x0Jyxcblx0J2x2X2x2JzogJ2x2Jyxcblx0J2ZhX2lyJzogJ2ZhJyxcblx0J25iX25vJzogJ25iJyxcblx0J25sX25sJzogJ25sJyxcblx0J3BsX3BsJzogJ3BsJyxcblx0J3B0X2JyJzogJ3B0LWJyJyxcblx0J3B0X3B0JzogJ3B0Jyxcblx0J3JvX3JvJzogJ3JvJyxcblx0J3J1X3J1JzogJ3J1Jyxcblx0J3NrX3NrJzogJ3NrJyxcblx0J3NsX3NpJzogJ3NsJyxcblx0J3N2X3NlJzogJ3N2Jyxcblx0J3RyX3RyJzogJ3RyJyxcblx0J3VrX3VhJzogJ3VrJyxcblx0J3poX2NuJzogJ3poLWNuJyxcblx0J3poX3R3JzogJ3poJ1xufTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xubGV0IGJBbGxvd1BkZlByZXZpZXcgPSAhYk1vYmlsZURldmljZTtcblxuaWYgKGJBbGxvd1BkZlByZXZpZXcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcykge1xuXHRiQWxsb3dQZGZQcmV2aWV3ID0gISFfLmZpbmQod2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXMsICh0eXBlKSA9PiB0eXBlICYmICdhcHBsaWNhdGlvbi9wZGYnID09PSB0eXBlLnR5cGUpO1xuXG5cdGlmICghYkFsbG93UGRmUHJldmlldykge1xuXHRcdGJBbGxvd1BkZlByZXZpZXcgPSAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzWydhcHBsaWNhdGlvbi9wZGYnXTtcblx0fVxufVxuXG5leHBvcnQgeyBiQWxsb3dQZGZQcmV2aWV3IH07XG5cbmV4cG9ydCBjb25zdCBWSUVXX01PREVMUyA9IHtcblx0c2V0dGluZ3M6IFtdLFxuXHQnc2V0dGluZ3MtcmVtb3ZlZCc6IFtdLFxuXHQnc2V0dGluZ3MtZGlzYWJsZWQnOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVBY3Rpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxEaXNhYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbFR5cGUgPSBrby5vYnNlcnZhYmxlKCcnKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxXaWR0aCA9IGtvLm9ic2VydmFibGUoMCk7XG5cbmxlZnRQYW5lbERpc2FibGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlICYmIG1vdmVBY3Rpb24oKSkge1xuXHRcdG1vdmVBY3Rpb24oZmFsc2UpO1xuXHR9XG59KTtcblxubW92ZUFjdGlvbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSAmJiBsZWZ0UGFuZWxEaXNhYmxlZCgpKSB7XG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQoZmFsc2UpO1xuXHR9XG59KTtcblxuLy8gcG9wdXBzXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5TmFtZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHBvcHVwVmlzaWJpbGl0eU5hbWVzKCkubGVuZ3RoKTtcblxucG9wdXBWaXNpYmlsaXR5LnN1YnNjcmliZSgoYlZhbHVlKSA9PiB7XG5cdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1tb2RhbCcsIGJWYWx1ZSk7XG59KTtcblxuLy8ga2V5c1xuZXhwb3J0IGNvbnN0IGtleVNjb3BlUmVhbCA9IGtvLm9ic2VydmFibGUoS2V5U3RhdGUuQWxsKTtcbmV4cG9ydCBjb25zdCBrZXlTY29wZUZha2UgPSBrby5vYnNlcnZhYmxlKEtleVN0YXRlLkFsbCk7XG5cbmV4cG9ydCBjb25zdCBrZXlTY29wZSA9IGtvLmNvbXB1dGVkKHtcblx0cmVhZDogKCkgPT4ga2V5U2NvcGVGYWtlKCksXG5cdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRpZiAoS2V5U3RhdGUuTWVudSAhPT0gdmFsdWUpIHtcblx0XHRcdGlmIChLZXlTdGF0ZS5Db21wb3NlID09PSB2YWx1ZSkge1xuXHRcdFx0XHQvLyBkaXNhYmxlS2V5RmlsdGVyXG5cdFx0XHRcdGtleS5maWx0ZXIgPSAoKSA9PiB1c2VLZXlib2FyZFNob3J0Y3V0cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVzdG9yZUtleUZpbHRlclxuXHRcdFx0XHRrZXkuZmlsdGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHVzZUtleWJvYXJkU2hvcnRjdXRzKCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdHRhZ05hbWUgPSBlbCA/IGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA6ICcnO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gIShcblx0XHRcdFx0XHRcdFx0J0lOUFVUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnU0VMRUNUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnVEVYVEFSRUEnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdChlbCAmJiAnRElWJyA9PT0gdGFnTmFtZSAmJiAoJ2VkaXRvckh0bWxBcmVhJyA9PT0gZWwuY2xhc3NOYW1lIHx8ICd0cnVlJyA9PT0gJycgKyBlbC5jb250ZW50RWRpdGFibGUpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGtleVNjb3BlRmFrZSh2YWx1ZSk7XG5cdFx0XHRpZiAoZHJvcGRvd25WaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0dmFsdWUgPSBLZXlTdGF0ZS5NZW51O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGtleVNjb3BlUmVhbCh2YWx1ZSk7XG5cdH1cbn0pO1xuXG5rZXlTY29wZVJlYWwuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHQvL1x0d2luZG93LmNvbnNvbGUubG9nKCdrZXlTY29wZT0nICsgc1ZhbHVlKTsgLy8gREVCVUdcblx0a2V5LnNldFNjb3BlKHZhbHVlKTtcbn0pO1xuXG5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUpIHtcblx0XHRrZXlTY29wZShLZXlTdGF0ZS5NZW51KTtcblx0fSBlbHNlIGlmIChLZXlTdGF0ZS5NZW51ID09PSBrZXkuZ2V0U2NvcGUoKSkge1xuXHRcdGtleVNjb3BlKGtleVNjb3BlRmFrZSgpKTtcblx0fVxufSk7XG5cbi8qKlxuICogQHR5cGUgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBkYXRhID0ge1xuXHRfX0FQUF9fOiBudWxsLFxuXHRpQWpheEVycm9yQ291bnQ6IDAsXG5cdGlUb2tlbkVycm9yQ291bnQ6IDAsXG5cdGFCb290c3RyYXBEcm9wZG93bnM6IFtdLFxuXHRpTWVzc2FnZUJvZHlDYWNoZUNvdW50OiAwLFxuXHRiVW5sb2FkOiBmYWxzZVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmpRdWVyeTsiLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBoYXNoZXIgZnJvbSAnaGFzaGVyJztcbmltcG9ydCBjcm9zc3JvYWRzIGZyb20gJ2Nyb3Nzcm9hZHMnO1xuXG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcnVuSG9vayB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcbmltcG9ydCB7ICRodG1sLCBWSUVXX01PREVMUywgcG9wdXBWaXNpYmlsaXR5TmFtZXMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCB7IGlzQXJyYXksIGlzVW5kLCBwU3RyaW5nLCBsb2csIGlzRnVuYywgY3JlYXRlQ29tbWFuZExlZ2FjeSwgZGVsZWdhdGVSdW4sIGlzTm9uRW1wdHlBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmxldCBjdXJyZW50U2NyZWVuID0gbnVsbCxcblx0ZGVmYXVsdFNjcmVlbk5hbWUgPSAnJztcblxuY29uc3QgU0NSRUVOUyA9IHt9O1xuXG5leHBvcnQgY29uc3QgVmlld1R5cGUgPSB7XG5cdFBvcHVwOiAnUG9wdXBzJyxcblx0TGVmdDogJ0xlZnQnLFxuXHRSaWdodDogJ1JpZ2h0Jyxcblx0Q2VudGVyOiAnQ2VudGVyJ1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZGVMb2FkaW5nKCkge1xuXHQkKCcjcmwtY29udGVudCcpLmFkZENsYXNzKCdybC1jb250ZW50LXNob3cnKTtcblx0JCgnI3JsLWxvYWRpbmcnKVxuXHRcdC5oaWRlKClcblx0XHQucmVtb3ZlKCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkV4ZWN1dGVcbiAqIEBwYXJhbSB7KEZ1bmN0aW9ufGJvb2xlYW58bnVsbCk9fSBmQ2FuRXhlY3V0ZSA9IHRydWVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmQoZkV4ZWN1dGUsIGZDYW5FeGVjdXRlID0gdHJ1ZSkge1xuXHRyZXR1cm4gY3JlYXRlQ29tbWFuZExlZ2FjeShudWxsLCBmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0RlZmF1bHQgPSBmYWxzZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZSwgaXNEZWZhdWx0ID0gZmFsc2UpIHtcblx0U2V0dGluZ3NWaWV3TW9kZWxDbGFzcy5fX3JsU2V0dGluZ3NEYXRhID0ge1xuXHRcdExhYmVsOiBsYWJlbE5hbWUsXG5cdFx0VGVtcGxhdGU6IHRlbXBsYXRlLFxuXHRcdFJvdXRlOiByb3V0ZSxcblx0XHRJc0RlZmF1bHQ6ICEhaXNEZWZhdWx0XG5cdH07XG5cblx0VklFV19NT0RFTFMuc2V0dGluZ3MucHVzaChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpIHtcblx0VklFV19NT0RFTFNbJ3NldHRpbmdzLXJlbW92ZWQnXS5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZVNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpIHtcblx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10ucHVzaChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdXRlT2ZmKCkge1xuXHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdXRlT24oKSB7XG5cdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IHRydWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbk5hbWVcbiAqIEByZXR1cm5zIHs/T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NyZWVuKHNjcmVlbk5hbWUpIHtcblx0cmV0dXJuICcnICE9PSBzY3JlZW5OYW1lICYmICFpc1VuZChTQ1JFRU5TW3NjcmVlbk5hbWVdKSA/IFNDUkVFTlNbc2NyZWVuTmFtZV0gOiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcmV0dXJucyB7RnVuY3Rpb258bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcmVlblBvcHVwKFBvcHVWaWV3TW9kZWxDbGFzcykge1xuXHRsZXQgcmVzdWx0ID0gbnVsbDtcblx0aWYgKFBvcHVWaWV3TW9kZWxDbGFzcykge1xuXHRcdHJlc3VsdCA9IFBvcHVWaWV3TW9kZWxDbGFzcztcblx0XHRpZiAoUG9wdVZpZXdNb2RlbENsYXNzLmRlZmF1bHQpIHtcblx0XHRcdHJlc3VsdCA9IFBvcHVWaWV3TW9kZWxDbGFzcy5kZWZhdWx0O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb0hpZGVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZVNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9IaWRlKSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9IaWRlKTtcblx0aWYgKE1vZGFsVmlldyAmJiBNb2RhbFZpZXcuX192bSAmJiBNb2RhbFZpZXcuX19kb20pIHtcblx0XHRNb2RhbFZpZXcuX192bS5tb2RhbFZpc2liaWxpdHkoZmFsc2UpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGhvb2tOYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHttaXhlZD19IHBhcmFtcyA9IG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZtUnVuSG9vayhob29rTmFtZSwgVmlld01vZGVsQ2xhc3MsIHBhcmFtcyA9IG51bGwpIHtcblx0Xy5lYWNoKFZpZXdNb2RlbENsYXNzLl9fbmFtZXMsIChuYW1lKSA9PiB7XG5cdFx0cnVuSG9vayhob29rTmFtZSwgW25hbWUsIFZpZXdNb2RlbENsYXNzLl9fdm0sIHBhcmFtc10pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtPYmplY3Q9fSB2bVNjcmVlblxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFZpZXdNb2RlbChWaWV3TW9kZWxDbGFzcywgdm1TY3JlZW4pIHtcblx0aWYgKFZpZXdNb2RlbENsYXNzICYmICFWaWV3TW9kZWxDbGFzcy5fX2J1aWxkZWQpIHtcblx0XHRsZXQgdm1Eb20gPSBudWxsO1xuXHRcdGNvbnN0IHZtID0gbmV3IFZpZXdNb2RlbENsYXNzKHZtU2NyZWVuKSxcblx0XHRcdHBvc2l0aW9uID0gVmlld01vZGVsQ2xhc3MuX190eXBlIHx8ICcnLFxuXHRcdFx0dm1QbGFjZSA9IHBvc2l0aW9uID8gJCgnI3JsLWNvbnRlbnQgI3JsLScgKyBwb3NpdGlvbi50b0xvd2VyQ2FzZSgpKSA6IG51bGw7XG5cblx0XHRWaWV3TW9kZWxDbGFzcy5fX2J1aWxkZWQgPSB0cnVlO1xuXHRcdFZpZXdNb2RlbENsYXNzLl9fdm0gPSB2bTtcblxuXHRcdHZtLm9uU2hvd1RyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR2bS5vbkhpZGVUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR2bS52aWV3TW9kZWxOYW1lID0gVmlld01vZGVsQ2xhc3MuX19uYW1lO1xuXHRcdHZtLnZpZXdNb2RlbE5hbWVzID0gVmlld01vZGVsQ2xhc3MuX19uYW1lcztcblx0XHR2bS52aWV3TW9kZWxUZW1wbGF0ZUlEID0gVmlld01vZGVsQ2xhc3MuX190ZW1wbGF0ZUlEO1xuXHRcdHZtLnZpZXdNb2RlbFBvc2l0aW9uID0gVmlld01vZGVsQ2xhc3MuX190eXBlO1xuXG5cdFx0aWYgKHZtUGxhY2UgJiYgMSA9PT0gdm1QbGFjZS5sZW5ndGgpIHtcblx0XHRcdHZtRG9tID0gJCgnPGRpdj48L2Rpdj4nKVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ3JsLXZpZXctbW9kZWwnKVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ1JMLScgKyB2bS52aWV3TW9kZWxUZW1wbGF0ZUlEKVxuXHRcdFx0XHQuaGlkZSgpO1xuXHRcdFx0dm1Eb20uYXBwZW5kVG8odm1QbGFjZSk7XG5cblx0XHRcdHZtLnZpZXdNb2RlbERvbSA9IHZtRG9tO1xuXHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20gPSB2bURvbTtcblxuXHRcdFx0aWYgKFZpZXdUeXBlLlBvcHVwID09PSBwb3NpdGlvbikge1xuXHRcdFx0XHR2bS5jYW5jZWxDb21tYW5kID0gdm0uY2xvc2VDb21tYW5kID0gY3JlYXRlQ29tbWFuZCgoKSA9PiB7XG5cdFx0XHRcdFx0aGlkZVNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dm0ubW9kYWxWaXNpYmlsaXR5LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5zaG93KCk7XG5cdFx0XHRcdFx0XHR2bS5zdG9yZUFuZFNldEtleVNjb3BlKCk7XG5cblx0XHRcdFx0XHRcdHBvcHVwVmlzaWJpbGl0eU5hbWVzLnB1c2godm0udmlld01vZGVsTmFtZSk7XG5cdFx0XHRcdFx0XHR2bS52aWV3TW9kZWxEb20uY3NzKCd6LWluZGV4JywgMzAwMCArIHBvcHVwVmlzaWJpbGl0eU5hbWVzKCkubGVuZ3RoICsgMTApO1xuXG5cdFx0XHRcdFx0XHRpZiAodm0ub25TaG93VHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHR2bS5vblNob3dUcmlnZ2VyKCF2bS5vblNob3dUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCA1MDApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uSGlkZScpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odm0sICdvbkhpZGVXaXRoRGVsYXknLCBbXSwgNTAwKTtcblxuXHRcdFx0XHRcdFx0aWYgKHZtLm9uSGlkZVRyaWdnZXIpIHtcblx0XHRcdFx0XHRcdFx0dm0ub25IaWRlVHJpZ2dlcighdm0ub25IaWRlVHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dm0ucmVzdG9yZUtleVNjb3BlKCk7XG5cblx0XHRcdFx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1vbi1oaWRlJywgVmlld01vZGVsQ2xhc3MpO1xuXG5cdFx0XHRcdFx0XHRwb3B1cFZpc2liaWxpdHlOYW1lcy5yZW1vdmUodm0udmlld01vZGVsTmFtZSk7XG5cdFx0XHRcdFx0XHR2bS52aWV3TW9kZWxEb20uY3NzKCd6LWluZGV4JywgMjAwMCk7XG5cblx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdm0udmlld01vZGVsRG9tLmhpZGUoKSwgMzAwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtcHJlLWJ1aWxkJywgVmlld01vZGVsQ2xhc3MsIHZtRG9tKTtcblxuXHRcdFx0a28uYXBwbHlCaW5kaW5nQWNjZXNzb3JzVG9Ob2RlKFxuXHRcdFx0XHR2bURvbVswXSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRyYW5zbGF0b3JJbml0OiB0cnVlLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiAoKSA9PiAoeyBuYW1lOiB2bS52aWV3TW9kZWxUZW1wbGF0ZUlEIH0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHZtXG5cdFx0XHQpO1xuXG5cdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uQnVpbGQnLCBbdm1Eb21dKTtcblx0XHRcdGlmICh2bSAmJiBWaWV3VHlwZS5Qb3B1cCA9PT0gcG9zaXRpb24pIHtcblx0XHRcdFx0dm0ucmVnaXN0ZXJQb3B1cEtleURvd24oKTtcblx0XHRcdH1cblxuXHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLXBvc3QtYnVpbGQnLCBWaWV3TW9kZWxDbGFzcywgdm1Eb20pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb2coJ0Nhbm5vdCBmaW5kIHZpZXcgbW9kZWwgcG9zaXRpb246ICcgKyBwb3NpdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFZpZXdNb2RlbENsYXNzID8gVmlld01vZGVsQ2xhc3MuX192bSA6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvd1NjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93LCBwYXJhbXMgPSBbXSkge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdyk7XG5cdGlmIChNb2RhbFZpZXcpIHtcblx0XHRidWlsZFZpZXdNb2RlbChNb2RhbFZpZXcpO1xuXG5cdFx0aWYgKE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvbkJlZm9yZVNob3cnLCBwYXJhbXMgfHwgW10pO1xuXG5cdFx0XHRNb2RhbFZpZXcuX192bS5tb2RhbFZpc2liaWxpdHkodHJ1ZSk7XG5cblx0XHRcdGRlbGVnYXRlUnVuKE1vZGFsVmlldy5fX3ZtLCAnb25TaG93JywgcGFyYW1zIHx8IFtdKTtcblxuXHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLW9uLXNob3cnLCBNb2RhbFZpZXcsIHBhcmFtcyB8fCBbXSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FybVVwU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3cpIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3cpO1xuXHRpZiAoTW9kYWxWaWV3KSB7XG5cdFx0YnVpbGRWaWV3TW9kZWwoTW9kYWxWaWV3KTtcblxuXHRcdGlmIChNb2RhbFZpZXcuX192bSAmJiBNb2RhbFZpZXcuX19kb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKE1vZGFsVmlldy5fX3ZtLCAnb25XYXJtVXAnKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvcHVwVmlzaWJsZShWaWV3TW9kZWxDbGFzc1RvU2hvdykge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdyk7XG5cdHJldHVybiBNb2RhbFZpZXcgJiYgTW9kYWxWaWV3Ll9fdm0gPyBNb2RhbFZpZXcuX192bS5tb2RhbFZpc2liaWxpdHkoKSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JlZW5OYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViUGFydFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JlZW5PblJvdXRlKHNjcmVlbk5hbWUsIHN1YlBhcnQpIHtcblx0bGV0IHZtU2NyZWVuID0gbnVsbCxcblx0XHRpc1NhbWVTY3JlZW4gPSBmYWxzZSxcblx0XHRjcm9zcyA9IG51bGw7XG5cblx0aWYgKCcnID09PSBwU3RyaW5nKHNjcmVlbk5hbWUpKSB7XG5cdFx0c2NyZWVuTmFtZSA9IGRlZmF1bHRTY3JlZW5OYW1lO1xuXHR9XG5cblx0aWYgKCcnICE9PSBzY3JlZW5OYW1lKSB7XG5cdFx0dm1TY3JlZW4gPSBzY3JlZW4oc2NyZWVuTmFtZSk7XG5cdFx0aWYgKCF2bVNjcmVlbikge1xuXHRcdFx0dm1TY3JlZW4gPSBzY3JlZW4oZGVmYXVsdFNjcmVlbk5hbWUpO1xuXHRcdFx0aWYgKHZtU2NyZWVuKSB7XG5cdFx0XHRcdHN1YlBhcnQgPSBzY3JlZW5OYW1lICsgJy8nICsgc3ViUGFydDtcblx0XHRcdFx0c2NyZWVuTmFtZSA9IGRlZmF1bHRTY3JlZW5OYW1lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh2bVNjcmVlbiAmJiB2bVNjcmVlbi5fX3N0YXJ0ZWQpIHtcblx0XHRcdGlzU2FtZVNjcmVlbiA9IGN1cnJlbnRTY3JlZW4gJiYgdm1TY3JlZW4gPT09IGN1cnJlbnRTY3JlZW47XG5cblx0XHRcdGlmICghdm1TY3JlZW4uX19idWlsZGVkKSB7XG5cdFx0XHRcdHZtU2NyZWVuLl9fYnVpbGRlZCA9IHRydWU7XG5cblx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheSh2bVNjcmVlbi52aWV3TW9kZWxzKCkpKSB7XG5cdFx0XHRcdFx0Xy5lYWNoKHZtU2NyZWVuLnZpZXdNb2RlbHMoKSwgKFZpZXdNb2RlbENsYXNzKSA9PiB7XG5cdFx0XHRcdFx0XHRidWlsZFZpZXdNb2RlbChWaWV3TW9kZWxDbGFzcywgdm1TY3JlZW4pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZWdhdGVSdW4odm1TY3JlZW4sICdvbkJ1aWxkJyk7XG5cdFx0XHR9XG5cblx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHQvLyBoaWRlIHNjcmVlblxuXHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbiAmJiAhaXNTYW1lU2NyZWVuKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uSGlkZScpO1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKGN1cnJlbnRTY3JlZW4sICdvbkhpZGVXaXRoRGVsYXknLCBbXSwgNTAwKTtcblxuXHRcdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuLm9uSGlkZVRyaWdnZXIpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRTY3JlZW4ub25IaWRlVHJpZ2dlcighY3VycmVudFNjcmVlbi5vbkhpZGVUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkoY3VycmVudFNjcmVlbi52aWV3TW9kZWxzKCkpKSB7XG5cdFx0XHRcdFx0XHRfLmVhY2goY3VycmVudFNjcmVlbi52aWV3TW9kZWxzKCksIChWaWV3TW9kZWxDbGFzcykgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld1R5cGUuUG9wdXAgIT09IFZpZXdNb2RlbENsYXNzLl9fdm0udmlld01vZGVsUG9zaXRpb25cblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20uaGlkZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0udmlld01vZGVsVmlzaWJpbGl0eShmYWxzZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFZpZXdNb2RlbENsYXNzLl9fdm0ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS5vbkhpZGVUcmlnZ2VyKCFWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uSGlkZVRyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRjdXJyZW50U2NyZWVuID0gdm1TY3JlZW47XG5cblx0XHRcdFx0Ly8gc2hvdyBzY3JlZW5cblx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4gJiYgIWlzU2FtZVNjcmVlbikge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKGN1cnJlbnRTY3JlZW4sICdvblNob3cnKTtcblx0XHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbi5vblNob3dUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50U2NyZWVuLm9uU2hvd1RyaWdnZXIoIWN1cnJlbnRTY3JlZW4ub25TaG93VHJpZ2dlcigpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRydW5Ib29rKCdzY3JlZW4tb24tc2hvdycsIFtjdXJyZW50U2NyZWVuLnNjcmVlbk5hbWUoKSwgY3VycmVudFNjcmVlbl0pO1xuXG5cdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRcdF8uZWFjaChjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSwgKFZpZXdNb2RlbENsYXNzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3VHlwZS5Qb3B1cCAhPT0gVmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxQb3NpdGlvblxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25CZWZvcmVTaG93Jyk7XG5cblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbS5zaG93KCk7XG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxWaXNpYmlsaXR5KHRydWUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uU2hvd1RyaWdnZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0ub25TaG93VHJpZ2dlcighVmlld01vZGVsQ2xhc3MuX192bS5vblNob3dUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvblNob3dXaXRoRGVsYXknLCBbXSwgMjAwKTtcblx0XHRcdFx0XHRcdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtb24tc2hvdycsIFZpZXdNb2RlbENsYXNzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIC0tXG5cblx0XHRcdFx0Y3Jvc3MgPSB2bVNjcmVlbiAmJiB2bVNjcmVlbi5fX2Nyb3NzID8gdm1TY3JlZW4uX19jcm9zcygpIDogbnVsbDtcblx0XHRcdFx0aWYgKGNyb3NzKSB7XG5cdFx0XHRcdFx0Y3Jvc3MucGFyc2Uoc3ViUGFydCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IHNjcmVlbnNDbGFzc2VzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U2NyZWVucyhzY3JlZW5zQ2xhc3Nlcykge1xuXHRfLmVhY2goc2NyZWVuc0NsYXNzZXMsIChDU2NyZWVuKSA9PiB7XG5cdFx0aWYgKENTY3JlZW4pIHtcblx0XHRcdGNvbnN0IHZtU2NyZWVuID0gbmV3IENTY3JlZW4oKSxcblx0XHRcdFx0c2NyZWVuTmFtZSA9IHZtU2NyZWVuID8gdm1TY3JlZW4uc2NyZWVuTmFtZSgpIDogJyc7XG5cblx0XHRcdGlmICh2bVNjcmVlbiAmJiAnJyAhPT0gc2NyZWVuTmFtZSkge1xuXHRcdFx0XHRpZiAoJycgPT09IGRlZmF1bHRTY3JlZW5OYW1lKSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFNjcmVlbk5hbWUgPSBzY3JlZW5OYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0U0NSRUVOU1tzY3JlZW5OYW1lXSA9IHZtU2NyZWVuO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Xy5lYWNoKFNDUkVFTlMsICh2bVNjcmVlbikgPT4ge1xuXHRcdGlmICh2bVNjcmVlbiAmJiAhdm1TY3JlZW4uX19zdGFydGVkICYmIHZtU2NyZWVuLl9fc3RhcnQpIHtcblx0XHRcdHZtU2NyZWVuLl9fc3RhcnRlZCA9IHRydWU7XG5cdFx0XHR2bVNjcmVlbi5fX3N0YXJ0KCk7XG5cblx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1wcmUtc3RhcnQnLCBbdm1TY3JlZW4uc2NyZWVuTmFtZSgpLCB2bVNjcmVlbl0pO1xuXHRcdFx0ZGVsZWdhdGVSdW4odm1TY3JlZW4sICdvblN0YXJ0Jyk7XG5cdFx0XHRydW5Ib29rKCdzY3JlZW4tcG9zdC1zdGFydCcsIFt2bVNjcmVlbi5zY3JlZW5OYW1lKCksIHZtU2NyZWVuXSk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBjcm9zcyA9IGNyb3Nzcm9hZHMuY3JlYXRlKCk7XG5cdGNyb3NzLmFkZFJvdXRlKC9eKFthLXpBLVowLTktXSopXFwvPyguKikkLywgc2NyZWVuT25Sb3V0ZSk7XG5cblx0aGFzaGVyLmluaXRpYWxpemVkLmFkZChjcm9zcy5wYXJzZSwgY3Jvc3MpO1xuXHRoYXNoZXIuY2hhbmdlZC5hZGQoY3Jvc3MucGFyc2UsIGNyb3NzKTtcblx0aGFzaGVyLmluaXQoKTtcblxuXHRfLmRlbGF5KCgpID0+ICRodG1sLnJlbW92ZUNsYXNzKCdybC1zdGFydGVkLXRyaWdnZXInKS5hZGRDbGFzcygncmwtc3RhcnRlZCcpLCAxMDApO1xuXHRfLmRlbGF5KCgpID0+ICRodG1sLmFkZENsYXNzKCdybC1zdGFydGVkLWRlbGF5JyksIDIwMCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNIYXNoXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBzaWxlbmNlID0gZmFsc2VcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHJlcGxhY2UgPSBmYWxzZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRIYXNoKGhhc2gsIHNpbGVuY2UgPSBmYWxzZSwgcmVwbGFjZSA9IGZhbHNlKSB7XG5cdGhhc2ggPSAnIycgPT09IGhhc2guc3Vic3RyKDAsIDEpID8gaGFzaC5zdWJzdHIoMSkgOiBoYXNoO1xuXHRoYXNoID0gJy8nID09PSBoYXNoLnN1YnN0cigwLCAxKSA/IGhhc2guc3Vic3RyKDEpIDogaGFzaDtcblxuXHRjb25zdCBjbWQgPSByZXBsYWNlID8gJ3JlcGxhY2VIYXNoJyA6ICdzZXRIYXNoJztcblxuXHRpZiAoc2lsZW5jZSkge1xuXHRcdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IGZhbHNlO1xuXHRcdGhhc2hlcltjbWRdKGhhc2gpO1xuXHRcdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcblx0XHRoYXNoZXJbY21kXShoYXNoKTtcblx0XHRoYXNoZXIuc2V0SGFzaChoYXNoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdmlld0RlY29yYXRvcih7IG5hbWUsIHR5cGUsIHRlbXBsYXRlSUQgfSkge1xuXHRyZXR1cm4gKHRhcmdldCkgPT4ge1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdGlmIChpc0FycmF5KG5hbWUpKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Ll9fbmFtZXMgPSBuYW1lO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRhcmdldC5fX25hbWVzID0gW25hbWVdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0Ll9fbmFtZSA9IHRhcmdldC5fX25hbWVzWzBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZSkge1xuXHRcdFx0XHR0YXJnZXQuX190eXBlID0gdHlwZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRlbXBsYXRlSUQpIHtcblx0XHRcdFx0dGFyZ2V0Ll9fdGVtcGxhdGVJRCA9IHRlbXBsYXRlSUQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gcG9wdXBEZWNvcmF0b3IoeyBuYW1lLCB0ZW1wbGF0ZUlEIH0pIHtcblx0cmV0dXJuIHZpZXdEZWNvcmF0b3IoeyBuYW1lLCB0eXBlOiBWaWV3VHlwZS5Qb3B1cCwgdGVtcGxhdGVJRCB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYW5FeGVjdXRlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGNvbW1hbmREZWNvcmF0b3IoY2FuRXhlY3V0ZSA9IHRydWUpIHtcblx0cmV0dXJuICh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikgPT4ge1xuXHRcdGlmICgha2V5IHx8ICFrZXkubWF0Y2goL0NvbW1hbmQkLykpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgbmFtZSBcIiR7a2V5fVwiIHNob3VsZCBlbmQgd2l0aCBDb21tYW5kIHN1ZmZpeGApO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlID0gZGVzY3JpcHRvci52YWx1ZSB8fCBkZXNjcmlwdG9yLmluaXRpYWxpemVyKCksXG5cdFx0XHRub3JtQ2FuRXhlY3V0ZSA9IGlzRnVuYyhjYW5FeGVjdXRlKSA/IGNhbkV4ZWN1dGUgOiAoKSA9PiAhIWNhbkV4ZWN1dGU7XG5cblx0XHRkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24oLi4uYXJncykge1xuXHRcdFx0aWYgKG5vcm1DYW5FeGVjdXRlLmNhbGwodGhpcywgdGhpcykpIHtcblx0XHRcdFx0dmFsdWUuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0ZGVzY3JpcHRvci52YWx1ZS5fX3JlYWxDYW5FeGVjdXRlID0gbm9ybUNhbkV4ZWN1dGU7XG5cdFx0ZGVzY3JpcHRvci52YWx1ZS5pc0NvbW1hbmQgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIGRlc2NyaXB0b3I7XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHttaWNlZH0gJGl0ZW1zXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNldHRpbmdzTWVudUtleXNIYW5kbGVyKCRpdGVtcykge1xuXHRyZXR1cm4gXy50aHJvdHRsZSgoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRjb25zdCB1cCA9IGhhbmRsZXIgJiYgJ3VwJyA9PT0gaGFuZGxlci5zaG9ydGN1dDtcblxuXHRcdGlmIChldmVudCAmJiAkaXRlbXMubGVuZ3RoKSB7XG5cdFx0XHRsZXQgaW5kZXggPSAkaXRlbXMuaW5kZXgoJGl0ZW1zLmZpbHRlcignLnNlbGVjdGVkJykpO1xuXHRcdFx0aWYgKHVwICYmIDAgPCBpbmRleCkge1xuXHRcdFx0XHRpbmRleCAtPSAxO1xuXHRcdFx0fSBlbHNlIGlmICghdXAgJiYgaW5kZXggPCAkaXRlbXMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRpbmRleCArPSAxO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCByZXN1bHRIYXNoID0gJGl0ZW1zLmVxKGluZGV4KS5hdHRyKCdocmVmJyk7XG5cdFx0XHRpZiAocmVzdWx0SGFzaCkge1xuXHRcdFx0XHRzZXRIYXNoKHJlc3VsdEhhc2gsIGZhbHNlLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIE1hZ2ljcy5UaW1lMjAwbXMpO1xufVxuXG5leHBvcnQge1xuXHRjb21tYW5kRGVjb3JhdG9yLFxuXHRjb21tYW5kRGVjb3JhdG9yIGFzIGNvbW1hbmQsXG5cdHZpZXdEZWNvcmF0b3IsXG5cdHZpZXdEZWNvcmF0b3IgYXMgdmlldyxcblx0dmlld0RlY29yYXRvciBhcyB2aWV3TW9kZWwsXG5cdHBvcHVwRGVjb3JhdG9yLFxuXHRwb3B1cERlY29yYXRvciBhcyBwb3B1cCxcblx0c2V0dGluZ3NNZW51S2V5c0hhbmRsZXJcbn07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiwgVXBsb2FkRXJyb3JDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIGlzVW5kLCBpc051bGwsIGhhcywgbWljcm90aW1lLCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7ICRodG1sLCBiQW5pbWF0aW9uU3VwcG9ydGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgcmVsb2FkIGFzIG1vbWVudG9yUmVsb2FkIH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcbmltcG9ydCB7IGxhbmdMaW5rIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxubGV0IEkxOE5fREFUQSA9IHdpbmRvdy5yYWlubG9vcEkxOE4gfHwge307XG5cbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEEgPSB7fTtcbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX01BUCA9IFtcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5BdXRoRXJyb3IsICdOT1RJRklDQVRJT05TL0FVVEhfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5BY2Nlc3NFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDRVNTX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLCAnTk9USUZJQ0FUSU9OUy9DT05ORUNUSU9OX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FwdGNoYUVycm9yLCAnTk9USUZJQ0FUSU9OUy9DQVBUQ0hBX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9GQUNFQk9PS19MT0dJTl9BQ0NFU1NfRElTQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLlNvY2lhbFR3aXR0ZXJMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9UV0lUVEVSX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlLCAnTk9USUZJQ0FUSU9OUy9TT0NJQUxfR09PR0xFX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCwgJ05PVElGSUNBVElPTlMvRE9NQUlOX05PVF9BTExPV0VEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfTk9UX0FMTE9XRUQnXSxcblxuXHRbTm90aWZpY2F0aW9uLkFjY291bnRUd29GYWN0b3JBdXRoUmVxdWlyZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfVFdPX0ZBQ1RPUl9BVVRIX1JFUVVJUkVEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9UV09fRkFDVE9SX0FVVEhfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkLCAnTk9USUZJQ0FUSU9OUy9DT1VMRF9OT1RfU0FWRV9ORVdfUEFTU1dPUkQnXSxcblx0W05vdGlmaWNhdGlvbi5DdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QsICdOT1RJRklDQVRJT05TL0NVUlJFTlRfUEFTU1dPUkRfSU5DT1JSRUNUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRTaG9ydCwgJ05PVElGSUNBVElPTlMvTkVXX1BBU1NXT1JEX1NIT1JUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRXZWFrLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfV0VBSyddLFxuXHRbTm90aWZpY2F0aW9uLk5ld1Bhc3N3b3JkRm9yYmlkZGVuLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfRk9SQklEREVOVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ29udGFjdHNTeW5jRXJyb3IsICdOT1RJRklDQVRJT05TL0NPTlRBQ1RTX1NZTkNfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRHZXRNZXNzYWdlTGlzdCwgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfTUVTU0FHRV9MSVNUJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudEdldE1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfR0VUX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRNb3ZlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9NT1ZFX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50Q29weU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfTU9WRV9NRVNTQUdFJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfU0FWRV9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNlbmRNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NFTkRfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRSZWNpcGllbnRzLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1JFQ0lQSUVOVFMnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlRmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX0ZJTFRFUlMnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50R2V0RmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfRklMVEVSUyddLFxuXHRbTm90aWZpY2F0aW9uLkZpbHRlcnNBcmVOb3RDb3JyZWN0LCAnTk9USUZJQ0FUSU9OUy9GSUxURVJTX0FSRV9OT1RfQ09SUkVDVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudENyZWF0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9DUkVBVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFJlbmFtZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9SRU5BTUVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZU5vbkVtcHR5Rm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9OT05fRU1QVFlfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFN1YnNjcmliZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9TVUJTQ1JJQkVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFVuc3Vic2NyaWJlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1VOU1VCU0NSSUJFX0ZPTERFUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVTZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1NFVFRJTkdTJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVQbHVnaW5TZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1BMVUdJTl9TRVRUSU5HUyddLFxuXG5cdFtOb3RpZmljYXRpb24uRG9tYWluQWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvRE9NQUlOX0FMUkVBRFlfRVhJU1RTJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50SW5zdGFsbFBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfSU5TVEFMTF9QQUNLQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZVBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX1BBQ0tBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9QTFVHSU5fUEFDS0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvVU5TVVBQT1JURURfUExVR0lOX1BBQ0tBR0UnXSxcblxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUsICdOT1RJRklDQVRJT05TL0xJQ0VOU0lOR19TRVJWRVJfSVNfVU5BVkFJTEFCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5MaWNlbnNpbmdFeHBpcmVkLCAnTk9USUZJQ0FUSU9OUy9MSUNFTlNJTkdfRVhQSVJFRCddLFxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ0Jhbm5lZCwgJ05PVElGSUNBVElPTlMvTElDRU5TSU5HX0JBTk5FRCddLFxuXG5cdFtOb3RpZmljYXRpb24uRGVtb1NlbmRNZXNzYWdlRXJyb3IsICdOT1RJRklDQVRJT05TL0RFTU9fU0VORF9NRVNTQUdFX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uRGVtb0FjY291bnRFcnJvciwgJ05PVElGSUNBVElPTlMvREVNT19BQ0NPVU5UX0VSUk9SJ10sXG5cblx0W05vdGlmaWNhdGlvbi5BY2NvdW50QWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9BTFJFQURZX0VYSVNUUyddLFxuXHRbTm90aWZpY2F0aW9uLkFjY291bnREb2VzTm90RXhpc3QsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfRE9FU19OT1RfRVhJU1QnXSxcblxuXHRbTm90aWZpY2F0aW9uLk1haWxTZXJ2ZXJFcnJvciwgJ05PVElGSUNBVElPTlMvTUFJTF9TRVJWRVJfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkSW5wdXRBcmd1bWVudCwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9JTlBVVF9BUkdVTUVOVCddLFxuXHRbTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24sICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IsICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXVxuXTtcblxuZXhwb3J0IGNvbnN0IHRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge09iamVjdD19IHZhbHVlTGlzdFxuICogQHBhcmFtIHtzdHJpbmc9fSBkZWZhdWxWYWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGkxOG4oa2V5LCB2YWx1ZUxpc3QsIGRlZmF1bFZhbHVlKSB7XG5cdGxldCB2YWx1ZU5hbWUgPSAnJyxcblx0XHRyZXN1bHQgPSBJMThOX0RBVEFba2V5XTtcblxuXHRpZiAoaXNVbmQocmVzdWx0KSkge1xuXHRcdHJlc3VsdCA9IGlzVW5kKGRlZmF1bFZhbHVlKSA/IGtleSA6IGRlZmF1bFZhbHVlO1xuXHR9XG5cblx0aWYgKCFpc1VuZCh2YWx1ZUxpc3QpICYmICFpc051bGwodmFsdWVMaXN0KSkge1xuXHRcdGZvciAodmFsdWVOYW1lIGluIHZhbHVlTGlzdCkge1xuXHRcdFx0aWYgKGhhcyh2YWx1ZUxpc3QsIHZhbHVlTmFtZSkpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoJyUnICsgdmFsdWVOYW1lICsgJyUnLCB2YWx1ZUxpc3RbdmFsdWVOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgaTE4blRvTm9kZSA9IChlbGVtZW50KSA9PiB7XG5cdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ2kxOG4nKTtcblxuXHRpZiAoa2V5KSB7XG5cdFx0aWYgKCdbJyA9PT0ga2V5LnN1YnN0cigwLCAxKSkge1xuXHRcdFx0c3dpdGNoIChrZXkuc3Vic3RyKDAsIDYpKSB7XG5cdFx0XHRcdGNhc2UgJ1todG1sXSc6XG5cdFx0XHRcdFx0JGVsLmh0bWwoaTE4bihrZXkuc3Vic3RyKDYpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1twbGFjZSc6XG5cdFx0XHRcdFx0JGVsLmF0dHIoJ3BsYWNlaG9sZGVyJywgaTE4bihrZXkuc3Vic3RyKDEzKSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdbdGl0bGUnOlxuXHRcdFx0XHRcdCRlbC5hdHRyKCd0aXRsZScsIGkxOG4oa2V5LnN1YnN0cig3KSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC50ZXh0KGkxOG4oa2V5KSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50c1xuICogQHBhcmFtIHtib29sZWFuPX0gYW5pbWF0ZSA9IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpMThuVG9Ob2RlcyhlbGVtZW50cywgYW5pbWF0ZSA9IGZhbHNlKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJ1tkYXRhLWkxOG5dJywgZWxlbWVudHMpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRpMThuVG9Ob2RlKGl0ZW0pO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFuaW1hdGUgJiYgYkFuaW1hdGlvblN1cHBvcnRlZCkge1xuXHRcdFx0JCgnLmkxOG4tYW5pbWF0aW9uW2RhdGEtaTE4bl0nLCBlbGVtZW50cykubGV0dGVyZngoe1xuXHRcdFx0XHQnZngnOiAnZmFsbCBmYWRlJyxcblx0XHRcdFx0J2JhY2t3YXJkcyc6IGZhbHNlLFxuXHRcdFx0XHQndGltaW5nJzogNTAsXG5cdFx0XHRcdCdmeF9kdXJhdGlvbic6ICc1MG1zJyxcblx0XHRcdFx0J2xldHRlcl9lbmQnOiAncmVzdG9yZScsXG5cdFx0XHRcdCdlbGVtZW50X2VuZCc6ICdyZXN0b3JlJ1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuY29uc3QgcmVsb2FkRGF0YSA9ICgpID0+IHtcblx0aWYgKHdpbmRvdy5yYWlubG9vcEkxOE4pIHtcblx0XHRJMThOX0RBVEEgPSB3aW5kb3cucmFpbmxvb3BJMThOIHx8IHt9O1xuXG5cdFx0aTE4blRvTm9kZXMod2luZG93LmRvY3VtZW50LCB0cnVlKTtcblxuXHRcdG1vbWVudG9yUmVsb2FkKCk7XG5cdFx0dHJpZ2dlcighdHJpZ2dlcigpKTtcblx0fVxuXG5cdHdpbmRvdy5yYWlubG9vcEkxOE4gPSBudWxsO1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXROb3RpZmljYXRpb25MYW5ndWFnZSgpIHtcblx0STE4Tl9OT1RJRklDQVRJT05fTUFQLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRJMThOX05PVElGSUNBVElPTl9EQVRBW2l0ZW1bMF1dID0gaTE4bihpdGVtWzFdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RhcnRDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGxhbmdDYWxsYmFjayA9IG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlKHN0YXJ0Q2FsbGJhY2ssIGxhbmdDYWxsYmFjayA9IG51bGwpIHtcblx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRzdGFydENhbGxiYWNrKCk7XG5cdH1cblxuXHRpZiAobGFuZ0NhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRcdFx0c3RhcnRDYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxhbmdDYWxsYmFjaykge1xuXHRcdFx0XHRsYW5nQ2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChzdGFydENhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoc3RhcnRDYWxsYmFjayk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHBhcmFtIHsqPX0gbWVzc2FnZSA9ICcnXG4gKiBAcGFyYW0geyo9fSBkZWZDb2RlID0gbnVsbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbihjb2RlLCBtZXNzYWdlID0gJycsIGRlZkNvZGUgPSBudWxsKSB7XG5cdGNvZGUgPSB3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDA7XG5cdGlmIChOb3RpZmljYXRpb24uQ2xpZW50Vmlld0Vycm9yID09PSBjb2RlICYmIG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZTtcblx0fVxuXG5cdGRlZkNvZGUgPSBkZWZDb2RlID8gd2luZG93LnBhcnNlSW50KGRlZkNvZGUsIDEwKSB8fCAwIDogMDtcblx0cmV0dXJuIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV0pXG5cdFx0PyBkZWZDb2RlICYmIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV0pXG5cdFx0XHQ/IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV1cblx0XHRcdDogJydcblx0XHQ6IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlXG4gKiBAcGFyYW0ge251bWJlcn0gZGVmQ29kZSA9IE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBkZWZDb2RlID0gTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24pIHtcblx0cmV0dXJuIHJlc3BvbnNlICYmIHJlc3BvbnNlLkVycm9yQ29kZVxuXHRcdD8gZ2V0Tm90aWZpY2F0aW9uKHBJbnQocmVzcG9uc2UuRXJyb3JDb2RlKSwgcmVzcG9uc2UuRXJyb3JNZXNzYWdlIHx8ICcnKVxuXHRcdDogZ2V0Tm90aWZpY2F0aW9uKGRlZkNvZGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gY29kZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShjb2RlKSB7XG5cdGxldCByZXN1bHQgPSAnJztcblx0c3dpdGNoICh3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDApIHtcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlSXNUb29CaWc6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9JU19UT09fQklHJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlUGFydGlhbGx5VXBsb2FkZWQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9QQVJUSUFMTFlfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVOb1VwbG9hZGVkOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX05PX0ZJTEVfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLk1pc3NpbmdUZW1wRm9sZGVyOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX01JU1NJTkdfVEVNUF9GT0xERVInKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVPblNhdmVpbmdFcnJvcjpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9PTl9TQVZJTkdfRklMRScpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZVR5cGU6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9UWVBFJyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX1VOS05PV04nKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkbWluXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZChhZG1pbiwgbGFuZ3VhZ2UpIHtcblx0Y29uc3Qgc3RhcnQgPSBtaWNyb3RpbWUoKTtcblxuXHQkaHRtbC5hZGRDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblxuXHRyZXR1cm4gbmV3IHdpbmRvdy5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHQkLmFqYXgoe1xuXHRcdFx0dXJsOiBsYW5nTGluayhsYW5ndWFnZSwgYWRtaW4pLFxuXHRcdFx0ZGF0YVR5cGU6ICdzY3JpcHQnLFxuXHRcdFx0Y2FjaGU6IHRydWVcblx0XHR9KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRfLmRlbGF5KFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJlbG9hZERhdGEoKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgaXNSdGwgPSAtMSA8IGluQXJyYXkoKGxhbmd1YWdlIHx8ICcnKS50b0xvd2VyQ2FzZSgpLCBbJ2FyJywgJ2FyX3NhJywgJ2hlJywgJ2hlX2hlJywgJ3VyJywgJ3VyX2lyJ10pO1xuXG5cdFx0XHRcdFx0XHQkaHRtbFxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3JsLWNoYW5naW5nLWxhbmd1YWdlJylcblx0XHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdybC1ydGwgcmwtbHRyJylcblx0XHRcdFx0XHRcdFx0Ly8gLmF0dHIoJ2RpcicsIGlzUnRsID8gJ3J0bCcgOiAnbHRyJylcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKGlzUnRsID8gJ3JsLXJ0bCcgOiAncmwtbHRyJyk7XG5cblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdDUwMCA8IG1pY3JvdGltZSgpIC0gc3RhcnQgPyAxIDogNTAwXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblx0XHRcdFx0d2luZG93LnJhaW5sb29wSTE4TiA9IG51bGw7XG5cdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH0pO1xufVxuXG4vLyBpbml0IHNlY3Rpb25cbiRodG1sLmFkZENsYXNzKCdybC0nICsgKCRodG1sLmF0dHIoJ2RpcicpIHx8ICdsdHInKSk7XG4iLCJpbXBvcnQgX09iamVjdCRjcmVhdGUgZnJvbSBcIkBiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvY3JlYXRlXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbmRcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgcFN0cmluZywgcEludCwgaXNVbmQsIGlzTm9ybWFsLCB0cmltLCBlbmNvZGVVUklDb21wb25lbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFJPT1QgPSAnLi8nLFxuXHRIQVNIX1BSRUZJWCA9ICcjLycsXG5cdFNFUlZFUl9QUkVGSVggPSAnLi8/Jyxcblx0U1VCX1FVRVJZX1BSRUZJWCA9ICcmcVtdPScsXG5cdFZFUlNJT04gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndmVyc2lvbicpLFxuXHRXRUJfUFJFRklYID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3dlYlBhdGgnKSB8fCAnJyxcblx0VkVSU0lPTl9QUkVGSVggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnd2ViVmVyc2lvblBhdGgnKSB8fCAncmFpbmxvb3Avdi8nICsgVkVSU0lPTiArICcvJyxcblx0U1RBVElDX1BSRUZJWCA9IFZFUlNJT05fUFJFRklYICsgJ3N0YXRpYy8nLFxuXHRBRE1JTl9IT1NUX1VTRSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluSG9zdFVzZScpLFxuXHRBRE1JTl9QQVRIID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluUGF0aCcpIHx8ICdhZG1pbic7XG5cbmxldCBBVVRIX1BSRUZJWCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoQWNjb3VudEhhc2gnKSB8fCAnMCc7XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZUF1dGhTdWZmaXgoKSB7XG5cdEFVVEhfUFJFRklYID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGhBY2NvdW50SGFzaCcpIHx8ICcwJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViUXVlcnlQcmVmaXgoKSB7XG5cdHJldHVybiBTVUJfUVVFUllfUFJFRklYO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc3RhcnR1cFVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3Qoc3RhcnR1cFVybCA9ICcnKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArIHBTdHJpbmcoc3RhcnR1cFVybCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RBZG1pbigpIHtcblx0cmV0dXJuIEFETUlOX0hPU1RfVVNFID8gUk9PVCA6IFNFUlZFUl9QUkVGSVggKyBBRE1JTl9QQVRIO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290VXNlcigpIHtcblx0cmV0dXJuIFJPT1Q7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFJhdyh0eXBlLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRjdXN0b21TcGVjU3VmZml4ID0gaXNVbmQoY3VzdG9tU3BlY1N1ZmZpeCkgPyBBVVRIX1BSRUZJWCA6IGN1c3RvbVNwZWNTdWZmaXg7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0Jy9SYXcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRjdXN0b21TcGVjU3VmZml4ICtcblx0XHQnLycgK1xuXHRcdHR5cGUgK1xuXHRcdCcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRkb3dubG9hZFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudERvd25sb2FkKGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdEb3dubG9hZCcsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRQcmV2aWV3KGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdWaWV3JywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFRodW1ibmFpbFByZXZpZXcoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdUaHVtYm5haWwnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50UHJldmlld0FzUGxhaW4oZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdBc1BsYWluJywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudEZyYW1lZChkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnRnJhbWVkVmlldycsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlclJlcXVlc3QodHlwZSkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvJyArIHR5cGUgKyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZCcpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRDb250YWN0cygpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZENvbnRhY3RzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZEJhY2tncm91bmQoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdVcGxvYWRCYWNrZ3JvdW5kJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ0FwcGVuZCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZShlbWFpbCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQ2hhbmdlJykgKyBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhamF4KGFkZCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQWpheCcpICsgYWRkO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VWaWV3TGluayhyZXF1ZXN0SGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggK1xuXHRcdCcvUmF3LycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0QVVUSF9QUkVGSVggK1xuXHRcdCcvVmlld0FzUGxhaW4vJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRyZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VEb3dubG9hZExpbmsocmVxdWVzdEhhc2gpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvRG93bmxvYWQvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyByZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF2YXRhckxpbmsoZW1haWwpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8wL0F2YXRhci8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKSArICcvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY0xpbmsoaGFzaCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LzAvUHVibGljLycgKyBoYXNoICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlckJhY2tncm91bmQoaGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Vc2VyQmFja2dyb3VuZC8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIGhhc2hcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGhwSW5mbygpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL0luZm8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQWRtaW5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYW5nTGluayhsYW5nLCBpc0FkbWluKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9MYW5nLzAvJyArIChpc0FkbWluID8gJ0FkbWluJyA6ICdBcHAnKSArICcvJyArIHdpbmRvdy5lbmNvZGVVUkkobGFuZykgKyAnLycgKyBWRVJTSU9OICsgJy8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c1ZjZigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c1ZjZi8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c0NzdigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c0Nzdi8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0geGF1dGggPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvY2lhbEdvb2dsZSh4YXV0aCA9IGZhbHNlKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0J1NvY2lhbEdvb2dsZScgK1xuXHRcdCgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJykgK1xuXHRcdCh4YXV0aCA/ICcmeGF1dGg9MScgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29jaWFsVHdpdHRlcigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnU29jaWFsVHdpdHRlcicgKyAoJycgIT09IEFVVEhfUFJFRklYID8gJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2NpYWxGYWNlYm9vaygpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJ1NvY2lhbEZhY2Vib29rJyArICgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRpY1ByZWZpeChwYXRoKSB7XG5cdHJldHVybiBTVEFUSUNfUFJFRklYICsgcGF0aDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlDb250YWN0UGljKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2VtcHR5LWNvbnRhY3QucG5nJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc291bmQoZmlsZU5hbWUpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnc291bmRzLycgKyBmaWxlTmFtZSk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdGlmaWNhdGlvbk1haWxJY29uKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2ljb20tbWVzc2FnZS1ub3RpZmljYXRpb24ucG5nJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3AubWluLmpzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BXb3JrZXJKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3Aud29ya2VyLm1pbi5qcycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuUGdwV29ya2VyUGF0aCgpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluLycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGVtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRoZW1lUHJldmlld0xpbmsodGhlbWUpIHtcblx0bGV0IHByZWZpeCA9IFZFUlNJT05fUFJFRklYO1xuXHRpZiAoJ0BjdXN0b20nID09PSB0aGVtZS5zdWJzdHIoLTcpKSB7XG5cdFx0dGhlbWUgPSB0cmltKHRoZW1lLnN1YnN0cmluZygwLCB0aGVtZS5sZW5ndGggLSA3KSk7XG5cdFx0cHJlZml4ID0gV0VCX1BSRUZJWDtcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyAndGhlbWVzLycgKyB3aW5kb3cuZW5jb2RlVVJJKHRoZW1lKSArICcvaW1hZ2VzL3ByZXZpZXcucG5nJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5ib3hGb2xkZXJOYW1lID0gJ0lOQk9YJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluYm94KGluYm94Rm9sZGVyTmFtZSA9ICdJTkJPWCcpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ21haWxib3gvJyArIGluYm94Rm9sZGVyTmFtZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZz19IHNjcmVlbk5hbWUgPSAnJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzKHNjcmVlbk5hbWUgPSAnJykge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyAnc2V0dGluZ3MnICsgKHNjcmVlbk5hbWUgPyAnLycgKyBzY3JlZW5OYW1lIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhYm91dCgpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ2Fib3V0Jztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkbWluKHNjcmVlbk5hbWUpIHtcblx0bGV0IHJlc3VsdCA9IEhBU0hfUFJFRklYO1xuXHRzd2l0Y2ggKHNjcmVlbk5hbWUpIHtcblx0XHRjYXNlICdBZG1pbkRvbWFpbnMnOlxuXHRcdFx0cmVzdWx0ICs9ICdkb21haW5zJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ0FkbWluU2VjdXJpdHknOlxuXHRcdFx0cmVzdWx0ICs9ICdzZWN1cml0eSc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdBZG1pbkxpY2Vuc2luZyc6XG5cdFx0XHRyZXN1bHQgKz0gJ2xpY2Vuc2luZyc7XG5cdFx0XHRicmVhaztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcGFnZSA9IDFcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc2VhcmNoID0gJydcbiAqIEBwYXJhbSB7c3RyaW5nPX0gdGhyZWFkVWlkID0gJydcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWlsQm94KGZvbGRlciwgcGFnZSA9IDEsIHNlYXJjaCA9ICcnLCB0aHJlYWRVaWQgPSAnJykge1xuXHRwYWdlID0gaXNOb3JtYWwocGFnZSkgPyBwSW50KHBhZ2UpIDogMTtcblx0c2VhcmNoID0gcFN0cmluZyhzZWFyY2gpO1xuXG5cdGxldCByZXN1bHQgPSBIQVNIX1BSRUZJWCArICdtYWlsYm94Lyc7XG5cblx0aWYgKCcnICE9PSBmb2xkZXIpIHtcblx0XHRjb25zdCByZXN1bHRUaHJlYWRVaWQgPSBwSW50KHRocmVhZFVpZCk7XG5cdFx0cmVzdWx0ICs9IHdpbmRvdy5lbmNvZGVVUkkoZm9sZGVyKSArICgwIDwgcmVzdWx0VGhyZWFkVWlkID8gJ34nICsgcmVzdWx0VGhyZWFkVWlkIDogJycpO1xuXHR9XG5cblx0aWYgKDEgPCBwYWdlKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnL3AnICsgcGFnZTtcblx0fVxuXG5cdGlmICgnJyAhPT0gc2VhcmNoKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnLycgKyB3aW5kb3cuZW5jb2RlVVJJKHNlYXJjaCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXBcIik7IiwiaW1wb3J0IHsgQWJzdHJhY3RBamF4UmVtb3RlIH0gZnJvbSAnUmVtb3RlL0Fic3RyYWN0QWpheCc7XG5cbmNsYXNzIFJlbW90ZUFkbWluQWpheCBleHRlbmRzIEFic3RyYWN0QWpheFJlbW90ZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm9SZXF1ZXN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNMb2dpblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Bhc3N3b3JkXG5cdCAqL1xuXHRhZG1pbkxvZ2luKGZDYWxsYmFjaywgc0xvZ2luLCBzUGFzc3dvcmQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluTG9naW4nLCB7XG5cdFx0XHQnTG9naW4nOiBzTG9naW4sXG5cdFx0XHQnUGFzc3dvcmQnOiBzUGFzc3dvcmRcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRhZG1pbkxvZ291dChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluTG9nb3V0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0gez99IG9EYXRhXG5cdCAqL1xuXHRzYXZlQWRtaW5Db25maWcoZkNhbGxiYWNrLCBvRGF0YSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5TZXR0aW5nc1VwZGF0ZScsIG9EYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSB2YWx1ZUZuXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmblxuXHQgKi9cblx0c2F2ZUFkbWluQ29uZmlnSGVscGVyKGtleSwgdmFsdWVGbiwgZm4pIHtcblx0XHRyZXR1cm4gKHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0ge307XG5cdFx0XHRkYXRhW2tleV0gPSB2YWx1ZUZuID8gdmFsdWVGbih2YWx1ZSkgOiB2YWx1ZTtcblx0XHRcdHRoaXMuc2F2ZUFkbWluQ29uZmlnKGZuIHx8IG51bGwsIGRhdGEpO1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiSW5jbHVkZUFsaWFzZXMgPSB0cnVlXG5cdCAqL1xuXHRkb21haW5MaXN0KGZDYWxsYmFjaywgYkluY2x1ZGVBbGlhc2VzID0gdHJ1ZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5MaXN0Jywge1xuXHRcdFx0J0luY2x1ZGVBbGlhc2VzJzogYkluY2x1ZGVBbGlhc2VzID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0cGx1Z2luTGlzdChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGx1Z2luTGlzdCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdHBhY2thZ2VzTGlzdChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFja2FnZXNMaXN0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Y29yZURhdGEoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkNvcmVEYXRhJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0dXBkYXRlQ29yZURhdGEoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblVwZGF0ZUNvcmVEYXRhJywge30sIDkwMDAwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvUGFja2FnZVxuXHQgKi9cblx0cGFja2FnZUluc3RhbGwoZkNhbGxiYWNrLCBvUGFja2FnZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnQWRtaW5QYWNrYWdlSW5zdGFsbCcsXG5cdFx0XHR7XG5cdFx0XHRcdCdJZCc6IG9QYWNrYWdlLmlkLFxuXHRcdFx0XHQnVHlwZSc6IG9QYWNrYWdlLnR5cGUsXG5cdFx0XHRcdCdGaWxlJzogb1BhY2thZ2UuZmlsZVxuXHRcdFx0fSxcblx0XHRcdDYwMDAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvUGFja2FnZVxuXHQgKi9cblx0cGFja2FnZURlbGV0ZShmQ2FsbGJhY2ssIG9QYWNrYWdlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBhY2thZ2VEZWxldGUnLCB7XG5cdFx0XHQnSWQnOiBvUGFja2FnZS5pZFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqL1xuXHRkb21haW4oZkNhbGxiYWNrLCBzTmFtZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5Mb2FkJywge1xuXHRcdFx0J05hbWUnOiBzTmFtZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqL1xuXHRwbHVnaW4oZkNhbGxiYWNrLCBzTmFtZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QbHVnaW5Mb2FkJywge1xuXHRcdFx0J05hbWUnOiBzTmFtZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqL1xuXHRkb21haW5EZWxldGUoZkNhbGxiYWNrLCBzTmFtZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5EZWxldGUnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICogQHBhcmFtIHtib29sZWFufSBiRGlzYWJsZWRcblx0ICovXG5cdGRvbWFpbkRpc2FibGUoZkNhbGxiYWNrLCBzTmFtZSwgYkRpc2FibGVkKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5EaXNhYmxlJywge1xuXHRcdFx0TmFtZTogc05hbWUsXG5cdFx0XHREaXNhYmxlZDogYkRpc2FibGVkID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge09iamVjdH0gb0NvbmZpZ1xuXHQgKi9cblx0cGx1Z2luU2V0dGluZ3NVcGRhdGUoZkNhbGxiYWNrLCBvQ29uZmlnKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QbHVnaW5TZXR0aW5nc1VwZGF0ZScsIG9Db25maWcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtib29sZWFufSBiRm9yY2Vcblx0ICovXG5cdGxpY2Vuc2luZyhmQ2FsbGJhY2ssIGJGb3JjZSkge1xuXHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluTGljZW5zaW5nJywge1xuXHRcdFx0Rm9yY2U6IGJGb3JjZSA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNEb21haW5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNLZXlcblx0ICovXG5cdGxpY2Vuc2luZ0FjdGl2YXRlKGZDYWxsYmFjaywgc0RvbWFpbiwgc0tleSkge1xuXHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluTGljZW5zaW5nQWN0aXZhdGUnLCB7XG5cdFx0XHREb21haW46IHNEb21haW4sXG5cdFx0XHRLZXk6IHNLZXlcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTmFtZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJEaXNhYmxlZFxuXHQgKi9cblx0cGx1Z2luRGlzYWJsZShmQ2FsbGJhY2ssIHNOYW1lLCBiRGlzYWJsZWQpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpbkRpc2FibGUnLCB7XG5cdFx0XHROYW1lOiBzTmFtZSxcblx0XHRcdERpc2FibGVkOiBiRGlzYWJsZWQgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdGNyZWF0ZURvbWFpbkFsaWFzKGZDYWxsYmFjaywgc05hbWUsIHNBbGlhcykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5BbGlhc1NhdmUnLCB7XG5cdFx0XHROYW1lOiBzTmFtZSxcblx0XHRcdEFsaWFzOiBzQWxpYXNcblx0XHR9KTtcblx0fVxuXG5cdGNyZWF0ZU9yVXBkYXRlRG9tYWluKFxuXHRcdGZDYWxsYmFjayxcblx0XHRiQ3JlYXRlLFxuXHRcdHNOYW1lLFxuXHRcdHNJbmNIb3N0LFxuXHRcdGlJbmNQb3J0LFxuXHRcdHNJbmNTZWN1cmUsXG5cdFx0YkluY1Nob3J0TG9naW4sXG5cdFx0YlVzZVNpZXZlLFxuXHRcdHNTaWV2ZUFsbG93UmF3LFxuXHRcdHNTaWV2ZUhvc3QsXG5cdFx0aVNpZXZlUG9ydCxcblx0XHRzU2lldmVTZWN1cmUsXG5cdFx0c091dEhvc3QsXG5cdFx0aU91dFBvcnQsXG5cdFx0c091dFNlY3VyZSxcblx0XHRiT3V0U2hvcnRMb2dpbixcblx0XHRiT3V0QXV0aCxcblx0XHRiT3V0UGhwTWFpbCxcblx0XHRzV2hpdGVMaXN0XG5cdCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5TYXZlJywge1xuXHRcdFx0J0NyZWF0ZSc6IGJDcmVhdGUgPyAnMScgOiAnMCcsXG5cdFx0XHQnTmFtZSc6IHNOYW1lLFxuXG5cdFx0XHQnSW5jSG9zdCc6IHNJbmNIb3N0LFxuXHRcdFx0J0luY1BvcnQnOiBpSW5jUG9ydCxcblx0XHRcdCdJbmNTZWN1cmUnOiBzSW5jU2VjdXJlLFxuXHRcdFx0J0luY1Nob3J0TG9naW4nOiBiSW5jU2hvcnRMb2dpbiA/ICcxJyA6ICcwJyxcblxuXHRcdFx0J1VzZVNpZXZlJzogYlVzZVNpZXZlID8gJzEnIDogJzAnLFxuXHRcdFx0J1NpZXZlQWxsb3dSYXcnOiBzU2lldmVBbGxvd1JhdyA/ICcxJyA6ICcwJyxcblx0XHRcdCdTaWV2ZUhvc3QnOiBzU2lldmVIb3N0LFxuXHRcdFx0J1NpZXZlUG9ydCc6IGlTaWV2ZVBvcnQsXG5cdFx0XHQnU2lldmVTZWN1cmUnOiBzU2lldmVTZWN1cmUsXG5cblx0XHRcdCdPdXRIb3N0Jzogc091dEhvc3QsXG5cdFx0XHQnT3V0UG9ydCc6IGlPdXRQb3J0LFxuXHRcdFx0J091dFNlY3VyZSc6IHNPdXRTZWN1cmUsXG5cdFx0XHQnT3V0U2hvcnRMb2dpbic6IGJPdXRTaG9ydExvZ2luID8gJzEnIDogJzAnLFxuXHRcdFx0J091dEF1dGgnOiBiT3V0QXV0aCA/ICcxJyA6ICcwJyxcblx0XHRcdCdPdXRVc2VQaHBNYWlsJzogYk91dFBocE1haWwgPyAnMScgOiAnMCcsXG5cblx0XHRcdCdXaGl0ZUxpc3QnOiBzV2hpdGVMaXN0XG5cdFx0fSk7XG5cdH1cblxuXHR0ZXN0Q29ubmVjdGlvbkZvckRvbWFpbihcblx0XHRmQ2FsbGJhY2ssXG5cdFx0c05hbWUsXG5cdFx0c0luY0hvc3QsXG5cdFx0aUluY1BvcnQsXG5cdFx0c0luY1NlY3VyZSxcblx0XHRiVXNlU2lldmUsXG5cdFx0c1NpZXZlSG9zdCxcblx0XHRpU2lldmVQb3J0LFxuXHRcdHNTaWV2ZVNlY3VyZSxcblx0XHRzT3V0SG9zdCxcblx0XHRpT3V0UG9ydCxcblx0XHRzT3V0U2VjdXJlLFxuXHRcdGJPdXRBdXRoLFxuXHRcdGJPdXRQaHBNYWlsXG5cdCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5UZXN0Jywge1xuXHRcdFx0J05hbWUnOiBzTmFtZSxcblx0XHRcdCdJbmNIb3N0Jzogc0luY0hvc3QsXG5cdFx0XHQnSW5jUG9ydCc6IGlJbmNQb3J0LFxuXHRcdFx0J0luY1NlY3VyZSc6IHNJbmNTZWN1cmUsXG5cdFx0XHQnVXNlU2lldmUnOiBiVXNlU2lldmUgPyAnMScgOiAnMCcsXG5cdFx0XHQnU2lldmVIb3N0Jzogc1NpZXZlSG9zdCxcblx0XHRcdCdTaWV2ZVBvcnQnOiBpU2lldmVQb3J0LFxuXHRcdFx0J1NpZXZlU2VjdXJlJzogc1NpZXZlU2VjdXJlLFxuXHRcdFx0J091dEhvc3QnOiBzT3V0SG9zdCxcblx0XHRcdCdPdXRQb3J0JzogaU91dFBvcnQsXG5cdFx0XHQnT3V0U2VjdXJlJzogc091dFNlY3VyZSxcblx0XHRcdCdPdXRBdXRoJzogYk91dEF1dGggPyAnMScgOiAnMCcsXG5cdFx0XHQnT3V0VXNlUGhwTWFpbCc6IGJPdXRQaHBNYWlsID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0gez99IG9EYXRhXG5cdCAqL1xuXHR0ZXN0Q29udGFjdHMoZkNhbGxiYWNrLCBvRGF0YSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Db250YWN0c1Rlc3QnLCBvRGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0gez99IG9EYXRhXG5cdCAqL1xuXHRzYXZlTmV3QWRtaW5QYXNzd29yZChmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBhc3N3b3JkVXBkYXRlJywgb0RhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGFkbWluUGluZyhmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGluZycpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBSZW1vdGVBZG1pbkFqYXgoKTtcbiIsImltcG9ydCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9mb3ItZWFjaFwiO1xuaW1wb3J0IF9PYmplY3Qka2V5cyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9rZXlzXCI7XG5pbXBvcnQgX3JlZHVjZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZWR1Y2VcIjtcbmltcG9ydCBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlXCI7XG5pbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL3NsaWNlXCI7XG5pbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcHBseURlY29yYXRlZERlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eSwgZGVjb3JhdG9ycywgZGVzY3JpcHRvciwgY29udGV4dCkge1xuICB2YXIgX2NvbnRleHQsIF9jb250ZXh0MiwgX2NvbnRleHQzO1xuXG4gIHZhciBkZXNjID0ge307XG5cbiAgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRrZXlzKGRlc2NyaXB0b3IpKS5jYWxsKF9jb250ZXh0LCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgZGVzY1trZXldID0gZGVzY3JpcHRvcltrZXldO1xuICB9KTtcblxuICBkZXNjLmVudW1lcmFibGUgPSAhIWRlc2MuZW51bWVyYWJsZTtcbiAgZGVzYy5jb25maWd1cmFibGUgPSAhIWRlc2MuY29uZmlndXJhYmxlO1xuXG4gIGlmICgndmFsdWUnIGluIGRlc2MgfHwgZGVzYy5pbml0aWFsaXplcikge1xuICAgIGRlc2Mud3JpdGFibGUgPSB0cnVlO1xuICB9XG5cbiAgZGVzYyA9IF9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0MiA9IF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDMgPSBfc2xpY2VJbnN0YW5jZVByb3BlcnR5KGRlY29yYXRvcnMpLmNhbGwoZGVjb3JhdG9ycykpLmNhbGwoX2NvbnRleHQzKSkuY2FsbChfY29udGV4dDIsIGZ1bmN0aW9uIChkZXNjLCBkZWNvcmF0b3IpIHtcbiAgICByZXR1cm4gZGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHksIGRlc2MpIHx8IGRlc2M7XG4gIH0sIGRlc2MpO1xuXG4gIGlmIChjb250ZXh0ICYmIGRlc2MuaW5pdGlhbGl6ZXIgIT09IHZvaWQgMCkge1xuICAgIGRlc2MudmFsdWUgPSBkZXNjLmluaXRpYWxpemVyID8gZGVzYy5pbml0aWFsaXplci5jYWxsKGNvbnRleHQpIDogdm9pZCAwO1xuICAgIGRlc2MuaW5pdGlhbGl6ZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoZGVzYy5pbml0aWFsaXplciA9PT0gdm9pZCAwKSB7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBkZXNjKTtcblxuICAgIGRlc2MgPSBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGRlc2M7XG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmtleTsiLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBQbHVnaW5zIGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcblxuY29uc3QgU1VCUyA9IHt9O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY1xuICogQHBhcmFtIHtPYmplY3Q9fSBjb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWIobmFtZSwgZnVuYywgY29udGV4dCkge1xuXHRpZiAoaXNPYmplY3QobmFtZSkpIHtcblx0XHRjb250ZXh0ID0gZnVuYyB8fCBudWxsO1xuXHRcdGZ1bmMgPSBudWxsO1xuXG5cdFx0Xy5lYWNoKG5hbWUsIChzdWJGdW5jLCBzdWJOYW1lKSA9PiB7XG5cdFx0XHRzdWIoc3ViTmFtZSwgc3ViRnVuYywgY29udGV4dCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGlzVW5kKFNVQlNbbmFtZV0pKSB7XG5cdFx0XHRTVUJTW25hbWVdID0gW107XG5cdFx0fVxuXG5cdFx0U1VCU1tuYW1lXS5wdXNoKFtmdW5jLCBjb250ZXh0XSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtBcnJheT19IGFyZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YihuYW1lLCBhcmdzKSB7XG5cdFBsdWdpbnMucnVuSG9vaygncmwtcHViJywgW25hbWUsIGFyZ3NdKTtcblxuXHRpZiAoIWlzVW5kKFNVQlNbbmFtZV0pKSB7XG5cdFx0Xy5lYWNoKFNVQlNbbmFtZV0sIChpdGVtcykgPT4ge1xuXHRcdFx0aWYgKGl0ZW1zWzBdKSB7XG5cdFx0XHRcdGl0ZW1zWzBdLmFwcGx5KGl0ZW1zWzFdIHx8IG51bGwsIGFyZ3MgfHwgW10pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iLCJleHBvcnQgY29uc3QgTUVTU0FHRVNfUEVSX1BBR0UgPSAyMDtcblxuZXhwb3J0IGNvbnN0IE1FU1NBR0VTX1BFUl9QQUdFX1ZBTFVFUyA9IFsxMCwgMjAsIDMwLCA1MCwgMTAwXTtcblxuZXhwb3J0IGNvbnN0IENPTlRBQ1RTX1BFUl9QQUdFID0gNTA7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FKQVhfVElNRU9VVCA9IDMwMDAwO1xuXG5leHBvcnQgY29uc3QgU0VBUkNIX0FKQVhfVElNRU9VVCA9IDMwMDAwMDtcblxuZXhwb3J0IGNvbnN0IFNFTkRfTUVTU0FHRV9BSkFYX1RJTUVPVVQgPSAzMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBTQVZFX01FU1NBR0VfQUpBWF9USU1FT1VUID0gMjAwMDAwO1xuXG5leHBvcnQgY29uc3QgQ09OVEFDVFNfU1lOQ19BSkFYX1RJTUVPVVQgPSAyMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBVTlVTRURfT1BUSU9OX1ZBTFVFID0gJ19fVU5VU0VfXyc7XG5cbmV4cG9ydCBjb25zdCBDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUgPSAncmxjc2MnO1xuXG5leHBvcnQgY29uc3QgSU1BUF9ERUZBVUxUX1BPUlQgPSAxNDM7XG5cbmV4cG9ydCBjb25zdCBJTUFQX0RFRkFVTFRfU0VDVVJFX1BPUlQgPSA5OTM7XG5cbmV4cG9ydCBjb25zdCBTTVRQX0RFRkFVTFRfUE9SVCA9IDI1O1xuXG5leHBvcnQgY29uc3QgU01UUF9ERUZBVUxUX1NFQ1VSRV9QT1JUID0gNDY1O1xuXG5leHBvcnQgY29uc3QgU0lFVkVfREVGQVVMVF9QT1JUID0gNDE5MDtcblxuZXhwb3J0IGNvbnN0IE1FU1NBR0VfQk9EWV9DQUNIRV9MSU1JVCA9IDE1O1xuXG5leHBvcnQgY29uc3QgQUpBWF9FUlJPUl9MSU1JVCA9IDc7XG5cbmV4cG9ydCBjb25zdCBUT0tFTl9FUlJPUl9MSU1JVCA9IDEwO1xuXG5leHBvcnQgY29uc3QgUkFJTkxPT1BfVFJJQUxfS0VZID0gJ1JBSU5MT09QLVRSSUFMLUtFWSc7XG5cbi8qIGVzbGludCBtYXgtbGVuOiAwICovXG5leHBvcnQgY29uc3QgREFUQV9JTUFHRV9VU0VSX0RPVF9QSUMgPVxuXHQnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDNEFBQUF1Q0FZQUFBQlh1U3MzQUFBSEhrbEVRVlJvUTdWWlcwOGJWeENlWFJ1d0liVEdYSXdOdEJCYXFqd2dWVWlSOGxEbGJ6YTlxZTFEcFZaOWFOUS8wS3BQZWFKSzA3U3BjdUVlQ0VtVUFPYm0yMWJmckw5bE9OamV4U1lyV2ZidW5qMzd6WGRtdnBrejlvSWdDS1REMFdnMHhQZDk0VERQODNRMHp2V2E1MHZ6a2xTcmRhblZhbnFmNC9EODRHQkdyK0YrT3AzUzhmcW9KeExPZG5aZ1R2c08vblloZW5IQStVQzdDV0YxdVh3a2I5KytsZFBUVXdWZXJWYlZxRlFxcFI4WVBqUTBKQ01qSTVMTkRpam9SZ1AzUFFWdTUrNUVvcjJYR0xnN0lWNEdrSWRISi9MbXpSczVPRGlJd05icmRSME8wR0NjcTRYejRlRmhtWnljbFA3K3REUWFJaWsvQkc1WEtRbjRTd0czekpUTFpYbjkrclVjbEk4VUhENVlWb0RETjhiU3pYaE9Od0w0OGZGeEdSNGVpbHpGWlQxdUZSSUI1eVQ4QnFDZG5SM1ozZDBWUDlVbjZYUmF3WUpwZ2dWclpCdjM4TUU0WEt0VUtuTHQyalVwbFVveTFQUi9sM1U3VDZzVlNBUWNnTUFrajhQRFE5bmUzcGFqb3lNUkw3emVLc1laV0hnV1lER212NzgvbW1kd2NGQSttSmxTZ3ppSERXckVScnNqRVhEWGVnVGkxdFpXK0RMeEkyYnhJcnFGTllUWHlEeUNGd2VNQUhDd2I4ZTRSblROdU9zcWUzdDdzcmEyMXBURDBLY3Q2NjZFOFhsY1p5enc5L1JVVVhLNW5LNW9VaW5VUUk2VFEzY3luTy92Nzh2cTZxcktYQ053bFRpSkpweU5HYzNuWkhwNnVxVjJkd3JRV09DdFpCREFWMVpXd3NRazdmMHdpUW41a2ZmYkF1LzAvS1dCWXpJQzErWHVrZkd4MFJHWm1wcEtsQzJ0SVYwQmg0YURjWlc3SGhrZkg4dXJMTFpMN1QycGlodmxrTU5uejU2RmlhZEh4aWNMNDFJc0ZwTjQxYmt4c1l4YlJkRm85andCOEtkUG4xNEo4S25TcEJRS2hRczYzblBtYkNWUmNCVUFSMkxxMVZWbXBrc3lNVEZ4QVhqY0VzUXliaWVnRVNpb25qeDVvc0NaT2VOZTFPNCtFaENBWDdiUVNnUWN4UkhUTWdBZ2N6NSsvRGlzL2hMNHVIVTMvQjRZR05BU0dISUt4dUVxbDBrK2wwNUFlSUFGMXZQbno1VnhGRm1kRGxhSnJNdFpJVEplU3NYQ09UbE11bkt4akx0TVlPS05qUTE1OGVKRnVBdUtrVU9iNXNFd2dmZjE5U2tKVUJWa1RoWlViblhacnRDS0JRNmdibldJa2pacHluZTNlakFXb0duQTdJY3o2aXJ2QkxnYk9NaWNDTTZUa3hQeC9MQWtiWGZnV2NzYXp1RTJrRlJzS0Q1WitDaXFEdW1LbmNwWnZpZVdjUzZkRFZEOHhpWUNOZmxwSmR3Y2R3Sk9mOWFpckxtVlE3RFB6TXhJWVdMc1hHWG9WcUx0NWswTTNLM0pVVlBEWmRiV056c0NwNDhUUEZkdmRuWldVejMybkRoYTdiSjYza2dBSlB6U2RSa3M5L0tmOXhNSkFRMWdxMk5wYVVteTJZejR6YXI0blFDM3hiOTlBUXdDY0d6TEFBd3VoRzhZaVd2Y09LdHMrcjRHT2U1bk1obTVlZk9tOWxVQTNFM3ZTWkpSckt2RTBmblB2Ly9KeTVjdm81Y1RISVBRYlNqaE9vcXE2OWV2UzE5ZjZseERLSzQrc1ZoaWdaUHRLSnFiclFlcXhkNStXUjQrZktncWdUMGsyWFgzbmhpUGdFVFdYRmhZa0Z6dVBaMnlWcTFHVFNPWHBFNDcvVmpnTm5ENG00R0c3L0xoc1R4NjlFaXdENFZyMk13SUl4Z2JBSDE4Zkt4MXlmejh2RW9nTnZHdFduQ3VoTFphOVVUQXJlVldGc0h5L2IvK1ZyYmRsN0U1UkVNUUQyakRvVWJCeXR5Ky9ablU2NEdrVTJIenlKTGhrdFUxY0x2OG5BUmdrWVMyZDNhakFnd0c4cVUyb0xtRFo5MkNNYU9qbzdLNHVDaVpnYkRXYVJXZ25aaFB4TGhyTVVDdnI2OXJpd0taazFMSEY3WHFyV0FPOWhKeEg2b3pOemNuQ3gvUHF6dFpnOW1mNlNRTXNjQ3RtMkM1a2U0QkdNbEhXVFVwMzYwMzZBSmFqRFZyRk16QnJoaFdzbFFzU3JGWWlPcVZwTXJpTllJZ3FGUnEyajNGQWIvemZmVDZ6dXhGWHhzTnpzM05UWG4xNmxXNGdZaVc5NncxRnllZEYrODN4Ry8yRk5HQ1JwVTROamFtTXNuK09aOXhFNVJYcWRhRGRQcGliNlJXQ3p1d0tGOVJ4cUkyQVZOUUJ3UVlKb0swd2RCZWpucXRFaWtQM3BmUDUxWGpVVEVTbDEyRnFKRUt4c0VvckFSWURENDRPTlRlSUQ3WXBzRW5yUnZRZldBSTJlOFdmRGFUVVNJd0owaUJDbUZPdE9VQUh2Vk1QcC9UUHd2WUZWWUZJdVA4bCtEQmd3ZGFhMk1pcXdhMEdnWXdmZU1sdG92YkRmaDZjMXZJZ01ZY2xpU3NLdjRJV0ZyNlZESHh2bGR2QkFIKzFzQStjbmw1V1lPUG1tcjlpcisxbDlJMENnejB5amhYamZKSjBKUk9ubWV6V2JsMTY1YXlyLzVmcXdjQk5yN0lmaGpNcUtjdkVTU000ZVJjQ2FzUTNiRE5PYm1LUExkR1VHcFpzTjI0Y1VOTEJtOXphenU0ZCsrZTZxcE5CRmFUdVVTMjZVNWRwdVIxQ3h5QTdKOWRkck1ScWx6NHB3TExZYXd5bVBkKysvMlBBRHQydWdjR3dxOWdDQ2RoUTk2QzZ4V3dhNmoxY2V1cStJMEVoVzBpOE1BSVZKZmVMM2QvRFZEOEVLaTEyUDYvMlMyalYvRWNjVkI1NE8vZWp6LzlIR0Nwb0JCTXRhNXJYTVhMdTUzRDFYQXdqaFh3dnZ2K2g0QkFYVmU0Yk91M08zQ2h4RjA4TGlaRkczZmVsMTk5RzlDSDNmTHlxdjI0TmNCNDRNUmhwZEs3ODhVM0NweUt3c0N3NTkweG1mU3B6c0J0MEZxYzN1ZDN2dFppZ3hXY1ZaQ2tsVnBTaU4wdzNxNUUvaDlUR01JVXVBMytFUUFBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbmV4cG9ydCBjb25zdCBEQVRBX0lNQUdFX1RSQU5TUF9QSUMgPVxuXHQnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQUMwbEVRVlFJVzJOa0FBSUFBQW9BQWdnQTlHa0FBQUFBU1VWT1JLNUNZSUk9JztcblxuZXhwb3J0IGNvbnN0IERBVEFfSU1BR0VfTEFaWV9QTEFDRUhPTERFUl9QSUMgPVxuXHQnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQUpjRWhaY3dBQURzUUFBQTdFQVpVckRoc0FBQUFOU1VSQlZCaFhZemg4K1BCL0FBZmZBMG5OUHVDTEFBQUFBRWxGVGtTdVFtQ0MnO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgZGVsZWdhdGVSdW4sIGluRm9jdXMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUsIEV2ZW50S2V5Q29kZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyAkd2luLCBrZXlTY29wZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0Vmlld05leHQge1xuXHRiRGlzYWJlQ2xvc2VPbkVzYyA9IGZhbHNlO1xuXHRzRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuTm9uZTtcblx0c0N1cnJlbnRLZXlTY29wZSA9IEtleVN0YXRlLk5vbmU7XG5cblx0dmlld01vZGVsVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRtb2RhbFZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cblx0dmlld01vZGVsTmFtZSA9ICcnO1xuXHR2aWV3TW9kZWxOYW1lcyA9IFtdO1xuXHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHN0b3JlQW5kU2V0S2V5U2NvcGUoKSB7XG5cdFx0dGhpcy5zQ3VycmVudEtleVNjb3BlID0ga2V5U2NvcGUoKTtcblx0XHRrZXlTY29wZSh0aGlzLnNEZWZhdWx0S2V5U2NvcGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0cmVzdG9yZUtleVNjb3BlKCkge1xuXHRcdGtleVNjb3BlKHRoaXMuc0N1cnJlbnRLZXlTY29wZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZWdpc3RlclBvcHVwS2V5RG93bigpIHtcblx0XHQkd2luLm9uKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRpZiAoIXRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgJiYgRXZlbnRLZXlDb2RlLkVzYyA9PT0gZXZlbnQua2V5Q29kZSkge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjYW5jZWxDb21tYW5kJyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5CYWNrc3BhY2UgPT09IGV2ZW50LmtleUNvZGUgJiYgIWluRm9jdXMoKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdGNhbmNlbENvbW1hbmQoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cdGNsb3NlQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBTb2NpYWxTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZ29vZ2xlID0ge307XG5cdFx0dGhpcy50d2l0dGVyID0ge307XG5cdFx0dGhpcy5mYWNlYm9vayA9IHt9O1xuXHRcdHRoaXMuZHJvcGJveCA9IHt9O1xuXG5cdFx0Ly8gR29vZ2xlXG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5nb29nbGUuY2xpZW50SUQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5hcGlLZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS51c2VyTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5nb29nbGUubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5nb29nbGUudXNlck5hbWUoKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhID0ge307XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoR21haWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmRyaXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5wcmV2aWV3ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlID0ge307XG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5jbGllbnRTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0dGhpcy5nb29nbGUuZW5hYmxlZCgpICYmICh0aGlzLmdvb2dsZS5jYXBhLmF1dGgoKSB8fCB0aGlzLmdvb2dsZS5jYXBhLmF1dGhHbWFpbCgpIHx8IHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5hcGlLZXlTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuZ29vZ2xlLmVuYWJsZWQoKSAmJiB0aGlzLmdvb2dsZS5jYXBhLmRyaXZlKCkpO1xuXG5cdFx0Ly8gRmFjZWJvb2tcblx0XHR0aGlzLmZhY2Vib29rLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcElEID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZmFjZWJvb2subG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5mYWNlYm9vay51c2VyTmFtZSgpKTtcblxuXHRcdC8vIFR3aXR0ZXJcblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lclNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d2l0dGVyLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnR3aXR0ZXIubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy50d2l0dGVyLnVzZXJOYW1lKCkpO1xuXG5cdFx0Ly8gRHJvcGJveFxuXHRcdHRoaXMuZHJvcGJveC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2xpZW50U2VjcmV0KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRTZWNyZXQnKSk7XG5cdFx0dGhpcy5nb29nbGUuYXBpS2V5KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVBcGlLZXknKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGgoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aEdtYWlsKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aEdtYWlsJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxEcml2ZScpKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLnByZXZpZXcoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxQcmV2aWV3JykpO1xuXG5cdFx0dGhpcy5mYWNlYm9vay5lbmFibGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RmFjZWJvb2tTb2NpYWwnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBJRCcpKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcFNlY3JldChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBTZWNyZXQnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3VwcG9ydGVkRmFjZWJvb2tTb2NpYWwnKSk7XG5cblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dUd2l0dGVyU29jaWFsJykpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1R3aXR0ZXJDb25zdW1lcktleScpKTtcblx0XHR0aGlzLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQgPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUd2l0dGVyQ29uc3VtZXJTZWNyZXQnKSk7XG5cblx0XHR0aGlzLmRyb3Bib3guZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0Ryb3Bib3hTb2NpYWwnKSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleShTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJvcGJveEFwaUtleScpKTtcblx0fVxuXG5cdGFwcGVuZERyb3Bib3goKSB7XG5cdFx0aWYgKCF3aW5kb3cuRHJvcGJveCAmJiB0aGlzLmRyb3Bib3guZW5hYmxlZCgpICYmIHRoaXMuZHJvcGJveC5hcGlLZXkoKSkge1xuXHRcdFx0aWYgKCF3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Bib3hqcycpKSB7XG5cdFx0XHRcdGNvbnN0IHNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRcdFx0c2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0Jztcblx0XHRcdFx0c2NyaXB0LnNyYyA9ICdodHRwczovL3d3dy5kcm9wYm94LmNvbS9zdGF0aWMvYXBpLzIvZHJvcGlucy5qcyc7XG5cdFx0XHRcdCQoc2NyaXB0KVxuXHRcdFx0XHRcdC5hdHRyKCdpZCcsICdkcm9wYm94anMnKVxuXHRcdFx0XHRcdC5hdHRyKCdkYXRhLWFwcC1rZXknLCB0aGlzLmRyb3Bib3guYXBpS2V5KCkpO1xuXG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTb2NpYWxTdG9yZSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXJcIik7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwidmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsImltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4blRvTm9kZXMgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmNsYXNzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0ZGlzcG9zYWJsZSA9IFtdO1xuXG5cdGRpc3Bvc2UoKSB7XG5cdFx0dGhpcy5kaXNwb3NhYmxlLmZvckVhY2goKGZ1bmNUb0Rpc3Bvc2UpID0+IHtcblx0XHRcdGlmIChmdW5jVG9EaXNwb3NlICYmIGZ1bmNUb0Rpc3Bvc2UuZGlzcG9zZSkge1xuXHRcdFx0XHRmdW5jVG9EaXNwb3NlLmRpc3Bvc2UoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gQ2xhc3NPYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZUlEID0gJydcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IGNvbXBvbmVudEV4cG9ydEhlbHBlciA9IChDbGFzc09iamVjdCwgdGVtcGxhdGVJRCA9ICcnKSA9PiAoe1xuXHR0ZW1wbGF0ZTogdGVtcGxhdGVJRCA/IHsgZWxlbWVudDogdGVtcGxhdGVJRCB9IDogJzxiPjwvYj4nLFxuXHR2aWV3TW9kZWw6IHtcblx0XHRjcmVhdGVWaWV3TW9kZWw6IChwYXJhbXMsIGNvbXBvbmVudEluZm8pID0+IHtcblx0XHRcdHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblx0XHRcdHBhcmFtcy5lbGVtZW50ID0gbnVsbDtcblxuXHRcdFx0aWYgKGNvbXBvbmVudEluZm8gJiYgY29tcG9uZW50SW5mby5lbGVtZW50KSB7XG5cdFx0XHRcdHBhcmFtcy5jb21wb25lbnQgPSBjb21wb25lbnRJbmZvO1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudCA9ICQoY29tcG9uZW50SW5mby5lbGVtZW50KTtcblxuXHRcdFx0XHRpMThuVG9Ob2RlcyhwYXJhbXMuZWxlbWVudCk7XG5cblx0XHRcdFx0aWYgKCFpc1VuZChwYXJhbXMuaW5saW5lKSAmJiBrby51bndyYXAocGFyYW1zLmlubGluZSkpIHtcblx0XHRcdFx0XHRwYXJhbXMuZWxlbWVudC5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBDbGFzc09iamVjdChwYXJhbXMpO1xuXHRcdH1cblx0fVxufSk7XG5cbmV4cG9ydCB7IEFic3RyYWN0Q29tcG9uZW50LCBjb21wb25lbnRFeHBvcnRIZWxwZXIgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXRcIik7IiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIE5hdGl2ZUNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IChwYXRoW1RBUkdFVF0gPSB7fSk7XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXMobmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ3MgaW4gdGhpcyB2ZXJzaW9uXG4gICAgZWxzZSBpZiAob3B0aW9ucy53cmFwICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gd3JhcENvbnN0cnVjdG9yKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICBlbHNlIGlmIChQUk9UTyAmJiB0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gJ2Z1bmN0aW9uJykgcmVzdWx0UHJvcGVydHkgPSBiaW5kKEZ1bmN0aW9uLmNhbGwsIHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGFyZ2V0W2tleV0gPSByZXN1bHRQcm9wZXJ0eTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBwYXRoW1ZJUlRVQUxfUFJPVE9UWVBFXVtrZXldID0gc291cmNlUHJvcGVydHk7XG4gICAgICAvLyBleHBvcnQgcmVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgaWYgKG9wdGlvbnMucmVhbCAmJiB0YXJnZXRQcm90b3R5cGUgJiYgIXRhcmdldFByb3RvdHlwZVtrZXldKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXRQcm90b3R5cGUsIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgaXNGdW5jLCBpc0FycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFNJTVBMRV9IT09LUyA9IHt9LFxuXHRVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTID0gW10sXG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTID0gW107XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKG5hbWUsIGNhbGxiYWNrKSB7XG5cdGlmIChpc0Z1bmMoY2FsbGJhY2spKSB7XG5cdFx0aWYgKCFpc0FycmF5KFNJTVBMRV9IT09LU1tuYW1lXSkpIHtcblx0XHRcdFNJTVBMRV9IT09LU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNJTVBMRV9IT09LU1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0FycmF5PX0gYXJncyA9IFtdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Ib29rKG5hbWUsIGFyZ3MgPSBbXSkge1xuXHRpZiAoaXNBcnJheShTSU1QTEVfSE9PS1NbbmFtZV0pKSB7XG5cdFx0Xy5lYWNoKFNJTVBMRV9IT09LU1tuYW1lXSwgKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRjYWxsYmFjayguLi5hcmdzKTtcblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haW5TZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBTZXR0aW5ncy5zZXR0aW5nc0dldChuYW1lKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3Q9fSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gez9udW1iZXI9fSB0aW1lb3V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdGVSZXF1ZXN0KGNhbGxiYWNrLCBhY3Rpb24sIHBhcmFtZXRlcnMsIHRpbWVvdXQpIHtcblx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18pIHtcblx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLnJlbW90ZSgpLmRlZmF1bHRSZXF1ZXN0KGNhbGxiYWNrLCAnUGx1Z2luJyArIGFjdGlvbiwgcGFyYW1ldGVycywgdGltZW91dCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUpIHtcblx0VVNFUl9WSUVXX01PREVMU19IT09LUy5wdXNoKFtTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZV0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlKSB7XG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTLnB1c2goW1NldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBhZG1pblxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyhhZG1pbikge1xuXHRjb25zdCBLbm9pbiA9IHJlcXVpcmUoJ0tub2luL0tub2luJyk7XG5cdF8uZWFjaChhZG1pbiA/IEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTIDogVVNFUl9WSUVXX01PREVMU19IT09LUywgKHZpZXcpID0+IHtcblx0XHRLbm9pbi5hZGRTZXR0aW5nc1ZpZXdNb2RlbCh2aWV3WzBdLCB2aWV3WzFdLCB2aWV3WzJdLCB2aWV3WzNdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpblNlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzR2V0KHBsdWdpblNlY3Rpb24sIG5hbWUpIHtcblx0bGV0IHBsdWdpbnMgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnUGx1Z2lucycpO1xuXHRwbHVnaW5zID0gcGx1Z2lucyAmJiAhaXNVbmQocGx1Z2luc1twbHVnaW5TZWN0aW9uXSkgPyBwbHVnaW5zW3BsdWdpblNlY3Rpb25dIDogbnVsbDtcblx0cmV0dXJuIHBsdWdpbnMgPyAoaXNVbmQocGx1Z2luc1tuYW1lXSkgPyBudWxsIDogcGx1Z2luc1tuYW1lXSkgOiBudWxsO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXMoV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIGlmIChOQVRJVkVfU1lNQk9MICYmIGhhcyhTeW1ib2wsIG5hbWUpKSBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBTeW1ib2xbbmFtZV07XG4gICAgZWxzZSBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkgfHwgIShOQVRJVkVfU1lNQk9MIHx8IHR5cGVvZiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPT0gJ3N0cmluZycpKSB7XG4gICAgaWYgKE5BVElWRV9TWU1CT0wgJiYgaGFzKFN5bWJvbCwgbmFtZSkpIHtcbiAgICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IFN5bWJvbFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICAgIH1cbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIENvcmVBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jb3JlUmVhbCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jb3JlQ2hhbm5lbCA9IGtvLm9ic2VydmFibGUoJ3N0YWJsZScpO1xuXHRcdHRoaXMuY29yZVR5cGUgPSBrby5vYnNlcnZhYmxlKCdzdGFibGUnKTtcblx0XHR0aGlzLmNvcmVVcGRhdGFibGUgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuY29yZUFjY2VzcyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jb3JlV2FybmluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY29yZUNoZWNraW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblx0XHR0aGlzLmNvcmVVcGRhdGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cdFx0dGhpcy5jb3JlVmVyc2lvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvcmVSZW1vdGVSZWxlYXNlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb3JlVmVyc2lvbkNvbXBhcmUgPSBrby5vYnNlcnZhYmxlKC0yKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZUFkbWluU3RvcmUoKTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGl0KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwidmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbCh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5leGVjYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS5leGVjXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcgPSBGdW5jdGlvblByb3RvdHlwZS50b1N0cmluZztcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gRnVuY3Rpb24gaW5zdGFuY2VzIGAubmFtZWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24taW5zdGFuY2VzLW5hbWVcbmlmIChERVNDUklQVE9SUyAmJiAhKE5BTUUgaW4gRnVuY3Rpb25Qcm90b3R5cGUpKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBOQU1FLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcuY2FsbCh0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT0gNztcbn0pO1xuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT0gNztcbn0pO1xuIiwiLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0LWludGVydmFsXCIpOyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGl0KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoUkVQTEFDRSwgbmF0aXZlUmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlLCByZWFzb24pIHtcbiAgdmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gcmVhc29uLlJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFO1xuICB2YXIgUkVQTEFDRV9LRUVQU18kMCA9IHJlYXNvbi5SRVBMQUNFX0tFRVBTXyQwO1xuICB2YXIgVU5TQUZFX1NVQlNUSVRVVEUgPSBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA/ICckJyA6ICckMCc7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHJlcGxhY2VyID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gcmVwbGFjZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHJlcGxhY2VyLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiBuYXRpdmVSZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCFSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSAmJiBSRVBMQUNFX0tFRVBTXyQwKSB8fFxuICAgICAgICAodHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ3N0cmluZycgJiYgcmVwbGFjZVZhbHVlLmluZGV4T2YoVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSlcbiAgICAgICkge1xuICAgICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG5cbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmxldCBfbW9tZW50ID0gbnVsbDtcbmxldCBfbW9tZW50Tm93ID0gMDtcblxuY29uc3QgdXBkYXRlTW9tZW50Tm93ID0gXy5kZWJvdW5jZShcblx0KCkgPT4ge1xuXHRcdF9tb21lbnQgPSBtb21lbnQoKTtcblx0fSxcblx0NTAwLFxuXHR0cnVlXG4pO1xuXG5jb25zdCB1cGRhdGVNb21lbnROb3dVbml4ID0gXy5kZWJvdW5jZShcblx0KCkgPT4ge1xuXHRcdF9tb21lbnROb3cgPSBtb21lbnQoKS51bml4KCk7XG5cdH0sXG5cdDUwMCxcblx0dHJ1ZVxuKTtcblxuLyoqXG4gKiBAcmV0dXJucyB7bW9tZW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9tZW50Tm93KCkge1xuXHR1cGRhdGVNb21lbnROb3coKTtcblx0cmV0dXJuIF9tb21lbnQgfHwgbW9tZW50KCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudE5vd1VuaXgoKSB7XG5cdHVwZGF0ZU1vbWVudE5vd1VuaXgoKTtcblx0cmV0dXJuIF9tb21lbnROb3cgfHwgMDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gZGF0ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFN1YnRyYWN0Rm9ybWF0RGF0ZUhlbHBlcihkYXRlKSB7XG5cdHJldHVybiBtb21lbnROb3coKVxuXHRcdC5jbG9uZSgpXG5cdFx0LnN1YnRyYWN0KGRhdGUsICdkYXlzJylcblx0XHQuZm9ybWF0KCdZWVlZLk1NLkREJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IG1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEN1c3RvbVNob3J0RGF0ZShtKSB7XG5cdGNvbnN0IG5vdyA9IG1vbWVudE5vdygpO1xuXHRpZiAobSAmJiBub3cpIHtcblx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdGNhc2UgNCA+PSBub3cuZGlmZihtLCAnaG91cnMnKTpcblx0XHRcdFx0cmV0dXJuIG0uZnJvbU5vdygpO1xuXHRcdFx0Y2FzZSBub3cuZm9ybWF0KCdMJykgPT09IG0uZm9ybWF0KCdMJyk6XG5cdFx0XHRcdHJldHVybiBpMThuKCdNRVNTQUdFX0xJU1QvVE9EQVlfQVQnLCB7XG5cdFx0XHRcdFx0VElNRTogbS5mb3JtYXQoJ0xUJylcblx0XHRcdFx0fSk7XG5cdFx0XHRjYXNlIG5vd1xuXHRcdFx0XHQuY2xvbmUoKVxuXHRcdFx0XHQuc3VidHJhY3QoMSwgJ2RheXMnKVxuXHRcdFx0XHQuZm9ybWF0KCdMJykgPT09IG0uZm9ybWF0KCdMJyk6XG5cdFx0XHRcdHJldHVybiBpMThuKCdNRVNTQUdFX0xJU1QvWUVTVEVSREFZX0FUJywge1xuXHRcdFx0XHRcdFRJTUU6IG0uZm9ybWF0KCdMVCcpXG5cdFx0XHRcdH0pO1xuXHRcdFx0Y2FzZSBub3cueWVhcigpID09PSBtLnllYXIoKTpcblx0XHRcdFx0cmV0dXJuIG0uZm9ybWF0KCdEIE1NTS4nKTtcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbSA/IG0uZm9ybWF0KCdMTCcpIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVTdGFtcEluVVRDXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0U3RyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KHRpbWVTdGFtcEluVVRDLCBmb3JtYXRTdHIpIHtcblx0bGV0IG0gPSBudWxsLFxuXHRcdHJlc3VsdCA9ICcnO1xuXG5cdGNvbnN0IG5vdyA9IG1vbWVudE5vd1VuaXgoKTtcblxuXHR0aW1lU3RhbXBJblVUQyA9IDAgPCB0aW1lU3RhbXBJblVUQyA/IHRpbWVTdGFtcEluVVRDIDogMCA9PT0gdGltZVN0YW1wSW5VVEMgPyBub3cgOiAwO1xuXHR0aW1lU3RhbXBJblVUQyA9IG5vdyA8IHRpbWVTdGFtcEluVVRDID8gbm93IDogdGltZVN0YW1wSW5VVEM7XG5cblx0bSA9IDAgPCB0aW1lU3RhbXBJblVUQyA/IG1vbWVudC51bml4KHRpbWVTdGFtcEluVVRDKSA6IG51bGw7XG5cblx0aWYgKG0gJiYgMTk3MCA9PT0gbS55ZWFyKCkpIHtcblx0XHRtID0gbnVsbDtcblx0fVxuXG5cdGlmIChtKSB7XG5cdFx0c3dpdGNoIChmb3JtYXRTdHIpIHtcblx0XHRcdGNhc2UgJ0ZST01OT1cnOlxuXHRcdFx0XHRyZXN1bHQgPSBtLmZyb21Ob3coKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdTSE9SVCc6XG5cdFx0XHRcdHJlc3VsdCA9IGZvcm1hdEN1c3RvbVNob3J0RGF0ZShtKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdGVUxMJzpcblx0XHRcdFx0cmVzdWx0ID0gbS5mb3JtYXQoJ0xMTCcpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJlc3VsdCA9IG0uZm9ybWF0KGZvcm1hdFN0cik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9tZW50VG9Ob2RlKGVsZW1lbnQpIHtcblx0bGV0IGtleSA9ICcnLFxuXHRcdHRpbWUgPSAwO1xuXHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdHRpbWUgPSAkZWwuZGF0YSgnbW9tZW50LXRpbWUnKTtcblx0aWYgKHRpbWUpIHtcblx0XHRrZXkgPSAkZWwuZGF0YSgnbW9tZW50LWZvcm1hdCcpO1xuXHRcdGlmIChrZXkpIHtcblx0XHRcdCRlbC50ZXh0KGZvcm1hdCh0aW1lLCBrZXkpKTtcblx0XHR9XG5cblx0XHRrZXkgPSAkZWwuZGF0YSgnbW9tZW50LWZvcm1hdC10aXRsZScpO1xuXHRcdGlmIChrZXkpIHtcblx0XHRcdCRlbC5hdHRyKCd0aXRsZScsIGZvcm1hdCh0aW1lLCBrZXkpKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZCgpIHtcblx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0JCgnLm1vbWVudCcsIHdpbmRvdy5kb2N1bWVudCkuZWFjaCgoaW5kZXgsIGl0ZW0pID0+IHtcblx0XHRcdG1vbWVudFRvTm9kZShpdGVtKTtcblx0XHR9KTtcblx0fSk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3Byb21pc2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuaGFzaGVyOyIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5ub1RhcmdldEdldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gfHwgc2V0R2xvYmFsKFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMubm9UYXJnZXRHZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICByZWRlZmluZSh0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsIi8qKlxuICogQHJldHVybnMge0FwcEFkbWlufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwKCkge1xuXHRyZXR1cm4gcmVxdWlyZSgnQXBwL0FkbWluJykuZGVmYXVsdDtcbn1cbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciB1bnNhZmUgPSBvcHRpb25zID8gISFvcHRpb25zLnVuc2FmZSA6IGZhbHNlO1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5lbnVtZXJhYmxlIDogZmFsc2U7XG4gIHZhciBub1RhcmdldEdldCA9IG9wdGlvbnMgPyAhIW9wdGlvbnMubm9UYXJnZXRHZXQgOiBmYWxzZTtcbiAgdmFyIHN0YXRlO1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJyAmJiAhaGFzKHZhbHVlLCAnbmFtZScpKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodmFsdWUsICduYW1lJywga2V5KTtcbiAgICB9XG4gICAgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gICAgaWYgKCFzdGF0ZS5zb3VyY2UpIHtcbiAgICAgIHN0YXRlLnNvdXJjZSA9IFRFTVBMQVRFLmpvaW4odHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/IGtleSA6ICcnKTtcbiAgICB9XG4gIH1cbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2Ugc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICghdW5zYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgfSBlbHNlIGlmICghbm9UYXJnZXRHZXQgJiYgT1trZXldKSB7XG4gICAgc2ltcGxlID0gdHJ1ZTtcbiAgfVxuICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywga2V5LCB2YWx1ZSk7XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SKSB7XG4gIHJldHVybiBwYXRoW0NPTlNUUlVDVE9SICsgJ1Byb3RvdHlwZSddO1xufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBMYW5ndWFnZVN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5sYW5ndWFnZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4gPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZSA9IGtvXG5cdFx0XHQub2JzZXJ2YWJsZSgnJylcblx0XHRcdC5leHRlbmQoeyBsaW1pdGVkTGlzdDogdGhpcy5sYW5ndWFnZXMgfSlcblx0XHRcdC5leHRlbmQoeyByZXZlcnNpYmxlOiB0cnVlIH0pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluID0ga29cblx0XHRcdC5vYnNlcnZhYmxlKCcnKVxuXHRcdFx0LmV4dGVuZCh7IGxpbWl0ZWRMaXN0OiB0aGlzLmxhbmd1YWdlc0FkbWluIH0pXG5cdFx0XHQuZXh0ZW5kKHsgcmV2ZXJzaWJsZTogdHJ1ZSB9KTtcblxuXHRcdHRoaXMudXNlckxhbmd1YWdlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2VBZG1pbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0Y29uc3QgYUxhbmd1YWdlcyA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdsYW5ndWFnZXMnKSxcblx0XHRcdGFMYW5ndWFnZXNBZG1pbiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdsYW5ndWFnZXNBZG1pbicpO1xuXG5cdFx0dGhpcy5sYW5ndWFnZXMoaXNBcnJheShhTGFuZ3VhZ2VzKSA/IGFMYW5ndWFnZXMgOiBbXSk7XG5cdFx0dGhpcy5sYW5ndWFnZXNBZG1pbihpc0FycmF5KGFMYW5ndWFnZXNBZG1pbikgPyBhTGFuZ3VhZ2VzQWRtaW4gOiBbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZScpKTtcblx0XHR0aGlzLmxhbmd1YWdlQWRtaW4oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0xhbmd1YWdlQWRtaW4nKSk7XG5cblx0XHR0aGlzLnVzZXJMYW5ndWFnZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckxhbmd1YWdlJykpO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlQWRtaW4oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMYW5ndWFnZUFkbWluJykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBMYW5ndWFnZVN0b3JlKCk7XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVKb2luID0gW10uam9pbjtcblxudmFyIEVTM19TVFJJTkdTID0gSW5kZXhlZE9iamVjdCAhPSBPYmplY3Q7XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2pvaW4nLCAnLCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuam9pblxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRVMzX1NUUklOR1MgfHwgIVNUUklDVF9NRVRIT0QgfSwge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBuYXRpdmVKb2luLmNhbGwodG9JbmRleGVkT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwiLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG5cbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgYWRkcmVzc3BhcnNlciBmcm9tICdlbWFpbGpzLWFkZHJlc3NwYXJzZXInO1xuaW1wb3J0IHsgdHJpbSwgZW5jb2RlSHRtbCwgaXNOb25FbXB0eUFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuY2xhc3MgRW1haWxNb2RlbCB7XG5cdGVtYWlsID0gJyc7XG5cdG5hbWUgPSAnJztcblx0ZGtpbVN0YXR1cyA9ICcnO1xuXHRka2ltVmFsdWUgPSAnJztcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBlbWFpbCA9ICcnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSA9ICcnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gZGtpbVN0YXR1cyA9ICdub25lJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IGRraW1WYWx1ZSA9ICcnXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbWFpbCA9ICcnLCBuYW1lID0gJycsIGRraW1TdGF0dXMgPSAnbm9uZScsIGRraW1WYWx1ZSA9ICcnKSB7XG5cdFx0dGhpcy5lbWFpbCA9IGVtYWlsO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0dGhpcy5ka2ltU3RhdHVzID0gZGtpbVN0YXR1cztcblx0XHR0aGlzLmRraW1WYWx1ZSA9IGRraW1WYWx1ZTtcblxuXHRcdHRoaXMuY2xlYXJEdXBsaWNhdGVOYW1lKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge0FqYXhKc29uRW1haWx9IGpzb25cblx0ICogQHJldHVybnMgez9FbWFpbE1vZGVsfVxuXHQgKi9cblx0c3RhdGljIG5ld0luc3RhbmNlRnJvbUpzb24oanNvbikge1xuXHRcdGNvbnN0IGVtYWlsID0gbmV3IEVtYWlsTW9kZWwoKTtcblx0XHRyZXR1cm4gZW1haWwuaW5pdEJ5SnNvbihqc29uKSA/IGVtYWlsIDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZW1haWwgPSAnJztcblx0XHR0aGlzLm5hbWUgPSAnJztcblxuXHRcdHRoaXMuZGtpbVN0YXR1cyA9ICdub25lJztcblx0XHR0aGlzLmRraW1WYWx1ZSA9ICcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0dmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuICcnICE9PSB0aGlzLm5hbWUgfHwgJycgIT09IHRoaXMuZW1haWw7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSB3aXRob3V0TmFtZSA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRoYXNoKHdpdGhvdXROYW1lID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gJyMnICsgKHdpdGhvdXROYW1lID8gJycgOiB0aGlzLm5hbWUpICsgJyMnICsgdGhpcy5lbWFpbCArICcjJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGNsZWFyRHVwbGljYXRlTmFtZSgpIHtcblx0XHRpZiAodGhpcy5uYW1lID09PSB0aGlzLmVtYWlsKSB7XG5cdFx0XHR0aGlzLm5hbWUgPSAnJztcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c2VhcmNoKHF1ZXJ5KSB7XG5cdFx0cmV0dXJuIC0xIDwgKHRoaXMubmFtZSArICcgJyArIHRoaXMuZW1haWwpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihxdWVyeS50b0xvd2VyQ2FzZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uRW1haWx9IG9Kc29uRW1haWxcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpbml0QnlKc29uKGpzb24pIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XG5cdFx0aWYgKGpzb24gJiYgJ09iamVjdC9FbWFpbCcgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy5uYW1lID0gdHJpbShqc29uLk5hbWUpO1xuXHRcdFx0dGhpcy5lbWFpbCA9IHRyaW0oanNvbi5FbWFpbCk7XG5cdFx0XHR0aGlzLmRraW1TdGF0dXMgPSB0cmltKGpzb24uRGtpbVN0YXR1cyB8fCAnJyk7XG5cdFx0XHR0aGlzLmRraW1WYWx1ZSA9IHRyaW0oanNvbi5Ea2ltVmFsdWUgfHwgJycpO1xuXG5cdFx0XHRyZXN1bHQgPSAnJyAhPT0gdGhpcy5lbWFpbDtcblx0XHRcdHRoaXMuY2xlYXJEdXBsaWNhdGVOYW1lKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGZyaWVuZGx5Vmlld1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cmFwV2l0aExpbmsgPSBmYWxzZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB1c2VFbmNvZGVIdG1sID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHRvTGluZShmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayA9IGZhbHNlLCB1c2VFbmNvZGVIdG1sID0gZmFsc2UpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKCcnICE9PSB0aGlzLmVtYWlsKSB7XG5cdFx0XHRpZiAoZnJpZW5kbHlWaWV3ICYmICcnICE9PSB0aGlzLm5hbWUpIHtcblx0XHRcdFx0cmVzdWx0ID0gd3JhcFdpdGhMaW5rXG5cdFx0XHRcdFx0PyAnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHQgIGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdCAgJz90bz0nICtcblx0XHRcdFx0XHQgIGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0XHQgICdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0ICBlbmNvZGVIdG1sKHRoaXMubmFtZSkgK1xuXHRcdFx0XHRcdCAgJzwvYT4nXG5cdFx0XHRcdFx0OiB1c2VFbmNvZGVIdG1sXG5cdFx0XHRcdFx0PyBlbmNvZGVIdG1sKHRoaXMubmFtZSlcblx0XHRcdFx0XHQ6IHRoaXMubmFtZTtcblx0XHRcdFx0Ly8gcmVzdWx0ID0gd3JhcFdpdGhMaW5rID8gJzxhIGhyZWY9XCJtYWlsdG86JyArIGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0Ly8gXHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgKyBlbmNvZGVIdG1sKHRoaXMubmFtZSkgKyAnPC9hPicgOiAodXNlRW5jb2RlSHRtbCA/IGVuY29kZUh0bWwodGhpcy5uYW1lKSA6IHRoaXMubmFtZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmVtYWlsO1xuXHRcdFx0XHRpZiAoJycgIT09IHRoaXMubmFtZSkge1xuXHRcdFx0XHRcdGlmICh3cmFwV2l0aExpbmspIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9XG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JykgK1xuXHRcdFx0XHRcdFx0XHQnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0XHRcdCc/dG89JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0XHRcdFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbChyZXN1bHQpICtcblx0XHRcdFx0XHRcdFx0JzwvYT4nICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnPicpO1xuXHRcdFx0XHRcdFx0Ly8gcmVzdWx0ID0gZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnKSArICc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdFx0Ly8gXHRlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdFx0XHQvLyBcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHQvLyBcdGVuY29kZUh0bWwocmVzdWx0KSArXG5cdFx0XHRcdFx0XHQvLyBcdCc8L2E+JyArXG5cdFx0XHRcdFx0XHQvLyBcdGVuY29kZUh0bWwoJz4nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0gJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHJlc3VsdCArICc+Jztcblx0XHRcdFx0XHRcdGlmICh1c2VFbmNvZGVIdG1sKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGVuY29kZUh0bWwocmVzdWx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAod3JhcFdpdGhMaW5rKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID1cblx0XHRcdFx0XHRcdCc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0XHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0XHQnPC9hPic7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIHNwbGl0RW1haWxMaW5lKGxpbmUpIHtcblx0XHRjb25zdCBwYXJzZWRSZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGxpbmUpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocGFyc2VkUmVzdWx0KSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0XHRsZXQgZXhpc3RzID0gZmFsc2U7XG5cdFx0XHRwYXJzZWRSZXN1bHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZGRyZXNzID0gaXRlbS5hZGRyZXNzXG5cdFx0XHRcdFx0PyBuZXcgRW1haWxNb2RlbChpdGVtLmFkZHJlc3MucmVwbGFjZSgvXls8XSsoLiopWz5dKyQvZywgJyQxJyksIGl0ZW0ubmFtZSB8fCAnJylcblx0XHRcdFx0XHQ6IG51bGw7XG5cblx0XHRcdFx0aWYgKGFkZHJlc3MgJiYgYWRkcmVzcy5lbWFpbCkge1xuXHRcdFx0XHRcdGV4aXN0cyA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQucHVzaChhZGRyZXNzID8gYWRkcmVzcy50b0xpbmUoZmFsc2UpIDogaXRlbS5uYW1lKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gZXhpc3RzID8gcmVzdWx0IDogbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHN0YXRpYyBwYXJzZUVtYWlsTGluZShsaW5lKSB7XG5cdFx0Y29uc3QgcGFyc2VkUmVzdWx0ID0gYWRkcmVzc3BhcnNlcihsaW5lKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHBhcnNlZFJlc3VsdCkpIHtcblx0XHRcdHJldHVybiBfLmNvbXBhY3QoXG5cdFx0XHRcdF8ubWFwKHBhcnNlZFJlc3VsdCwgKGl0ZW0pID0+XG5cdFx0XHRcdFx0aXRlbS5hZGRyZXNzID8gbmV3IEVtYWlsTW9kZWwoaXRlbS5hZGRyZXNzLnJlcGxhY2UoL15bPF0rKC4qKVs+XSskL2csICckMScpLCBpdGVtLm5hbWUgfHwgJycpIDogbnVsbFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxBZGRyZXNzXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0cGFyc2UoZW1haWxBZGRyZXNzKSB7XG5cdFx0ZW1haWxBZGRyZXNzID0gdHJpbShlbWFpbEFkZHJlc3MpO1xuXHRcdGlmICgnJyA9PT0gZW1haWxBZGRyZXNzKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0ID0gYWRkcmVzc3BhcnNlcihlbWFpbEFkZHJlc3MpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocmVzdWx0KSAmJiByZXN1bHRbMF0pIHtcblx0XHRcdHRoaXMubmFtZSA9IHJlc3VsdFswXS5uYW1lIHx8ICcnO1xuXHRcdFx0dGhpcy5lbWFpbCA9IHJlc3VsdFswXS5hZGRyZXNzIHx8ICcnO1xuXHRcdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbmV4cG9ydCB7IEVtYWlsTW9kZWwsIEVtYWlsTW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyKGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICByZWRlZmluZShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQsIHRyaW0sIHBJbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0SW5wdXQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSB8fCAnJztcblx0XHR0aGlzLnNpemUgPSBwYXJhbXMuc2l6ZSB8fCAwO1xuXHRcdHRoaXMubGFiZWwgPSBwYXJhbXMubGFiZWwgfHwgJyc7XG5cdFx0dGhpcy5wcmVMYWJlbCA9IHBhcmFtcy5wcmVMYWJlbCB8fCAnJztcblx0XHR0aGlzLmVuYWJsZSA9IGlzVW5kKHBhcmFtcy5lbmFibGUpID8gdHJ1ZSA6IHBhcmFtcy5lbmFibGU7XG5cdFx0dGhpcy50cmlnZ2VyID0gcGFyYW1zLnRyaWdnZXIgJiYgcGFyYW1zLnRyaWdnZXIuc3Vic2NyaWJlID8gcGFyYW1zLnRyaWdnZXIgOiBudWxsO1xuXHRcdHRoaXMucGxhY2Vob2xkZXIgPSBwYXJhbXMucGxhY2Vob2xkZXIgfHwgJyc7XG5cblx0XHR0aGlzLmxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLmxhYmVsKTtcblx0XHR0aGlzLnByZUxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLnByZUxhYmVsKTtcblx0XHR0aGlzLnRyaWdnZXJlZCA9ICFpc1VuZChwYXJhbXMudHJpZ2dlcikgJiYgISF0aGlzLnRyaWdnZXI7XG5cblx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5jbGFzc05hbWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBzaXplID0ga28udW53cmFwKHRoaXMuc2l6ZSksXG5cdFx0XHRcdHN1ZmZpeFZhbHVlID0gdGhpcy50cmlnZ2VyID8gJyAnICsgdHJpbSgnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlci1pbnB1dCAnICsgdGhpcy5jbGFzc0ZvclRyaWdnZXIoKSkgOiAnJztcblx0XHRcdHJldHVybiAoMCA8IHNpemUgPyAnc3BhbicgKyBzaXplIDogJycpICsgc3VmZml4VmFsdWU7XG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzVW5kKHBhcmFtcy53aWR0aCkgJiYgcGFyYW1zLmVsZW1lbnQpIHtcblx0XHRcdHBhcmFtcy5lbGVtZW50LmZpbmQoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYScpLmNzcygnd2lkdGgnLCBwYXJhbXMud2lkdGgpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKHRoaXMuY2xhc3NOYW1lKTtcblxuXHRcdGlmICh0aGlzLnRyaWdnZXIpIHtcblx0XHRcdHRoaXMuc2V0VHJpZ2dlclN0YXRlKHRoaXMudHJpZ2dlcigpKTtcblxuXHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy50cmlnZ2VyLnN1YnNjcmliZSh0aGlzLnNldFRyaWdnZXJTdGF0ZSwgdGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHNldFRyaWdnZXJTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignc3VjY2VzcycpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJ2Vycm9yJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJycpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RJbnB1dCwgQWJzdHJhY3RJbnB1dCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgQ2FwYSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQ2FwYUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFkZGl0aW9uYWxBY2NvdW50cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuaWRlbnRpdGllcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ3JhdmF0YXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRUaHVtYm5haWxzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmlsdGVycyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGhlbWVzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnVzZXJCYWNrZ3JvdW5kID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5vcGVuUEdQID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoRm9yY2UgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlbXBsYXRlcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5hZGRpdGlvbmFsQWNjb3VudHMoU2V0dGluZ3MuY2FwYShDYXBhLkFkZGl0aW9uYWxBY2NvdW50cykpO1xuXHRcdHRoaXMuaWRlbnRpdGllcyhTZXR0aW5ncy5jYXBhKENhcGEuSWRlbnRpdGllcykpO1xuXHRcdHRoaXMuZ3JhdmF0YXIoU2V0dGluZ3MuY2FwYShDYXBhLkdyYXZhdGFyKSk7XG5cdFx0dGhpcy5hdHRhY2htZW50VGh1bWJuYWlscyhTZXR0aW5ncy5jYXBhKENhcGEuQXR0YWNobWVudFRodW1ibmFpbHMpKTtcblx0XHR0aGlzLnNpZXZlKFNldHRpbmdzLmNhcGEoQ2FwYS5TaWV2ZSkpO1xuXHRcdHRoaXMuZmlsdGVycyhTZXR0aW5ncy5jYXBhKENhcGEuRmlsdGVycykpO1xuXHRcdHRoaXMudGhlbWVzKFNldHRpbmdzLmNhcGEoQ2FwYS5UaGVtZXMpKTtcblx0XHR0aGlzLnVzZXJCYWNrZ3JvdW5kKFNldHRpbmdzLmNhcGEoQ2FwYS5Vc2VyQmFja2dyb3VuZCkpO1xuXHRcdHRoaXMub3BlblBHUChTZXR0aW5ncy5jYXBhKENhcGEuT3BlblBHUCkpO1xuXHRcdHRoaXMudHdvRmFjdG9yQXV0aChTZXR0aW5ncy5jYXBhKENhcGEuVHdvRmFjdG9yKSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoRm9yY2UoU2V0dGluZ3MuY2FwYShDYXBhLlR3b0ZhY3RvckZvcmNlKSk7XG5cdFx0dGhpcy50ZW1wbGF0ZXMoU2V0dGluZ3MuY2FwYShDYXBhLlRlbXBsYXRlcykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDYXBhQWRtaW5TdG9yZSgpO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyKGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgUGFja2FnZUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnBhY2thZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnBhY2thZ2VzLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwIH0pO1xuXG5cdFx0dGhpcy5wYWNrYWdlc1JlYWwgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMucGFja2FnZXNNYWluVXBkYXRhYmxlID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGFja2FnZUFkbWluU3RvcmUoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWwsIGtleSwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cubW9tZW50OyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LnByb2dyZXNzSnM7IiwidmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMTIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0LCAxICsgQVNfRU5UUklFUyArIElOVEVSUlVQVEVEKTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IpO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoJ1RhcmdldCBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTtcbiAgfVxuXG4gIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gbmV4dC5jYWxsKGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsInZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVudW1lcmFibGUpIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCB2YWx1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59O1xuXG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCB7IEFic3RyYWN0QXBwU3RvcmUgfSBmcm9tICdTdG9yZXMvQWJzdHJhY3RBcHAnO1xuXG5jbGFzcyBBcHBBZG1pblN0b3JlIGV4dGVuZHMgQWJzdHJhY3RBcHBTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckRvbWFpbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy53ZWFrUGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5kYXRhRm9sZGVyQWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHRzdXBlci5wb3B1bGF0ZSgpO1xuXG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyTGFuZ3VhZ2UoISFzZXR0aW5nc0dldCgnRGV0ZXJtaW5lVXNlckxhbmd1YWdlJykpO1xuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckRvbWFpbighIXNldHRpbmdzR2V0KCdEZXRlcm1pbmVVc2VyRG9tYWluJykpO1xuXG5cdFx0dGhpcy53ZWFrUGFzc3dvcmQoISFzZXR0aW5nc0dldCgnV2Vha1Bhc3N3b3JkJykpO1xuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzKCEhc2V0dGluZ3NHZXQoJ1VzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcycpKTtcblxuXHRcdGlmIChzZXR0aW5nc0dldCgnQXV0aCcpKSB7XG5cdFx0XHQkLmdldCgnLi9kYXRhL1ZFUlNJT04/JyArIHdpbmRvdy5NYXRoLnJhbmRvbSgpKS50aGVuKCgpID0+IHRoaXMuZGF0YUZvbGRlckFjY2Vzcyh0cnVlKSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBcHBBZG1pblN0b3JlKCk7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCIvLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCIvLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09ICdwcm9jZXNzJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgbmF0aXZlVG9TdHJpbmcgPSBSZWdFeHBQcm90b3R5cGVbVE9fU1RSSU5HXTtcblxudmFyIE5PVF9HRU5FUklDID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlVG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxudmFyIElOQ09SUkVDVF9OQU1FID0gbmF0aXZlVG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkc7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKE5PVF9HRU5FUklDIHx8IElOQ09SUkVDVF9OQU1FKSB7XG4gIHJlZGVmaW5lKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgcCA9IFN0cmluZyhSLnNvdXJjZSk7XG4gICAgdmFyIHJmID0gUi5mbGFncztcbiAgICB2YXIgZiA9IFN0cmluZyhyZiA9PT0gdW5kZWZpbmVkICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgPyBmbGFncy5jYWxsKFIpIDogcmYpO1xuICAgIHJldHVybiAnLycgKyBwICsgJy8nICsgZjtcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNhY2hlID0ge307XG5cbnZhciB0aHJvd2VyID0gZnVuY3Rpb24gKGl0KSB7IHRocm93IGl0OyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgb3B0aW9ucykge1xuICBpZiAoaGFzKGNhY2hlLCBNRVRIT0RfTkFNRSkpIHJldHVybiBjYWNoZVtNRVRIT0RfTkFNRV07XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICB2YXIgQUNDRVNTT1JTID0gaGFzKG9wdGlvbnMsICdBQ0NFU1NPUlMnKSA/IG9wdGlvbnMuQUNDRVNTT1JTIDogZmFsc2U7XG4gIHZhciBhcmd1bWVudDAgPSBoYXMob3B0aW9ucywgMCkgPyBvcHRpb25zWzBdIDogdGhyb3dlcjtcbiAgdmFyIGFyZ3VtZW50MSA9IGhhcyhvcHRpb25zLCAxKSA/IG9wdGlvbnNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXSA9ICEhbWV0aG9kICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKEFDQ0VTU09SUyAmJiAhREVTQ1JJUFRPUlMpIHJldHVybiB0cnVlO1xuICAgIHZhciBPID0geyBsZW5ndGg6IC0xIH07XG5cbiAgICBpZiAoQUNDRVNTT1JTKSBkZWZpbmVQcm9wZXJ0eShPLCAxLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogdGhyb3dlciB9KTtcbiAgICBlbHNlIE9bMV0gPSAxO1xuXG4gICAgbWV0aG9kLmNhbGwoTywgYXJndW1lbnQwLCBhcmd1bWVudDEpO1xuICB9KTtcbn07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5cbi8vIGxldCByYWlubG9vcENhY2hlcyA9IHdpbmRvdy5jYWNoZXMgJiYgd2luZG93LmNhY2hlcy5vcGVuID8gd2luZG93LmNhY2hlcyA6IG51bGw7XG5cbi8qKlxuICogQHBhcmFtIHtzcmN9IHNyY1xuICogQHBhcmFtIHtib29sZWFufSBhc3luYyA9IGZhbHNlXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGphc3NsKHNyYywgYXN5bmMgPSBmYWxzZSkge1xuXHRpZiAoIXdpbmRvdy5Qcm9taXNlIHx8ICF3aW5kb3cuUHJvbWlzZS5hbGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1Byb21pc2VzIGFyZSBub3QgYXZhaWxhYmxlIHlvdXIgZW52aXJvbm1lbnQuJyk7XG5cdH1cblxuXHRpZiAoIXNyYykge1xuXHRcdHRocm93IG5ldyBFcnJvcignc3JjIHNob3VsZCBub3QgYmUgZW1wdHkuJyk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IHdpbmRvdy5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXG5cdFx0ZWxlbWVudC5vbmxvYWQgPSAoKSA9PiB7XG5cdFx0XHRyZXNvbHZlKHNyYyk7XG5cdFx0fTtcblxuXHRcdGVsZW1lbnQub25lcnJvciA9ICgpID0+IHtcblx0XHRcdHJlamVjdChuZXcgRXJyb3Ioc3JjKSk7XG5cdFx0fTtcblxuXHRcdGVsZW1lbnQuYXN5bmMgPSB0cnVlID09PSBhc3luYztcblx0XHRlbGVtZW50LnNyYyA9IHNyYztcblxuXHRcdHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHR9KSAvKiAudGhlbigocykgPT4ge1xuXG5cdFx0Y29uc3QgZm91bmQgPSBzICYmIHJhaW5sb29wQ2FjaGVzID8gcy5tYXRjaCgvcmFpbmxvb3BcXC92XFwvKFteXFwvXSspXFwvc3RhdGljXFwvLykgOiBudWxsO1xuXHRcdGlmIChmb3VuZCAmJiBmb3VuZFsxXSlcblx0XHR7XG5cdFx0XHRyYWlubG9vcENhY2hlcy5vcGVuKCdyYWlubG9vcC1vZmZsaW5lLScgKyBmb3VuZFsxXSkudGhlbihcblx0XHRcdFx0KGNhY2hlKSA9PiBjYWNoZS5hZGQocylcblx0XHRcdCkuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRyYWlubG9vcENhY2hlcyA9IG51bGw7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcztcblx0fSkqLztcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzXCIpOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBUaGVtZVN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy50aGVtZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kSGFzaCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy50aGVtZSA9IGtvLm9ic2VydmFibGUoJycpLmV4dGVuZCh7IGxpbWl0ZWRMaXN0OiB0aGlzLnRoZW1lcyB9KTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdGNvbnN0IHRoZW1lcyA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd0aGVtZXMnKTtcblxuXHRcdHRoaXMudGhlbWVzKGlzQXJyYXkodGhlbWVzKSA/IHRoZW1lcyA6IFtdKTtcblx0XHR0aGlzLnRoZW1lKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaGVtZScpKTtcblx0XHR0aGlzLnRoZW1lQmFja2dyb3VuZE5hbWUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJCYWNrZ3JvdW5kTmFtZScpKTtcblx0XHR0aGlzLnRoZW1lQmFja2dyb3VuZEhhc2goU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJCYWNrZ3JvdW5kSGFzaCcpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgVGhlbWVTdG9yZSgpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgUGx1Z2luQWRtaW5TdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMucGx1Z2lucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5wbHVnaW5zLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwIH0pO1xuXHRcdHRoaXMucGx1Z2lucy5lcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBQbHVnaW5BZG1pblN0b3JlKCk7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi50b1N0cmluZztcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGAzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICh0eXBlb2Ygc3RvcmUuaW5zcGVjdFNvdXJjZSAhPSAnZnVuY3Rpb24nKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIG9iamVjdEhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICB2YXIgd21nZXQgPSBzdG9yZS5nZXQ7XG4gIHZhciB3bWhhcyA9IHN0b3JlLmhhcztcbiAgdmFyIHdtc2V0ID0gc3RvcmUuc2V0O1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHdtaGFzLmNhbGwoc3RvcmUsIGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgd21zZXQuY2FsbChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldC5jYWxsKHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcy5jYWxsKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChvYmplY3RIYXMoaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIFBSRUZFUlJFRF9TVFJJTkcpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGlucHV0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFQUkVGRVJSRURfU1RSSU5HICYmIHR5cGVvZiAoZm4gPSBpbnB1dC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWllZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgU3RyaW5nKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArICgrK2lkICsgcG9zdGZpeCkudG9TdHJpbmcoMzYpO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFTdHJpbmcoU3ltYm9sKCkpIHx8XG4gICAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IHNldEdsb2JhbChTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXModGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCJ2YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgb2JqZWN0SGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVApIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgdmFyIHdtZ2V0ID0gc3RvcmUuZ2V0O1xuICB2YXIgd21oYXMgPSBzdG9yZS5oYXM7XG4gIHZhciB3bXNldCA9IHN0b3JlLnNldDtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHdtc2V0LmNhbGwoc3RvcmUsIGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21nZXQuY2FsbChzdG9yZSwgaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21oYXMuY2FsbChzdG9yZSwgaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIHZlcnNpb24gPSBtYXRjaFswXSArIG1hdGNoWzFdO1xufSBlbHNlIGlmICh1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSBtYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb24gJiYgK3ZlcnNpb247XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3ByZWZlci1lc2NhcGUtcmVwbGFjZW1lbnQtZG9sbGFyLWNoYXIgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG52YXIgUkVQTEFDRSA9IHdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuLy8gU2FmYXJpIDw9IDEzLjAuMyg/KSBzdWJzdGl0dXRlcyBudGggY2FwdHVyZSB3aGVyZSBuPm0gd2l0aCBhbiBlbXB0eSBzdHJpbmdcbnZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICgvLi9bUkVQTEFDRV0pIHtcbiAgICByZXR1cm4gLy4vW1JFUExBQ0VdKCdhJywgJyQwJykgPT09ICcnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0pKCk7XG5cbi8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuLy8gV2VleCBKUyBoYXMgZnJvemVuIGJ1aWx0LWluIHByb3RvdHlwZXMsIHNvIHVzZSB0cnkgLyBjYXRjaCB3cmFwcGVyXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggIT09IDIgfHwgcmVzdWx0WzBdICE9PSAnYScgfHwgcmVzdWx0WzFdICE9PSAnYic7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMsIHNoYW0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuXG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIHJlYWwgcmVnZXggaGVyZSBzaW5jZSBpdCBjYXVzZXMgZGVvcHRpbWl6YXRpb25cbiAgICAgIC8vIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluIFY4XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzA2XG4gICAgICByZSA9IHt9O1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgICAgcmUuZmxhZ3MgPSAnJztcbiAgICAgIHJlW1NZTUJPTF0gPSAvLi9bU1lNQk9MXTtcbiAgICB9XG5cbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhKFxuICAgICAgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgJiZcbiAgICAgIFJFUExBQ0VfS0VFUFNfJDAgJiZcbiAgICAgICFSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRVxuICAgICkpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IFJlZ0V4cC5wcm90b3R5cGUuZXhlYykge1xuICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9LCB7XG4gICAgICBSRVBMQUNFX0tFRVBTXyQwOiBSRVBMQUNFX0tFRVBTXyQwLFxuICAgICAgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkU6IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFXG4gICAgfSk7XG4gICAgdmFyIHN0cmluZ01ldGhvZCA9IG1ldGhvZHNbMF07XG4gICAgdmFyIHJlZ2V4TWV0aG9kID0gbWV0aG9kc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyaW5nTWV0aG9kKTtcbiAgICByZWRlZmluZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJlZ2V4TWV0aG9kLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcmVnZXhNZXRob2QuY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxuXG4gIGlmIChzaGFtKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwLnByb3RvdHlwZVtTWU1CT0xdLCAnc2hhbScsIHRydWUpO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9jbGFzc29mLXJhdycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuXG4gIHJldHVybiByZWdleHBFeGVjLmNhbGwoUiwgUyk7XG59O1xuXG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiBDb2xsZWN0aW9uUHJvdG90eXBlLmZvckVhY2ggIT09IGZvckVhY2gpIHRyeSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsICdmb3JFYWNoJywgZm9yRWFjaCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgQ29sbGVjdGlvblByb3RvdHlwZS5mb3JFYWNoID0gZm9yRWFjaDtcbiAgfVxufVxuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgY3Jvc3Nyb2FkcyBmcm9tICdjcm9zc3JvYWRzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzTm9uRW1wdHlBcnJheSwgbm9vcCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFNjcmVlbiB7XG5cdG9Dcm9zcyA9IG51bGw7XG5cdHNTY3JlZW5OYW1lO1xuXHRhVmlld01vZGVscztcblxuXHRjb25zdHJ1Y3RvcihzY3JlZW5OYW1lLCB2aWV3TW9kZWxzID0gW10pIHtcblx0XHR0aGlzLnNTY3JlZW5OYW1lID0gc2NyZWVuTmFtZTtcblx0XHR0aGlzLmFWaWV3TW9kZWxzID0gaXNBcnJheSh2aWV3TW9kZWxzKSA/IHZpZXdNb2RlbHMgOiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHR2aWV3TW9kZWxzKCkge1xuXHRcdHJldHVybiB0aGlzLmFWaWV3TW9kZWxzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzY3JlZW5OYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLnNTY3JlZW5OYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHs/QXJyYXkpfVxuXHQgKi9cblx0cm91dGVzKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHs/T2JqZWN0fVxuXHQgKi9cblx0X19jcm9zcygpIHtcblx0XHRyZXR1cm4gdGhpcy5vQ3Jvc3M7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRfX3N0YXJ0KCkge1xuXHRcdGxldCByb3V0ZSA9IG51bGwsXG5cdFx0XHRmTWF0Y2hlciA9IG51bGw7XG5cdFx0Y29uc3Qgcm91dGVzID0gdGhpcy5yb3V0ZXMoKTtcblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocm91dGVzKSkge1xuXHRcdFx0Zk1hdGNoZXIgPSBfLmJpbmQodGhpcy5vblJvdXRlIHx8IG5vb3AsIHRoaXMpO1xuXHRcdFx0cm91dGUgPSBjcm9zc3JvYWRzLmNyZWF0ZSgpO1xuXG5cdFx0XHRyb3V0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoaXRlbSAmJiByb3V0ZSkge1xuXHRcdFx0XHRcdHJvdXRlLmFkZFJvdXRlKGl0ZW1bMF0sIGZNYXRjaGVyKS5ydWxlcyA9IGl0ZW1bMV07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm9Dcm9zcyA9IHJvdXRlO1xuXHRcdH1cblx0fVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS90cmltXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LnNzbTsiLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgdmVyc2lvbiA9IG1hdGNoWzBdIDwgNCA/IDEgOiBtYXRjaFswXSArIG1hdGNoWzFdO1xufSBlbHNlIGlmICh1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSBtYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb24gJiYgK3ZlcnNpb247XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBQUkVGRVJSRURfU1RSSU5HKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpbnB1dC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAqL1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IGRvY3VtZW50LmRvbWFpbiAmJiBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gYWN0aXZlWERvY3VtZW50ID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKCk7XG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInJlcXVpcmUoJy4vZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIGNsYXNzb2YoQ29sbGVjdGlvblByb3RvdHlwZSkgIT09IFRPX1NUUklOR19UQUcpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vcmVnZXhwLWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4vcmVnZXhwLXN0aWNreS1oZWxwZXJzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9zaGFyZWQnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgbmF0aXZlUmVwbGFjZSA9IHNoYXJlZCgnbmF0aXZlLXN0cmluZy1yZXBsYWNlJywgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZIHx8IHN0aWNreUhlbHBlcnMuQlJPS0VOX0NBUkVUO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWFzc2VydGlvbi1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRCB8fCBVTlNVUFBPUlRFRF9ZO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcbiAgICB2YXIgc3RpY2t5ID0gVU5TVVBQT1JURURfWSAmJiByZS5zdGlja3k7XG4gICAgdmFyIGZsYWdzID0gcmVnZXhwRmxhZ3MuY2FsbChyZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoJ3knLCAnJyk7XG4gICAgICBpZiAoZmxhZ3MuaW5kZXhPZignZycpID09PSAtMSkge1xuICAgICAgICBmbGFncyArPSAnZyc7XG4gICAgICB9XG5cbiAgICAgIHN0ckNvcHkgPSBTdHJpbmcoc3RyKS5zbGljZShyZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgc3RyW3JlLmxhc3RJbmRleCAtIDFdICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwoc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gbWF0Y2guaW5wdXQuc2xpY2UoY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgRG9tYWluQWRtaW5TdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZG9tYWlucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5kb21haW5zLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyAndGhyb3R0bGUnOiAxMDAgfSk7XG5cdFx0dGhpcy5kb21haW5zV2l0aG91dEFsaWFzZXMgPSBrby5jb21wdXRlZCgoKSA9PiBfLmZpbHRlcih0aGlzLmRvbWFpbnMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgIWl0ZW0uYWxpYXMpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgRG9tYWluQWRtaW5TdG9yZSgpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCduYXZpZ2F0b3InLCAndXNlckFnZW50JykgfHwgJyc7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFICovXG4gICAgYWN0aXZlWERvY3VtZW50ID0gZG9jdW1lbnQuZG9tYWluICYmIG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSBhY3RpdmVYRG9jdW1lbnQgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKTtcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDKSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoaXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgc3BsaXQgPSAnJy5zcGxpdDtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgcmV0dXJuICFPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PSAnU3RyaW5nJyA/IHNwbGl0LmNhbGwoaXQsICcnKSA6IE9iamVjdChpdCk7XG59IDogT2JqZWN0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xuXG4vLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGNoYXJBdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyT3V0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9PVVQgPSBUWVBFID09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfT1VUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJPdXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlck91dGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJPdXQ6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjbGFzc29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmNyb3Nzcm9hZHM7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgQWJzdHJhY3RDaGVja2JveCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgPSB7fVxuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zID0ge30pIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZTtcblx0XHRpZiAoaXNVbmQodGhpcy52YWx1ZSkgfHwgIXRoaXMudmFsdWUuc3Vic2NyaWJlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0ga28ub2JzZXJ2YWJsZShpc1VuZCh0aGlzLnZhbHVlKSA/IGZhbHNlIDogISF0aGlzLnZhbHVlKTtcblx0XHR9XG5cblx0XHR0aGlzLmVuYWJsZSA9IHBhcmFtcy5lbmFibGU7XG5cdFx0aWYgKGlzVW5kKHRoaXMuZW5hYmxlKSB8fCAhdGhpcy5lbmFibGUuc3Vic2NyaWJlKSB7XG5cdFx0XHR0aGlzLmVuYWJsZSA9IGtvLm9ic2VydmFibGUoaXNVbmQodGhpcy5lbmFibGUpID8gdHJ1ZSA6ICEhdGhpcy5lbmFibGUpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGlzYWJsZSA9IHBhcmFtcy5kaXNhYmxlO1xuXHRcdGlmIChpc1VuZCh0aGlzLmRpc2FibGUpIHx8ICF0aGlzLmRpc2FibGUuc3Vic2NyaWJlKSB7XG5cdFx0XHR0aGlzLmRpc2FibGUgPSBrby5vYnNlcnZhYmxlKGlzVW5kKHRoaXMuZGlzYWJsZSkgPyBmYWxzZSA6ICEhdGhpcy5kaXNhYmxlKTtcblx0XHR9XG5cblx0XHR0aGlzLmxhYmVsID0gcGFyYW1zLmxhYmVsIHx8ICcnO1xuXHRcdHRoaXMuaW5saW5lID0gaXNVbmQocGFyYW1zLmlubGluZSkgPyBmYWxzZSA6IHBhcmFtcy5pbmxpbmU7XG5cblx0XHR0aGlzLnJlYWRPbmx5ID0gaXNVbmQocGFyYW1zLnJlYWRPbmx5KSA/IGZhbHNlIDogISFwYXJhbXMucmVhZE9ubHk7XG5cdFx0dGhpcy5pbnZlcnRlZCA9IGlzVW5kKHBhcmFtcy5pbnZlcnRlZCkgPyBmYWxzZSA6ICEhcGFyYW1zLmludmVydGVkO1xuXG5cdFx0dGhpcy5sYWJlbGVkID0gIWlzVW5kKHBhcmFtcy5sYWJlbCk7XG5cdFx0dGhpcy5sYWJlbEFuaW1hdGVkID0gISFwYXJhbXMubGFiZWxBbmltYXRlZDtcblx0fVxuXG5cdGNsaWNrKCkge1xuXHRcdGlmICghdGhpcy5yZWFkT25seSAmJiB0aGlzLmVuYWJsZSgpICYmICF0aGlzLmRpc2FibGUoKSkge1xuXHRcdFx0dGhpcy52YWx1ZSghdGhpcy52YWx1ZSgpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RDaGVja2JveCwgQWJzdHJhY3RDaGVja2JveCBhcyBkZWZhdWx0IH07XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHBhcnNlO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4vKipcbiAqIFBhcnNlcyBzdHJ1Y3R1cmVkIGUtbWFpbCBhZGRyZXNzZXMgZnJvbSBhbiBhZGRyZXNzIGZpZWxkXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICBcIk5hbWUgPGFkZHJlc3NAZG9tYWluPlwiXG4gKlxuICogd2lsbCBiZSBjb252ZXJ0ZWQgdG9cbiAqXG4gKiAgICAgW3tuYW1lOiBcIk5hbWVcIiwgYWRkcmVzczogXCJhZGRyZXNzQGRvbWFpblwifV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIEFkZHJlc3MgZmllbGRcbiAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBhZGRyZXNzIG9iamVjdHNcbiAqL1xuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHZhciB0b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKHN0cik7XG4gIHZhciB0b2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUoKTtcblxuICB2YXIgYWRkcmVzc2VzID0gW107XG4gIHZhciBhZGRyZXNzID0gW107XG4gIHZhciBwYXJzZWRBZGRyZXNzZXMgPSBbXTtcblxuICB0b2tlbnMuZm9yRWFjaChmdW5jdGlvbiAodG9rZW4pIHtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ29wZXJhdG9yJyAmJiAodG9rZW4udmFsdWUgPT09ICcsJyB8fCB0b2tlbi52YWx1ZSA9PT0gJzsnKSkge1xuICAgICAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICAgIGFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAgICAgfVxuICAgICAgYWRkcmVzcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzLnB1c2godG9rZW4pO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgYWRkcmVzc2VzLnB1c2goYWRkcmVzcyk7XG4gIH1cblxuICBhZGRyZXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgIGFkZHJlc3MgPSBfaGFuZGxlQWRkcmVzcyhhZGRyZXNzKTtcbiAgICBpZiAoYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgIHBhcnNlZEFkZHJlc3NlcyA9IHBhcnNlZEFkZHJlc3Nlcy5jb25jYXQoYWRkcmVzcyk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkQWRkcmVzc2VzO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0b2tlbnMgZm9yIGEgc2luZ2xlIGFkZHJlc3MgaW50byBhbiBhZGRyZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHRva2VucyBUb2tlbnMgb2JqZWN0XG4gKiBAcmV0dXJuIHtPYmplY3R9IEFkZHJlc3Mgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIF9oYW5kbGVBZGRyZXNzKHRva2Vucykge1xuICB2YXIgaXNHcm91cCA9IGZhbHNlO1xuICB2YXIgc3RhdGUgPSAndGV4dCc7XG4gIHZhciBhZGRyZXNzID0gdm9pZCAwO1xuICB2YXIgYWRkcmVzc2VzID0gW107XG4gIHZhciBkYXRhID0ge1xuICAgIGFkZHJlc3M6IFtdLFxuICAgIGNvbW1lbnQ6IFtdLFxuICAgIGdyb3VwOiBbXSxcbiAgICB0ZXh0OiBbXVxuXG4gICAgLy8gRmlsdGVyIG91dCA8YWRkcmVzc2VzPiwgKGNvbW1lbnRzKSBhbmQgcmVndWxhciB0ZXh0XG4gIH07Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHRva2Vucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSAnb3BlcmF0b3InKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIHN0YXRlID0gJ2FkZHJlc3MnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICBzdGF0ZSA9ICdjb21tZW50JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgc3RhdGUgPSAnZ3JvdXAnO1xuICAgICAgICAgIGlzR3JvdXAgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHN0YXRlID0gJ3RleHQnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodG9rZW4udmFsdWUpIHtcbiAgICAgICAgZGF0YVtzdGF0ZV0ucHVzaCh0b2tlbi52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gdGV4dCBidXQgYSBjb21tZW50LCByZXBsYWNlIHRoZSB0d29cbiAgaWYgKCFkYXRhLnRleHQubGVuZ3RoICYmIGRhdGEuY29tbWVudC5sZW5ndGgpIHtcbiAgICBkYXRhLnRleHQgPSBkYXRhLmNvbW1lbnQ7XG4gICAgZGF0YS5jb21tZW50ID0gW107XG4gIH1cblxuICBpZiAoaXNHcm91cCkge1xuICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjYXBwZW5kaXgtQS4xLjNcbiAgICBkYXRhLnRleHQgPSBkYXRhLnRleHQuam9pbignICcpO1xuICAgIGFkZHJlc3Nlcy5wdXNoKHtcbiAgICAgIG5hbWU6IGRhdGEudGV4dCB8fCBhZGRyZXNzICYmIGFkZHJlc3MubmFtZSxcbiAgICAgIGdyb3VwOiBkYXRhLmdyb3VwLmxlbmd0aCA/IHBhcnNlKGRhdGEuZ3JvdXAuam9pbignLCcpKSA6IFtdXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgbm8gYWRkcmVzcyB3YXMgZm91bmQsIHRyeSB0byBkZXRlY3Qgb25lIGZyb20gcmVndWxhciB0ZXh0XG4gICAgaWYgKCFkYXRhLmFkZHJlc3MubGVuZ3RoICYmIGRhdGEudGV4dC5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIF9pID0gZGF0YS50ZXh0Lmxlbmd0aCAtIDE7IF9pID49IDA7IF9pLS0pIHtcbiAgICAgICAgaWYgKGRhdGEudGV4dFtfaV0ubWF0Y2goL15bXkBcXHNdK0BbXkBcXHNdKyQvKSkge1xuICAgICAgICAgIGRhdGEuYWRkcmVzcyA9IGRhdGEudGV4dC5zcGxpY2UoX2ksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBfcmVnZXhIYW5kbGVyID0gZnVuY3Rpb24gX3JlZ2V4SGFuZGxlcihhZGRyZXNzKSB7XG4gICAgICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICAgIGRhdGEuYWRkcmVzcyA9IFthZGRyZXNzLnRyaW0oKV07XG4gICAgICAgICAgcmV0dXJuICcgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYWRkcmVzcztcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gc3RpbGwgbm8gYWRkcmVzc1xuICAgICAgaWYgKCFkYXRhLmFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICAgIGZvciAodmFyIF9pMiA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBfaTIgPj0gMDsgX2kyLS0pIHtcbiAgICAgICAgICBkYXRhLnRleHRbX2kyXSA9IGRhdGEudGV4dFtfaTJdLnJlcGxhY2UoL1xccypcXGJbXkBcXHNdK0BbXkBcXHNdK1xcYlxccyovLCBfcmVnZXhIYW5kbGVyKS50cmltKCk7XG4gICAgICAgICAgaWYgKGRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3Mgc3RpbGwgaXMgbm8gdGV4dCBidXQgYSBjb21tZW50IGV4aXh0cywgcmVwbGFjZSB0aGUgdHdvXG4gICAgaWYgKCFkYXRhLnRleHQubGVuZ3RoICYmIGRhdGEuY29tbWVudC5sZW5ndGgpIHtcbiAgICAgIGRhdGEudGV4dCA9IGRhdGEuY29tbWVudDtcbiAgICAgIGRhdGEuY29tbWVudCA9IFtdO1xuICAgIH1cblxuICAgIC8vIEtlZXAgb25seSB0aGUgZmlyc3QgYWRkcmVzcyBvY2N1cmVuY2UsIHB1c2ggb3RoZXJzIHRvIHJlZ3VsYXIgdGV4dFxuICAgIGlmIChkYXRhLmFkZHJlc3MubGVuZ3RoID4gMSkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmNvbmNhdChkYXRhLmFkZHJlc3Muc3BsaWNlKDEpKTtcbiAgICB9XG5cbiAgICAvLyBKb2luIHZhbHVlcyB3aXRoIHNwYWNlc1xuICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5qb2luKCcgJyk7XG4gICAgZGF0YS5hZGRyZXNzID0gZGF0YS5hZGRyZXNzLmpvaW4oJyAnKTtcblxuICAgIGlmICghZGF0YS5hZGRyZXNzICYmIGlzR3JvdXApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkcmVzcyA9IHtcbiAgICAgICAgYWRkcmVzczogZGF0YS5hZGRyZXNzIHx8IGRhdGEudGV4dCB8fCAnJyxcbiAgICAgICAgbmFtZTogZGF0YS50ZXh0IHx8IGRhdGEuYWRkcmVzcyB8fCAnJ1xuICAgICAgfTtcblxuICAgICAgaWYgKGFkZHJlc3MuYWRkcmVzcyA9PT0gYWRkcmVzcy5uYW1lKSB7XG4gICAgICAgIGlmICgoYWRkcmVzcy5hZGRyZXNzIHx8ICcnKS5tYXRjaCgvQC8pKSB7XG4gICAgICAgICAgYWRkcmVzcy5uYW1lID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkcmVzcy5hZGRyZXNzID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkcmVzc2VzLnB1c2goYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFkZHJlc3Nlcztcbn07XG5cbi8qXG4gKiBPcGVyYXRvciB0b2tlbnMgYW5kIHdoaWNoIHRva2VucyBhcmUgZXhwZWN0ZWQgdG8gZW5kIHRoZSBzZXF1ZW5jZVxuICovXG52YXIgT1BFUkFUT1JTID0ge1xuICAnXCInOiAnXCInLFxuICAnKCc6ICcpJyxcbiAgJzwnOiAnPicsXG4gICcsJzogJycsXG4gIC8vIEdyb3VwcyBhcmUgZW5kZWQgYnkgc2VtaWNvbG9uc1xuICAnOic6ICc7JyxcbiAgLy8gU2VtaWNvbG9ucyBhcmUgbm90IGEgbGVnYWwgZGVsaW1pdGVyIHBlciB0aGUgUkZDMjgyMiBncmFtbWFyIG90aGVyXG4gIC8vIHRoYW4gZm9yIHRlcm1pbmF0aW5nIGEgZ3JvdXAsIGJ1dCB0aGV5IGFyZSBhbHNvIG5vdCB2YWxpZCBmb3IgYW55XG4gIC8vIG90aGVyIHVzZSBpbiB0aGlzIGNvbnRleHQuICBHaXZlbiB0aGF0IHNvbWUgbWFpbCBjbGllbnRzIGhhdmVcbiAgLy8gaGlzdG9yaWNhbGx5IGFsbG93ZWQgdGhlIHNlbWljb2xvbiBhcyBhIGRlbGltaXRlciBlcXVpdmFsZW50IHRvIHRoZVxuICAvLyBjb21tYSBpbiB0aGVpciBVSSwgaXQgbWFrZXMgc2Vuc2UgdG8gdHJlYXQgdGhlbSB0aGUgc2FtZSBhcyBhIGNvbW1hXG4gIC8vIHdoZW4gdXNlZCBvdXRzaWRlIG9mIGEgZ3JvdXAuXG4gICc7JzogJydcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRva2VuaXplciBvYmplY3QgZm9yIHRva2VuaXppbmcgYWRkcmVzcyBmaWVsZCBzdHJpbmdzXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIEFkZHJlc3MgZmllbGQgc3RyaW5nXG4gICAqL1xufTtcbnZhciBUb2tlbml6ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRva2VuaXplcihzdHIpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9rZW5pemVyKTtcblxuICAgIHRoaXMuc3RyID0gKHN0ciB8fCAnJykudG9TdHJpbmcoKTtcbiAgICB0aGlzLm9wZXJhdG9yQ3VycmVudCA9ICcnO1xuICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSAnJztcbiAgICB0aGlzLm5vZGUgPSBudWxsO1xuICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgIHRoaXMubGlzdCA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRva2VuaXplcyB0aGUgb3JpZ2luYWwgaW5wdXQgc3RyaW5nXG4gICAqXG4gICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBvcGVyYXRvcnx0ZXh0IHRva2Vuc1xuICAgKi9cblxuXG4gIF9jcmVhdGVDbGFzcyhUb2tlbml6ZXIsIFt7XG4gICAga2V5OiAndG9rZW5pemUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b2tlbml6ZSgpIHtcbiAgICAgIHZhciBjaHIgPSB2b2lkIDA7XG4gICAgICB2YXIgbGlzdCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuc3RyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNociA9IHRoaXMuc3RyLmNoYXJBdChpKTtcbiAgICAgICAgdGhpcy5jaGVja0NoYXIoY2hyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5saXN0LmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IChub2RlLnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKTtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgICAgICBsaXN0LnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBjaGFyYWN0ZXIgaXMgYW4gb3BlcmF0b3Igb3IgdGV4dCBhbmQgYWN0cyBhY2NvcmRpbmdseVxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNociBDaGFyYWN0ZXIgZnJvbSB0aGUgYWRkcmVzcyBmaWVsZFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdjaGVja0NoYXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGVja0NoYXIoY2hyKSB7XG4gICAgICBpZiAoKGNociBpbiBPUEVSQVRPUlMgfHwgY2hyID09PSAnXFxcXCcpICYmIHRoaXMuZXNjYXBlZCkge1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgPT09IHRoaXMub3BlcmF0b3JFeHBlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5ub2RlID0ge1xuICAgICAgICAgIHR5cGU6ICdvcGVyYXRvcicsXG4gICAgICAgICAgdmFsdWU6IGNoclxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxpc3QucHVzaCh0aGlzLm5vZGUpO1xuICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLm9wZXJhdG9yRXhwZWN0aW5nID0gJyc7XG4gICAgICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wZXJhdG9yRXhwZWN0aW5nICYmIGNociBpbiBPUEVSQVRPUlMpIHtcbiAgICAgICAgdGhpcy5ub2RlID0ge1xuICAgICAgICAgIHR5cGU6ICdvcGVyYXRvcicsXG4gICAgICAgICAgdmFsdWU6IGNoclxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxpc3QucHVzaCh0aGlzLm5vZGUpO1xuICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLm9wZXJhdG9yRXhwZWN0aW5nID0gT1BFUkFUT1JTW2Nocl07XG4gICAgICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5lc2NhcGVkICYmIGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIHRoaXMuZXNjYXBlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLm5vZGUpIHtcbiAgICAgICAgdGhpcy5ub2RlID0ge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZXNjYXBlZCAmJiBjaHIgIT09ICdcXFxcJykge1xuICAgICAgICB0aGlzLm5vZGUudmFsdWUgKz0gJ1xcXFwnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vZGUudmFsdWUgKz0gY2hyO1xuICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRva2VuaXplcjtcbn0oKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5aFpHUnlaWE56Y0dGeWMyVnlMbXB6SWwwc0ltNWhiV1Z6SWpwYkluQmhjbk5sSWl3aWMzUnlJaXdpZEc5clpXNXBlbVZ5SWl3aVZHOXJaVzVwZW1WeUlpd2lkRzlyWlc1eklpd2lkRzlyWlc1cGVtVWlMQ0poWkdSeVpYTnpaWE1pTENKaFpHUnlaWE56SWl3aWNHRnljMlZrUVdSa2NtVnpjMlZ6SWl3aVptOXlSV0ZqYUNJc0luUnZhMlZ1SWl3aWRIbHdaU0lzSW5aaGJIVmxJaXdpYkdWdVozUm9JaXdpY0hWemFDSXNJbDlvWVc1a2JHVkJaR1J5WlhOeklpd2lZMjl1WTJGMElpd2lhWE5IY205MWNDSXNJbk4wWVhSbElpd2laR0YwWVNJc0ltTnZiVzFsYm5RaUxDSm5jbTkxY0NJc0luUmxlSFFpTENKcElpd2liR1Z1SWl3aWFtOXBiaUlzSW01aGJXVWlMQ0p0WVhSamFDSXNJbk53YkdsalpTSXNJbDl5WldkbGVFaGhibVJzWlhJaUxDSjBjbWx0SWl3aWNtVndiR0ZqWlNJc0lrOVFSVkpCVkU5U1V5SXNJblJ2VTNSeWFXNW5JaXdpYjNCbGNtRjBiM0pEZFhKeVpXNTBJaXdpYjNCbGNtRjBiM0pGZUhCbFkzUnBibWNpTENKdWIyUmxJaXdpWlhOallYQmxaQ0lzSW14cGMzUWlMQ0pqYUhJaUxDSmphR0Z5UVhRaUxDSmphR1ZqYTBOb1lYSWlYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3TzJ0Q1FXTjNRa0VzU3pzN096dEJRV1I0UWpzN096czdPenM3T3pzN096czdRVUZqWlN4VFFVRlRRU3hMUVVGVUxFTkJRV2RDUXl4SFFVRm9RaXhGUVVGeFFqdEJRVU5zUXl4TlFVRk5ReXhaUVVGWkxFbEJRVWxETEZOQlFVb3NRMEZCWTBZc1IwRkJaQ3hEUVVGc1FqdEJRVU5CTEUxQlFVMUhMRk5CUVZOR0xGVkJRVlZITEZGQlFWWXNSVUZCWmpzN1FVRkZRU3hOUVVGTlF5eFpRVUZaTEVWQlFXeENPMEZCUTBFc1RVRkJTVU1zVlVGQlZTeEZRVUZrTzBGQlEwRXNUVUZCU1VNc2EwSkJRV3RDTEVWQlFYUkNPenRCUVVWQlNpeFRRVUZQU3l4UFFVRlFMRU5CUVdVc1ZVRkJWVU1zUzBGQlZpeEZRVUZwUWp0QlFVTTVRaXhSUVVGSlFTeE5RVUZOUXl4SlFVRk9MRXRCUVdVc1ZVRkJaaXhMUVVFNFFrUXNUVUZCVFVVc1MwRkJUaXhMUVVGblFpeEhRVUZvUWl4SlFVRjFRa1lzVFVGQlRVVXNTMEZCVGl4TFFVRm5RaXhIUVVGeVJTeERRVUZLTEVWQlFTdEZPMEZCUXpkRkxGVkJRVWxNTEZGQlFWRk5MRTFCUVZvc1JVRkJiMEk3UVVGRGJFSlFMR3RDUVVGVlVTeEpRVUZXTEVOQlFXVlFMRTlCUVdZN1FVRkRSRHRCUVVORVFTeG5Ra0ZCVlN4RlFVRldPMEZCUTBRc1MwRk1SQ3hOUVV0UE8wRkJRMHhCTEdOQlFWRlBMRWxCUVZJc1EwRkJZVW9zUzBGQllqdEJRVU5FTzBGQlEwWXNSMEZVUkRzN1FVRlhRU3hOUVVGSlNDeFJRVUZSVFN4TlFVRmFMRVZCUVc5Q08wRkJRMnhDVUN4alFVRlZVU3hKUVVGV0xFTkJRV1ZRTEU5QlFXWTdRVUZEUkRzN1FVRkZSRVFzV1VGQlZVY3NUMEZCVml4RFFVRnJRaXhWUVVGVlJpeFBRVUZXTEVWQlFXMUNPMEZCUTI1RFFTeGpRVUZWVVN4bFFVRmxVaXhQUVVGbUxFTkJRVlk3UVVGRFFTeFJRVUZKUVN4UlFVRlJUU3hOUVVGYUxFVkJRVzlDTzBGQlEyeENUQ3gzUWtGQmEwSkJMR2RDUVVGblFsRXNUVUZCYUVJc1EwRkJkVUpVTEU5QlFYWkNMRU5CUVd4Q08wRkJRMFE3UVVGRFJpeEhRVXhFT3p0QlFVOUJMRk5CUVU5RExHVkJRVkE3UVVGRFJEczdRVUZGUkRzN096czdPMEZCVFVFc1UwRkJVMDhzWTBGQlZDeERRVUY1UWxnc1RVRkJla0lzUlVGQmFVTTdRVUZETDBJc1RVRkJTV0VzVlVGQlZTeExRVUZrTzBGQlEwRXNUVUZCU1VNc1VVRkJVU3hOUVVGYU8wRkJRMEVzVFVGQlNWZ3NaMEpCUVVvN1FVRkRRU3hOUVVGTlJDeFpRVUZaTEVWQlFXeENPMEZCUTBFc1RVRkJUV0VzVDBGQlR6dEJRVU5ZV2l4aFFVRlRMRVZCUkVVN1FVRkZXR0VzWVVGQlV5eEZRVVpGTzBGQlIxaERMRmRCUVU4c1JVRklTVHRCUVVsWVF5eFZRVUZOT3p0QlFVZFNPMEZCVUdFc1IwRkJZaXhEUVZGQkxFdEJRVXNzU1VGQlNVTXNTVUZCU1N4RFFVRlNMRVZCUVZkRExFMUJRVTF3UWl4UFFVRlBVeXhOUVVFM1FpeEZRVUZ4UTFVc1NVRkJTVU1zUjBGQmVrTXNSVUZCT0VORUxFZEJRVGxETEVWQlFXMUVPMEZCUTJwRUxGRkJRVTFpTEZGQlFWRk9MRTlCUVU5dFFpeERRVUZRTEVOQlFXUTdPMEZCUlVFc1VVRkJTV0lzVFVGQlRVTXNTVUZCVGl4TFFVRmxMRlZCUVc1Q0xFVkJRU3RDTzBGQlF6ZENMR05CUVZGRUxFMUJRVTFGTEV0QlFXUTdRVUZEUlN4aFFVRkxMRWRCUVV3N1FVRkRSVTBzYTBKQlFWRXNVMEZCVWp0QlFVTkJPMEZCUTBZc1lVRkJTeXhIUVVGTU8wRkJRMFZCTEd0Q1FVRlJMRk5CUVZJN1FVRkRRVHRCUVVOR0xHRkJRVXNzUjBGQlREdEJRVU5GUVN4clFrRkJVU3hQUVVGU08wRkJRMEZFTEc5Q1FVRlZMRWxCUVZZN1FVRkRRVHRCUVVOR08wRkJRMFZETEd0Q1FVRlJMRTFCUVZJN1FVRmFTanRCUVdORUxFdEJaa1FzVFVGbFR6dEJRVU5NTEZWQlFVbFNMRTFCUVUxRkxFdEJRVllzUlVGQmFVSTdRVUZEWms4c1lVRkJTMFFzUzBGQlRDeEZRVUZaU2l4SlFVRmFMRU5CUVdsQ1NpeE5RVUZOUlN4TFFVRjJRanRCUVVORU8wRkJRMFk3UVVGRFJqczdRVUZGUkR0QlFVTkJMRTFCUVVrc1EwRkJRMDhzUzBGQlMwY3NTVUZCVEN4RFFVRlZWQ3hOUVVGWUxFbEJRWEZDVFN4TFFVRkxReXhQUVVGTUxFTkJRV0ZRTEUxQlFYUkRMRVZCUVRoRE8wRkJRelZEVFN4VFFVRkxSeXhKUVVGTUxFZEJRVmxJTEV0QlFVdERMRTlCUVdwQ08wRkJRMEZFTEZOQlFVdERMRTlCUVV3c1IwRkJaU3hGUVVGbU8wRkJRMFE3TzBGQlJVUXNUVUZCU1Vnc1QwRkJTaXhGUVVGaE8wRkJRMWc3UVVGRFFVVXNVMEZCUzBjc1NVRkJUQ3hIUVVGWlNDeExRVUZMUnl4SlFVRk1MRU5CUVZWSExFbEJRVllzUTBGQlpTeEhRVUZtTEVOQlFWbzdRVUZEUVc1Q0xHTkJRVlZSTEVsQlFWWXNRMEZCWlR0QlFVTmlXU3haUVVGTlVDeExRVUZMUnl4SlFVRk1MRWxCUVdObUxGZEJRVmRCTEZGQlFWRnRRaXhKUVVReFFqdEJRVVZpVEN4aFFVRlBSaXhMUVVGTFJTeExRVUZNTEVOQlFWZFNMRTFCUVZnc1IwRkJiMEppTEUxQlFVMXRRaXhMUVVGTFJTeExRVUZNTEVOQlFWZEpMRWxCUVZnc1EwRkJaMElzUjBGQmFFSXNRMEZCVGl4RFFVRndRaXhIUVVGclJEdEJRVVkxUXl4TFFVRm1PMEZCU1VRc1IwRlFSQ3hOUVU5UE8wRkJRMHc3UVVGRFFTeFJRVUZKTEVOQlFVTk9MRXRCUVV0YUxFOUJRVXdzUTBGQllVMHNUVUZCWkN4SlFVRjNRazBzUzBGQlMwY3NTVUZCVEN4RFFVRlZWQ3hOUVVGMFF5eEZRVUU0UXp0QlFVTTFReXhYUVVGTExFbEJRVWxWTEV0QlFVbEtMRXRCUVV0SExFbEJRVXdzUTBGQlZWUXNUVUZCVml4SFFVRnRRaXhEUVVGb1F5eEZRVUZ0UTFVc1RVRkJTeXhEUVVGNFF5eEZRVUV5UTBFc1NVRkJNME1zUlVGQlowUTdRVUZET1VNc1dVRkJTVW9zUzBGQlMwY3NTVUZCVEN4RFFVRlZReXhGUVVGV0xFVkJRV0ZKTEV0QlFXSXNRMEZCYlVJc2JVSkJRVzVDTEVOQlFVb3NSVUZCTmtNN1FVRkRNME5TTEdWQlFVdGFMRTlCUVV3c1IwRkJaVmtzUzBGQlMwY3NTVUZCVEN4RFFVRlZUU3hOUVVGV0xFTkJRV2xDVEN4RlFVRnFRaXhGUVVGdlFpeERRVUZ3UWl4RFFVRm1PMEZCUTBFN1FVRkRSRHRCUVVOR096dEJRVVZFTEZWQlFVbE5MR2RDUVVGblFpeFRRVUZvUWtFc1lVRkJaMElzUTBGQlZYUkNMRTlCUVZZc1JVRkJiVUk3UVVGRGNrTXNXVUZCU1N4RFFVRkRXU3hMUVVGTFdpeFBRVUZNTEVOQlFXRk5MRTFCUVd4Q0xFVkJRVEJDTzBGQlEzaENUU3hsUVVGTFdpeFBRVUZNTEVkQlFXVXNRMEZCUTBFc1VVRkJVWFZDTEVsQlFWSXNSVUZCUkN4RFFVRm1PMEZCUTBFc2FVSkJRVThzUjBGQlVEdEJRVU5FTEZOQlNFUXNUVUZIVHp0QlFVTk1MR2xDUVVGUGRrSXNUMEZCVUR0QlFVTkVPMEZCUTBZc1QwRlFSRHM3UVVGVFFUdEJRVU5CTEZWQlFVa3NRMEZCUTFrc1MwRkJTMW9zVDBGQlRDeERRVUZoVFN4TlFVRnNRaXhGUVVFd1FqdEJRVU40UWl4aFFVRkxMRWxCUVVsVkxFMUJRVWxLTEV0QlFVdEhMRWxCUVV3c1EwRkJWVlFzVFVGQlZpeEhRVUZ0UWl4RFFVRm9ReXhGUVVGdFExVXNUMEZCU3l4RFFVRjRReXhGUVVFeVEwRXNTMEZCTTBNc1JVRkJaMFE3UVVGRE9VTktMR1ZCUVV0SExFbEJRVXdzUTBGQlZVTXNSMEZCVml4SlFVRmxTaXhMUVVGTFJ5eEpRVUZNTEVOQlFWVkRMRWRCUVZZc1JVRkJZVkVzVDBGQllpeERRVUZ4UWl3eVFrRkJja0lzUlVGQmEwUkdMR0ZCUVd4RUxFVkJRV2xGUXl4SlFVRnFSU3hGUVVGbU8wRkJRMEVzWTBGQlNWZ3NTMEZCUzFvc1QwRkJUQ3hEUVVGaFRTeE5RVUZxUWl4RlFVRjVRanRCUVVOMlFqdEJRVU5FTzBGQlEwWTdRVUZEUmp0QlFVTkdPenRCUVVWRU8wRkJRMEVzVVVGQlNTeERRVUZEVFN4TFFVRkxSeXhKUVVGTUxFTkJRVlZVTEUxQlFWZ3NTVUZCY1VKTkxFdEJRVXRETEU5QlFVd3NRMEZCWVZBc1RVRkJkRU1zUlVGQk9FTTdRVUZETlVOTkxGZEJRVXRITEVsQlFVd3NSMEZCV1Vnc1MwRkJTME1zVDBGQmFrSTdRVUZEUVVRc1YwRkJTME1zVDBGQlRDeEhRVUZsTEVWQlFXWTdRVUZEUkRzN1FVRkZSRHRCUVVOQkxGRkJRVWxFTEV0QlFVdGFMRTlCUVV3c1EwRkJZVTBzVFVGQllpeEhRVUZ6UWl4RFFVRXhRaXhGUVVFMlFqdEJRVU16UWswc1YwRkJTMGNzU1VGQlRDeEhRVUZaU0N4TFFVRkxSeXhKUVVGTUxFTkJRVlZPTEUxQlFWWXNRMEZCYVVKSExFdEJRVXRhTEU5QlFVd3NRMEZCWVhGQ0xFMUJRV0lzUTBGQmIwSXNRMEZCY0VJc1EwRkJha0lzUTBGQldqdEJRVU5FT3p0QlFVVkVPMEZCUTBGVUxGTkJRVXRITEVsQlFVd3NSMEZCV1Vnc1MwRkJTMGNzU1VGQlRDeERRVUZWUnl4SlFVRldMRU5CUVdVc1IwRkJaaXhEUVVGYU8wRkJRMEZPTEZOQlFVdGFMRTlCUVV3c1IwRkJaVmtzUzBGQlMxb3NUMEZCVEN4RFFVRmhhMElzU1VGQllpeERRVUZyUWl4SFFVRnNRaXhEUVVGbU96dEJRVVZCTEZGQlFVa3NRMEZCUTA0c1MwRkJTMW9zVDBGQlRpeEpRVUZwUWxVc1QwRkJja0lzUlVGQk9FSTdRVUZETlVJc1lVRkJUeXhGUVVGUU8wRkJRMFFzUzBGR1JDeE5RVVZQTzBGQlEweFdMR2RDUVVGVk8wRkJRMUpCTEdsQ1FVRlRXU3hMUVVGTFdpeFBRVUZNTEVsQlFXZENXU3hMUVVGTFJ5eEpRVUZ5UWl4SlFVRTJRaXhGUVVRNVFqdEJRVVZTU1N4alFVRk5VQ3hMUVVGTFJ5eEpRVUZNTEVsQlFXRklMRXRCUVV0YUxFOUJRV3hDTEVsQlFUWkNPMEZCUmpOQ0xFOUJRVlk3TzBGQlMwRXNWVUZCU1VFc1VVRkJVVUVzVDBGQlVpeExRVUZ2UWtFc1VVRkJVVzFDTEVsQlFXaERMRVZCUVhORE8wRkJRM0JETEZsQlFVa3NRMEZCUTI1Q0xGRkJRVkZCTEU5QlFWSXNTVUZCYlVJc1JVRkJjRUlzUlVGQmQwSnZRaXhMUVVGNFFpeERRVUU0UWl4SFFVRTVRaXhEUVVGS0xFVkJRWGRETzBGQlEzUkRjRUlzYTBKQlFWRnRRaXhKUVVGU0xFZEJRV1VzUlVGQlpqdEJRVU5FTEZOQlJrUXNUVUZGVHp0QlFVTk1ia0lzYTBKQlFWRkJMRTlCUVZJc1IwRkJhMElzUlVGQmJFSTdRVUZEUkR0QlFVTkdPenRCUVVWRVJDeG5Ra0ZCVlZFc1NVRkJWaXhEUVVGbFVDeFBRVUZtTzBGQlEwUTdRVUZEUmpzN1FVRkZSQ3hUUVVGUFJDeFRRVUZRTzBGQlEwUTdPMEZCUlVRN096dEJRVWRCTEVsQlFVMHdRaXhaUVVGWk8wRkJRMmhDTEU5QlFVc3NSMEZFVnp0QlFVVm9RaXhQUVVGTExFZEJSbGM3UVVGSGFFSXNUMEZCU3l4SFFVaFhPMEZCU1doQ0xFOUJRVXNzUlVGS1Z6dEJRVXRvUWp0QlFVTkJMRTlCUVVzc1IwRk9WenRCUVU5b1FqdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU3hQUVVGTE96dEJRVWRRT3pzN096czdRVUZvUW10Q0xFTkJRV3hDTzBsQmMwSk5OMElzVXp0QlFVTktMSEZDUVVGaFJpeEhRVUZpTEVWQlFXdENPMEZCUVVFN08wRkJRMmhDTEZOQlFVdEJMRWRCUVV3c1IwRkJWeXhEUVVGRFFTeFBRVUZQTEVWQlFWSXNSVUZCV1dkRExGRkJRVm9zUlVGQldEdEJRVU5CTEZOQlFVdERMR1ZCUVV3c1IwRkJkVUlzUlVGQmRrSTdRVUZEUVN4VFFVRkxReXhwUWtGQlRDeEhRVUY1UWl4RlFVRjZRanRCUVVOQkxGTkJRVXRETEVsQlFVd3NSMEZCV1N4SlFVRmFPMEZCUTBFc1UwRkJTME1zVDBGQlRDeEhRVUZsTEV0QlFXWTdRVUZEUVN4VFFVRkxReXhKUVVGTUxFZEJRVmtzUlVGQldqdEJRVU5FT3p0QlFVVkVPenM3T3pzN096czdLMEpCUzFrN1FVRkRWaXhWUVVGSlF5eFpRVUZLTzBGQlEwRXNWVUZCU1VRc1QwRkJUeXhGUVVGWU8wRkJRMEVzVjBGQlN5eEpRVUZKWml4SlFVRkpMRU5CUVZJc1JVRkJWME1zVFVGQlRTeExRVUZMZGtJc1IwRkJUQ3hEUVVGVFdTeE5RVUV2UWl4RlFVRjFRMVVzU1VGQlNVTXNSMEZCTTBNc1JVRkJaMFJFTEVkQlFXaEVMRVZCUVhGRU8wRkJRMjVFWjBJc1kwRkJUU3hMUVVGTGRFTXNSMEZCVEN4RFFVRlRkVU1zVFVGQlZDeERRVUZuUW1wQ0xFTkJRV2hDTEVOQlFVNDdRVUZEUVN4aFFVRkxhMElzVTBGQlRDeERRVUZsUml4SFFVRm1PMEZCUTBRN08wRkJSVVFzVjBGQlMwUXNTVUZCVEN4RFFVRlZOMElzVDBGQlZpeERRVUZyUWl4VlFVRlZNa0lzU1VGQlZpeEZRVUZuUWp0QlFVTm9RMEVzWVVGQlMzaENMRXRCUVV3c1IwRkJZU3hEUVVGRGQwSXNTMEZCUzNoQ0xFdEJRVXdzU1VGQll5eEZRVUZtTEVWQlFXMUNjVUlzVVVGQmJrSXNSMEZCT0VKSUxFbEJRVGxDTEVWQlFXSTdRVUZEUVN4WlFVRkpUU3hMUVVGTGVFSXNTMEZCVkN4RlFVRm5RanRCUVVOa01FSXNaVUZCUzNoQ0xFbEJRVXdzUTBGQlZYTkNMRWxCUVZZN1FVRkRSRHRCUVVOR0xFOUJURVE3TzBGQlQwRXNZVUZCVDBVc1NVRkJVRHRCUVVORU96dEJRVVZFT3pzN096czdPenM0UWtGTFYwTXNSeXhGUVVGTE8wRkJRMlFzVlVGQlNTeERRVUZEUVN4UFFVRlBVQ3hUUVVGUUxFbEJRVzlDVHl4UlFVRlJMRWxCUVRkQ0xFdEJRWE5ETEV0QlFVdEdMRTlCUVM5RExFVkJRWGRFTzBGQlEzUkVMR0ZCUVV0QkxFOUJRVXdzUjBGQlpTeExRVUZtTzBGQlEwUXNUMEZHUkN4TlFVVlBMRWxCUVVrc1MwRkJTMFlzYVVKQlFVd3NTVUZCTUVKSkxGRkJRVkVzUzBGQlMwb3NhVUpCUVRORExFVkJRVGhFTzBGQlEyNUZMR0ZCUVV0RExFbEJRVXdzUjBGQldUdEJRVU5XZWtJc1owSkJRVTBzVlVGRVNUdEJRVVZXUXl4cFFrRkJUekpDTzBGQlJrY3NVMEZCV2p0QlFVbEJMR0ZCUVV0RUxFbEJRVXdzUTBGQlZYaENMRWxCUVZZc1EwRkJaU3hMUVVGTGMwSXNTVUZCY0VJN1FVRkRRU3hoUVVGTFFTeEpRVUZNTEVkQlFWa3NTVUZCV2p0QlFVTkJMR0ZCUVV0RUxHbENRVUZNTEVkQlFYbENMRVZCUVhwQ08wRkJRMEVzWVVGQlMwVXNUMEZCVEN4SFFVRmxMRXRCUVdZN1FVRkRRVHRCUVVORUxFOUJWazBzVFVGVlFTeEpRVUZKTEVOQlFVTXNTMEZCUzBZc2FVSkJRVTRzU1VGQk1rSkpMRTlCUVU5UUxGTkJRWFJETEVWQlFXbEVPMEZCUTNSRUxHRkJRVXRKTEVsQlFVd3NSMEZCV1R0QlFVTldla0lzWjBKQlFVMHNWVUZFU1R0QlFVVldReXhwUWtGQlR6SkNPMEZCUmtjc1UwRkJXanRCUVVsQkxHRkJRVXRFTEVsQlFVd3NRMEZCVlhoQ0xFbEJRVllzUTBGQlpTeExRVUZMYzBJc1NVRkJjRUk3UVVGRFFTeGhRVUZMUVN4SlFVRk1MRWRCUVZrc1NVRkJXanRCUVVOQkxHRkJRVXRFTEdsQ1FVRk1MRWRCUVhsQ1NDeFZRVUZWVHl4SFFVRldMRU5CUVhwQ08wRkJRMEVzWVVGQlMwWXNUMEZCVEN4SFFVRmxMRXRCUVdZN1FVRkRRVHRCUVVORU96dEJRVVZFTEZWQlFVa3NRMEZCUXl4TFFVRkxRU3hQUVVGT0xFbEJRV2xDUlN4UlFVRlJMRWxCUVRkQ0xFVkJRVzFETzBGQlEycERMR0ZCUVV0R0xFOUJRVXdzUjBGQlpTeEpRVUZtTzBGQlEwRTdRVUZEUkRzN1FVRkZSQ3hWUVVGSkxFTkJRVU1zUzBGQlMwUXNTVUZCVml4RlFVRm5RanRCUVVOa0xHRkJRVXRCTEVsQlFVd3NSMEZCV1R0QlFVTldla0lzWjBKQlFVMHNUVUZFU1R0QlFVVldReXhwUWtGQlR6dEJRVVpITEZOQlFWbzdRVUZKUVN4aFFVRkxNRUlzU1VGQlRDeERRVUZWZUVJc1NVRkJWaXhEUVVGbExFdEJRVXR6UWl4SlFVRndRanRCUVVORU96dEJRVVZFTEZWQlFVa3NTMEZCUzBNc1QwRkJUQ3hKUVVGblFrVXNVVUZCVVN4SlFVRTFRaXhGUVVGclF6dEJRVU5vUXl4aFFVRkxTQ3hKUVVGTUxFTkJRVlY0UWl4TFFVRldMRWxCUVcxQ0xFbEJRVzVDTzBGQlEwUTdPMEZCUlVRc1YwRkJTM2RDTEVsQlFVd3NRMEZCVlhoQ0xFdEJRVllzU1VGQmJVSXlRaXhIUVVGdVFqdEJRVU5CTEZkQlFVdEdMRTlCUVV3c1IwRkJaU3hMUVVGbU8wRkJRMFFpTENKbWFXeGxJam9pWVdSa2NtVnpjM0JoY25ObGNpNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nVUdGeWMyVnpJSE4wY25WamRIVnlaV1FnWlMxdFlXbHNJR0ZrWkhKbGMzTmxjeUJtY205dElHRnVJR0ZrWkhKbGMzTWdabWxsYkdSY2JpQXFYRzRnS2lCRmVHRnRjR3hsT2x4dUlDcGNiaUFxSUNBZ0lGd2lUbUZ0WlNBOFlXUmtjbVZ6YzBCa2IyMWhhVzQrWENKY2JpQXFYRzRnS2lCM2FXeHNJR0psSUdOdmJuWmxjblJsWkNCMGIxeHVJQ3BjYmlBcUlDQWdJQ0JiZTI1aGJXVTZJRndpVG1GdFpWd2lMQ0JoWkdSeVpYTnpPaUJjSW1Ga1pISmxjM05BWkc5dFlXbHVYQ0o5WFZ4dUlDcGNiaUFxSUVCd1lYSmhiU0I3VTNSeWFXNW5mU0J6ZEhJZ1FXUmtjbVZ6Y3lCbWFXVnNaRnh1SUNvZ1FISmxkSFZ5YmlCN1FYSnlZWGw5SUVGdUlHRnljbUY1SUc5bUlHRmtaSEpsYzNNZ2IySnFaV04wYzF4dUlDb3ZYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQm1kVzVqZEdsdmJpQndZWEp6WlNBb2MzUnlLU0I3WEc0Z0lHTnZibk4wSUhSdmEyVnVhWHBsY2lBOUlHNWxkeUJVYjJ0bGJtbDZaWElvYzNSeUtWeHVJQ0JqYjI1emRDQjBiMnRsYm5NZ1BTQjBiMnRsYm1sNlpYSXVkRzlyWlc1cGVtVW9LVnh1WEc0Z0lHTnZibk4wSUdGa1pISmxjM05sY3lBOUlGdGRYRzRnSUd4bGRDQmhaR1J5WlhOeklEMGdXMTFjYmlBZ2JHVjBJSEJoY25ObFpFRmtaSEpsYzNObGN5QTlJRnRkWEc1Y2JpQWdkRzlyWlc1ekxtWnZja1ZoWTJnb1puVnVZM1JwYjI0Z0tIUnZhMlZ1S1NCN1hHNGdJQ0FnYVdZZ0tIUnZhMlZ1TG5SNWNHVWdQVDA5SUNkdmNHVnlZWFJ2Y2ljZ0ppWWdLSFJ2YTJWdUxuWmhiSFZsSUQwOVBTQW5MQ2NnZkh3Z2RHOXJaVzR1ZG1Gc2RXVWdQVDA5SUNjN0p5a3BJSHRjYmlBZ0lDQWdJR2xtSUNoaFpHUnlaWE56TG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNCaFpHUnlaWE56WlhNdWNIVnphQ2hoWkdSeVpYTnpLVnh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdZV1JrY21WemN5QTlJRnRkWEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHRmtaSEpsYzNNdWNIVnphQ2gwYjJ0bGJpbGNiaUFnSUNCOVhHNGdJSDBwWEc1Y2JpQWdhV1lnS0dGa1pISmxjM011YkdWdVozUm9LU0I3WEc0Z0lDQWdZV1JrY21WemMyVnpMbkIxYzJnb1lXUmtjbVZ6Y3lsY2JpQWdmVnh1WEc0Z0lHRmtaSEpsYzNObGN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUlDaGhaR1J5WlhOektTQjdYRzRnSUNBZ1lXUmtjbVZ6Y3lBOUlGOW9ZVzVrYkdWQlpHUnlaWE56S0dGa1pISmxjM01wWEc0Z0lDQWdhV1lnS0dGa1pISmxjM011YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0J3WVhKelpXUkJaR1J5WlhOelpYTWdQU0J3WVhKelpXUkJaR1J5WlhOelpYTXVZMjl1WTJGMEtHRmtaSEpsYzNNcFhHNGdJQ0FnZlZ4dUlDQjlLVnh1WEc0Z0lISmxkSFZ5YmlCd1lYSnpaV1JCWkdSeVpYTnpaWE5jYm4wN1hHNWNiaThxS2x4dUlDb2dRMjl1ZG1WeWRITWdkRzlyWlc1eklHWnZjaUJoSUhOcGJtZHNaU0JoWkdSeVpYTnpJR2x1ZEc4Z1lXNGdZV1JrY21WemN5QnZZbXBsWTNSY2JpQXFYRzRnS2lCQWNHRnlZVzBnZTBGeWNtRjVmU0IwYjJ0bGJuTWdWRzlyWlc1eklHOWlhbVZqZEZ4dUlDb2dRSEpsZEhWeWJpQjdUMkpxWldOMGZTQkJaR1J5WlhOeklHOWlhbVZqZEZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJmYUdGdVpHeGxRV1JrY21WemN5QW9kRzlyWlc1ektTQjdYRzRnSUd4bGRDQnBjMGR5YjNWd0lEMGdabUZzYzJWY2JpQWdiR1YwSUhOMFlYUmxJRDBnSjNSbGVIUW5YRzRnSUd4bGRDQmhaR1J5WlhOelhHNGdJR052Ym5OMElHRmtaSEpsYzNObGN5QTlJRnRkWEc0Z0lHTnZibk4wSUdSaGRHRWdQU0I3WEc0Z0lDQWdZV1JrY21WemN6b2dXMTBzWEc0Z0lDQWdZMjl0YldWdWREb2dXMTBzWEc0Z0lDQWdaM0p2ZFhBNklGdGRMRnh1SUNBZ0lIUmxlSFE2SUZ0ZFhHNGdJSDFjYmx4dUlDQXZMeUJHYVd4MFpYSWdiM1YwSUR4aFpHUnlaWE56WlhNK0xDQW9ZMjl0YldWdWRITXBJR0Z1WkNCeVpXZDFiR0Z5SUhSbGVIUmNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQXNJR3hsYmlBOUlIUnZhMlZ1Y3k1c1pXNW5kR2c3SUdrZ1BDQnNaVzQ3SUdrckt5a2dlMXh1SUNBZ0lHTnZibk4wSUhSdmEyVnVJRDBnZEc5clpXNXpXMmxkWEc1Y2JpQWdJQ0JwWmlBb2RHOXJaVzR1ZEhsd1pTQTlQVDBnSjI5d1pYSmhkRzl5SnlrZ2UxeHVJQ0FnSUNBZ2MzZHBkR05vSUNoMGIydGxiaTUyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0JqWVhObElDYzhKenBjYmlBZ0lDQWdJQ0FnSUNCemRHRjBaU0E5SUNkaFpHUnlaWE56SjF4dUlDQWdJQ0FnSUNBZ0lHSnlaV0ZyWEc0Z0lDQWdJQ0FnSUdOaGMyVWdKeWduT2x4dUlDQWdJQ0FnSUNBZ0lITjBZWFJsSUQwZ0oyTnZiVzFsYm5RblhHNGdJQ0FnSUNBZ0lDQWdZbkpsWVd0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0FuT2ljNlhHNGdJQ0FnSUNBZ0lDQWdjM1JoZEdVZ1BTQW5aM0p2ZFhBblhHNGdJQ0FnSUNBZ0lDQWdhWE5IY205MWNDQTlJSFJ5ZFdWY2JpQWdJQ0FnSUNBZ0lDQmljbVZoYTF4dUlDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lITjBZWFJsSUQwZ0ozUmxlSFFuWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHbG1JQ2gwYjJ0bGJpNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQmtZWFJoVzNOMFlYUmxYUzV3ZFhOb0tIUnZhMlZ1TG5aaGJIVmxLVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQzh2SUVsbUlIUm9aWEpsSUdseklHNXZJSFJsZUhRZ1luVjBJR0VnWTI5dGJXVnVkQ3dnY21Wd2JHRmpaU0IwYUdVZ2RIZHZYRzRnSUdsbUlDZ2haR0YwWVM1MFpYaDBMbXhsYm1kMGFDQW1KaUJrWVhSaExtTnZiVzFsYm5RdWJHVnVaM1JvS1NCN1hHNGdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzVqYjIxdFpXNTBYRzRnSUNBZ1pHRjBZUzVqYjIxdFpXNTBJRDBnVzExY2JpQWdmVnh1WEc0Z0lHbG1JQ2hwYzBkeWIzVndLU0I3WEc0Z0lDQWdMeThnYUhSMGNEb3ZMM1J2YjJ4ekxtbGxkR1l1YjNKbkwyaDBiV3d2Y21aak1qZ3lNaU5oY0hCbGJtUnBlQzFCTGpFdU0xeHVJQ0FnSUdSaGRHRXVkR1Y0ZENBOUlHUmhkR0V1ZEdWNGRDNXFiMmx1S0NjZ0p5bGNiaUFnSUNCaFpHUnlaWE56WlhNdWNIVnphQ2g3WEc0Z0lDQWdJQ0J1WVcxbE9pQmtZWFJoTG5SbGVIUWdmSHdnS0dGa1pISmxjM01nSmlZZ1lXUmtjbVZ6Y3k1dVlXMWxLU3hjYmlBZ0lDQWdJR2R5YjNWd09pQmtZWFJoTG1keWIzVndMbXhsYm1kMGFDQS9JSEJoY25ObEtHUmhkR0V1WjNKdmRYQXVhbTlwYmlnbkxDY3BLU0E2SUZ0ZFhHNGdJQ0FnZlNsY2JpQWdmU0JsYkhObElIdGNiaUFnSUNBdkx5QkpaaUJ1YnlCaFpHUnlaWE56SUhkaGN5Qm1iM1Z1WkN3Z2RISjVJSFJ2SUdSbGRHVmpkQ0J2Ym1VZ1puSnZiU0J5WldkMWJHRnlJSFJsZUhSY2JpQWdJQ0JwWmlBb0lXUmhkR0V1WVdSa2NtVnpjeTVzWlc1bmRHZ2dKaVlnWkdGMFlTNTBaWGgwTG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlHUmhkR0V1ZEdWNGRDNXNaVzVuZEdnZ0xTQXhPeUJwSUQ0OUlEQTdJR2t0TFNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWkdGMFlTNTBaWGgwVzJsZExtMWhkR05vS0M5ZVcxNUFYRnh6WFN0QVcxNUFYRnh6WFNza0x5a3BJSHRjYmlBZ0lDQWdJQ0FnSUNCa1lYUmhMbUZrWkhKbGMzTWdQU0JrWVhSaExuUmxlSFF1YzNCc2FXTmxLR2tzSURFcFhHNGdJQ0FnSUNBZ0lDQWdZbkpsWVd0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQjJZWElnWDNKbFoyVjRTR0Z1Wkd4bGNpQTlJR1oxYm1OMGFXOXVJQ2hoWkdSeVpYTnpLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2haR0YwWVM1aFpHUnlaWE56TG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHUmhkR0V1WVdSa2NtVnpjeUE5SUZ0aFpHUnlaWE56TG5SeWFXMG9LVjFjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlBblhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHRmtaSEpsYzNOY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQXZMeUJ6ZEdsc2JDQnVieUJoWkdSeVpYTnpYRzRnSUNBZ0lDQnBaaUFvSVdSaGRHRXVZV1JrY21WemN5NXNaVzVuZEdncElIdGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SUdSaGRHRXVkR1Y0ZEM1c1pXNW5kR2dnTFNBeE95QnBJRDQ5SURBN0lHa3RMU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHUmhkR0V1ZEdWNGRGdHBYU0E5SUdSaGRHRXVkR1Y0ZEZ0cFhTNXlaWEJzWVdObEtDOWNYSE1xWEZ4aVcxNUFYRnh6WFN0QVcxNUFYRnh6WFN0Y1hHSmNYSE1xTHl3Z1gzSmxaMlY0U0dGdVpHeGxjaWt1ZEhKcGJTZ3BYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHUmhkR0V1WVdSa2NtVnpjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyWEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdTV1lnZEdobGNtVW5jeUJ6ZEdsc2JDQnBjeUJ1YnlCMFpYaDBJR0oxZENCaElHTnZiVzFsYm5RZ1pYaHBlSFJ6TENCeVpYQnNZV05sSUhSb1pTQjBkMjljYmlBZ0lDQnBaaUFvSVdSaGRHRXVkR1Y0ZEM1c1pXNW5kR2dnSmlZZ1pHRjBZUzVqYjIxdFpXNTBMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNWpiMjF0Wlc1MFhHNGdJQ0FnSUNCa1lYUmhMbU52YlcxbGJuUWdQU0JiWFZ4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUV0bFpYQWdiMjVzZVNCMGFHVWdabWx5YzNRZ1lXUmtjbVZ6Y3lCdlkyTjFjbVZ1WTJVc0lIQjFjMmdnYjNSb1pYSnpJSFJ2SUhKbFozVnNZWElnZEdWNGRGeHVJQ0FnSUdsbUlDaGtZWFJoTG1Ga1pISmxjM011YkdWdVozUm9JRDRnTVNrZ2UxeHVJQ0FnSUNBZ1pHRjBZUzUwWlhoMElEMGdaR0YwWVM1MFpYaDBMbU52Ym1OaGRDaGtZWFJoTG1Ga1pISmxjM011YzNCc2FXTmxLREVwS1Z4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUVwdmFXNGdkbUZzZFdWeklIZHBkR2dnYzNCaFkyVnpYRzRnSUNBZ1pHRjBZUzUwWlhoMElEMGdaR0YwWVM1MFpYaDBMbXB2YVc0b0p5QW5LVnh1SUNBZ0lHUmhkR0V1WVdSa2NtVnpjeUE5SUdSaGRHRXVZV1JrY21WemN5NXFiMmx1S0NjZ0p5bGNibHh1SUNBZ0lHbG1JQ2doWkdGMFlTNWhaR1J5WlhOeklDWW1JR2x6UjNKdmRYQXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmJYVnh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCaFpHUnlaWE56SUQwZ2UxeHVJQ0FnSUNBZ0lDQmhaR1J5WlhOek9pQmtZWFJoTG1Ga1pISmxjM01nZkh3Z1pHRjBZUzUwWlhoMElIeDhJQ2NuTEZ4dUlDQWdJQ0FnSUNCdVlXMWxPaUJrWVhSaExuUmxlSFFnZkh3Z1pHRjBZUzVoWkdSeVpYTnpJSHg4SUNjblhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHbG1JQ2hoWkdSeVpYTnpMbUZrWkhKbGMzTWdQVDA5SUdGa1pISmxjM011Ym1GdFpTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb0tHRmtaSEpsYzNNdVlXUmtjbVZ6Y3lCOGZDQW5KeWt1YldGMFkyZ29MMEF2S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR0ZrWkhKbGMzTXVibUZ0WlNBOUlDY25YRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnWVdSa2NtVnpjeTVoWkdSeVpYTnpJRDBnSnlkY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQmhaR1J5WlhOelpYTXVjSFZ6YUNoaFpHUnlaWE56S1Z4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJoWkdSeVpYTnpaWE5jYm4wN1hHNWNiaThxWEc0Z0tpQlBjR1Z5WVhSdmNpQjBiMnRsYm5NZ1lXNWtJSGRvYVdOb0lIUnZhMlZ1Y3lCaGNtVWdaWGh3WldOMFpXUWdkRzhnWlc1a0lIUm9aU0J6WlhGMVpXNWpaVnh1SUNvdlhHNWpiMjV6ZENCUFVFVlNRVlJQVWxNZ1BTQjdYRzRnSUNkY0lpYzZJQ2RjSWljc1hHNGdJQ2NvSnpvZ0p5a25MRnh1SUNBblBDYzZJQ2MrSnl4Y2JpQWdKeXduT2lBbkp5eGNiaUFnTHk4Z1IzSnZkWEJ6SUdGeVpTQmxibVJsWkNCaWVTQnpaVzFwWTI5c2IyNXpYRzRnSUNjNkp6b2dKenNuTEZ4dUlDQXZMeUJUWlcxcFkyOXNiMjV6SUdGeVpTQnViM1FnWVNCc1pXZGhiQ0JrWld4cGJXbDBaWElnY0dWeUlIUm9aU0JTUmtNeU9ESXlJR2R5WVcxdFlYSWdiM1JvWlhKY2JpQWdMeThnZEdoaGJpQm1iM0lnZEdWeWJXbHVZWFJwYm1jZ1lTQm5jbTkxY0N3Z1luVjBJSFJvWlhrZ1lYSmxJR0ZzYzI4Z2JtOTBJSFpoYkdsa0lHWnZjaUJoYm5sY2JpQWdMeThnYjNSb1pYSWdkWE5sSUdsdUlIUm9hWE1nWTI5dWRHVjRkQzRnSUVkcGRtVnVJSFJvWVhRZ2MyOXRaU0J0WVdsc0lHTnNhV1Z1ZEhNZ2FHRjJaVnh1SUNBdkx5Qm9hWE4wYjNKcFkyRnNiSGtnWVd4c2IzZGxaQ0IwYUdVZ2MyVnRhV052Ykc5dUlHRnpJR0VnWkdWc2FXMXBkR1Z5SUdWeGRXbDJZV3hsYm5RZ2RHOGdkR2hsWEc0Z0lDOHZJR052YlcxaElHbHVJSFJvWldseUlGVkpMQ0JwZENCdFlXdGxjeUJ6Wlc1elpTQjBieUIwY21WaGRDQjBhR1Z0SUhSb1pTQnpZVzFsSUdGeklHRWdZMjl0YldGY2JpQWdMeThnZDJobGJpQjFjMlZrSUc5MWRITnBaR1VnYjJZZ1lTQm5jbTkxY0M1Y2JpQWdKenNuT2lBbkoxeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCVWIydGxibWw2WlhJZ2IySnFaV04wSUdadmNpQjBiMnRsYm1sNmFXNW5JR0ZrWkhKbGMzTWdabWxsYkdRZ2MzUnlhVzVuYzF4dUlDcGNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ29nUUhCaGNtRnRJSHRUZEhKcGJtZDlJSE4wY2lCQlpHUnlaWE56SUdacFpXeGtJSE4wY21sdVoxeHVJQ292WEc1amJHRnpjeUJVYjJ0bGJtbDZaWElnZTF4dUlDQmpiMjV6ZEhKMVkzUnZjaUFvYzNSeUtTQjdYRzRnSUNBZ2RHaHBjeTV6ZEhJZ1BTQW9jM1J5SUh4OElDY25LUzUwYjFOMGNtbHVaeWdwWEc0Z0lDQWdkR2hwY3k1dmNHVnlZWFJ2Y2tOMWNuSmxiblFnUFNBbkoxeHVJQ0FnSUhSb2FYTXViM0JsY21GMGIzSkZlSEJsWTNScGJtY2dQU0FuSjF4dUlDQWdJSFJvYVhNdWJtOWtaU0E5SUc1MWJHeGNiaUFnSUNCMGFHbHpMbVZ6WTJGd1pXUWdQU0JtWVd4elpWeHVJQ0FnSUhSb2FYTXViR2x6ZENBOUlGdGRYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVkc5clpXNXBlbVZ6SUhSb1pTQnZjbWxuYVc1aGJDQnBibkIxZENCemRISnBibWRjYmlBZ0lDcGNiaUFnSUNvZ1FISmxkSFZ5YmlCN1FYSnlZWGw5SUVGdUlHRnljbUY1SUc5bUlHOXdaWEpoZEc5eWZIUmxlSFFnZEc5clpXNXpYRzRnSUNBcUwxeHVJQ0IwYjJ0bGJtbDZaU0FvS1NCN1hHNGdJQ0FnYkdWMElHTm9jbHh1SUNBZ0lHeGxkQ0JzYVhOMElEMGdXMTFjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTUN3Z2JHVnVJRDBnZEdocGN5NXpkSEl1YkdWdVozUm9PeUJwSUR3Z2JHVnVPeUJwS3lzcElIdGNiaUFnSUNBZ0lHTm9jaUE5SUhSb2FYTXVjM1J5TG1Ob1lYSkJkQ2hwS1Z4dUlDQWdJQ0FnZEdocGN5NWphR1ZqYTBOb1lYSW9ZMmh5S1Z4dUlDQWdJSDFjYmx4dUlDQWdJSFJvYVhNdWJHbHpkQzVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2h1YjJSbEtTQjdYRzRnSUNBZ0lDQnViMlJsTG5aaGJIVmxJRDBnS0c1dlpHVXVkbUZzZFdVZ2ZId2dKeWNwTG5SdlUzUnlhVzVuS0NrdWRISnBiU2dwWEc0Z0lDQWdJQ0JwWmlBb2JtOWtaUzUyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0JzYVhOMExuQjFjMmdvYm05a1pTbGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUtWeHVYRzRnSUNBZ2NtVjBkWEp1SUd4cGMzUmNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYUdWamEzTWdhV1lnWVNCamFHRnlZV04wWlhJZ2FYTWdZVzRnYjNCbGNtRjBiM0lnYjNJZ2RHVjRkQ0JoYm1RZ1lXTjBjeUJoWTJOdmNtUnBibWRzZVZ4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxTjBjbWx1WjMwZ1kyaHlJRU5vWVhKaFkzUmxjaUJtY205dElIUm9aU0JoWkdSeVpYTnpJR1pwWld4a1hHNGdJQ0FxTDF4dUlDQmphR1ZqYTBOb1lYSWdLR05vY2lrZ2UxeHVJQ0FnSUdsbUlDZ29ZMmh5SUdsdUlFOVFSVkpCVkU5U1V5QjhmQ0JqYUhJZ1BUMDlJQ2RjWEZ4Y0p5a2dKaVlnZEdocGN5NWxjMk5oY0dWa0tTQjdYRzRnSUNBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCbVlXeHpaVnh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kR2hwY3k1dmNHVnlZWFJ2Y2tWNGNHVmpkR2x1WnlBbUppQmphSElnUFQwOUlIUm9hWE11YjNCbGNtRjBiM0pGZUhCbFkzUnBibWNwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVibTlrWlNBOUlIdGNiaUFnSUNBZ0lDQWdkSGx3WlRvZ0oyOXdaWEpoZEc5eUp5eGNiaUFnSUNBZ0lDQWdkbUZzZFdVNklHTm9jbHh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkR2hwY3k1c2FYTjBMbkIxYzJnb2RHaHBjeTV1YjJSbEtWeHVJQ0FnSUNBZ2RHaHBjeTV1YjJSbElEMGdiblZzYkZ4dUlDQWdJQ0FnZEdocGN5NXZjR1Z5WVhSdmNrVjRjR1ZqZEdsdVp5QTlJQ2NuWEc0Z0lDQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQm1ZV3h6WlZ4dUlDQWdJQ0FnY21WMGRYSnVYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDZ2hkR2hwY3k1dmNHVnlZWFJ2Y2tWNGNHVmpkR2x1WnlBbUppQmphSElnYVc0Z1QxQkZVa0ZVVDFKVEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG01dlpHVWdQU0I3WEc0Z0lDQWdJQ0FnSUhSNWNHVTZJQ2R2Y0dWeVlYUnZjaWNzWEc0Z0lDQWdJQ0FnSUhaaGJIVmxPaUJqYUhKY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhSb2FYTXViR2x6ZEM1d2RYTm9LSFJvYVhNdWJtOWtaU2xjYmlBZ0lDQWdJSFJvYVhNdWJtOWtaU0E5SUc1MWJHeGNiaUFnSUNBZ0lIUm9hWE11YjNCbGNtRjBiM0pGZUhCbFkzUnBibWNnUFNCUFVFVlNRVlJQVWxOYlkyaHlYVnh1SUNBZ0lDQWdkR2hwY3k1bGMyTmhjR1ZrSUQwZ1ptRnNjMlZjYmlBZ0lDQWdJSEpsZEhWeWJseHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDZ2hkR2hwY3k1bGMyTmhjR1ZrSUNZbUlHTm9jaUE5UFQwZ0oxeGNYRnduS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVZ6WTJGd1pXUWdQU0IwY25WbFhHNGdJQ0FnSUNCeVpYUjFjbTVjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvSVhSb2FYTXVibTlrWlNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV1YjJSbElEMGdlMXh1SUNBZ0lDQWdJQ0IwZVhCbE9pQW5kR1Y0ZENjc1hHNGdJQ0FnSUNBZ0lIWmhiSFZsT2lBbkoxeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVzYVhOMExuQjFjMmdvZEdocGN5NXViMlJsS1Z4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbVZ6WTJGd1pXUWdKaVlnWTJoeUlDRTlQU0FuWEZ4Y1hDY3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWJtOWtaUzUyWVd4MVpTQXJQU0FuWEZ4Y1hDZGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbTV2WkdVdWRtRnNkV1VnS3owZ1kyaHlYRzRnSUNBZ2RHaHBjeTVsYzJOaGNHVmtJRDBnWm1Gc2MyVmNiaUFnZlZ4dWZWeHVJbDE5IiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IHR5cGVvZiBkZXRlY3Rpb24gPT0gJ2Z1bmN0aW9uJyA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gSXRlcmF0b3JQcm90b3R5cGUgPT0gdW5kZWZpbmVkIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbmlmICgoIUlTX1BVUkUgfHwgTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHNjaGVkdWxlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHNjaGVkdWxlcihib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgaGFuZGxlciA9PSAnZnVuY3Rpb24nID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogaGFuZGxlciwgdGltZW91dCk7XG4gIH07XG59O1xuXG4vLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBNU0lFIH0sIHtcbiAgLy8gYHNldFRpbWVvdXRgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICAvLyBgc2V0SW50ZXJ2YWxgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09IE5BVElWRSA/IGZhbHNlXG4gICAgOiB0eXBlb2YgZGV0ZWN0aW9uID09ICdmdW5jdGlvbicgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjguMicsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgcmV0dXJuICFTdHJpbmcoU3ltYm9sKCkpO1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnRvU3RyaW5nO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKHR5cGVvZiBzdG9yZS5pbnNwZWN0U291cmNlICE9ICdmdW5jdGlvbicpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nLmNhbGwoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYFNwZWNpZXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNwZWNpZXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbnZhciBzZXQgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBwb3N0ID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgbG9jYXRpb24gJiYgbG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICAhZmFpbHMocG9zdClcbiAgKSB7XG4gICAgZGVmZXIgPSBwb3N0O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gLyhpcGhvbmV8aXBvZHxpcGFkKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGQVVMVCA9PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuYXRpdmVJdGVyYXRvci5jYWxsKHRoaXMpOyB9O1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvcik7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICByZWRlZmluZShJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxuaWYgKEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbmlmICghSVNfUFVSRSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpIHtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4geyB2YWx1ZTogaW5kZXgsIGRvbmU6IGZhbHNlIH07XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4geyB2YWx1ZTogdGFyZ2V0W2luZGV4XSwgZG9uZTogZmFsc2UgfTtcbiAgcmV0dXJuIHsgdmFsdWU6IFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGRvbmU6IGZhbHNlIH07XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3Rcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1k7XG52YXIgYXJyYXlQdXNoID0gW10ucHVzaDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBNQVhfVUlOVDMyID0gMHhGRkZGRkZGRjtcblxuLy8gQEBzcGxpdCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKFNQTElULCBuYXRpdmVTcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnLnNwbGl0KC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgICd0ZXN0Jy5zcGxpdCgvKD86KS8sIC0xKS5sZW5ndGggIT0gNCB8fFxuICAgICdhYicuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT0gMiB8fFxuICAgICcuJy5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGggIT0gNCB8fFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tYXNzZXJ0aW9uLWNhcHR1cmluZy1ncm91cCwgcmVnZXhwL25vLWVtcHR5LWdyb3VwIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgJy4nLnNwbGl0KC8oKSgpLykubGVuZ3RoID4gMSB8fFxuICAgICcnLnNwbGl0KC8uPy8pLmxlbmd0aFxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtzdHJpbmddO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltKTtcbiAgICAgIH1cbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weS5sYXN0SW5kZXg7XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoLmxlbmd0aCA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmcubGVuZ3RoKSBhcnJheVB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoID49IGxpbSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHkubGFzdEluZGV4ID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weS5sYXN0SW5kZXgrKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dC5sZW5ndGggPiBsaW0gPyBvdXRwdXQuc2xpY2UoMCwgbGltKSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnLnNwbGl0KHVuZGVmaW5lZCwgMCkubGVuZ3RoKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6IG5hdGl2ZVNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIGludGVybmFsU3BsaXQgPSBuYXRpdmVTcGxpdDtcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09IG5hdGl2ZVNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoVU5TVVBQT1JURURfWSA/ICdnJyA6ICd5Jyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhVTlNVUFBPUlRFRF9ZID8gJ14oPzonICsgcnguc291cmNlICsgJyknIDogcngsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBVTlNVUFBPUlRFRF9ZID8gMCA6IHE7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFVOU1VQUE9SVEVEX1kgPyBTLnNsaWNlKHEpIDogUyk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChVTlNVUFBPUlRFRF9ZID8gcSA6IDApKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0sIFVOU1VQUE9SVEVEX1kpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmxpbmtgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmxpbmtcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdsaW5rJykgfSwge1xuICBsaW5rOiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChpbnNwZWN0U291cmNlKFdlYWtNYXApKTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhcyh0YXJnZXQsIGtleSkpIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgfVxufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0KTtcbiAgICB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHNldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldDtcbiAgICBzZXR0ZXIuY2FsbCh0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlci5jYWxsKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IGNvZGVQb2ludEF0LCBhdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBTLmNoYXJDb2RlQXQocG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBTLmNoYXJDb2RlQXQocG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkcgPyBTLmNoYXJBdChwb3NpdGlvbikgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HID8gUy5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAyKSA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIvLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yLFxuLy8gc28gd2UgdXNlIGFuIGludGVybWVkaWF0ZSBmdW5jdGlvbi5cbmZ1bmN0aW9uIFJFKHMsIGYpIHtcbiAgcmV0dXJuIFJlZ0V4cChzLCBmKTtcbn1cblxuZXhwb3J0cy5VTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxuICB2YXIgcmUgPSBSRSgnYScsICd5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdhYmNkJykgIT0gbnVsbDtcbn0pO1xuXG5leHBvcnRzLkJST0tFTl9DQVJFVCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9IFJFKCdecicsICdneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnc3RyJykgIT0gbnVsbDtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgMSwgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIG1hdGNoZXIgPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBtYXRjaGVyICE9PSB1bmRlZmluZWQgPyBtYXRjaGVyLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcblxuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDaGVja2JveCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94JztcblxuY2xhc3MgQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihDaGVja2JveENvbXBvbmVudCwgJ0NoZWNrYm94Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IHsgaHRtbEVkaXRvckRlZmF1bHRDb25maWcsIGh0bWxFZGl0b3JMYW5nc01hcCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IEV2ZW50S2V5Q29kZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBIdG1sRWRpdG9yIHtcblx0ZWRpdG9yO1xuXHRibHVyVGltZXIgPSAwO1xuXG5cdF9fcmVzaXphYmxlID0gZmFsc2U7XG5cdF9faW5pdGVkID0gZmFsc2U7XG5cblx0b25CbHVyID0gbnVsbDtcblx0b25SZWFkeSA9IG51bGw7XG5cdG9uTW9kZUNoYW5nZSA9IG51bGw7XG5cblx0ZWxlbWVudDtcblx0JGVsZW1lbnQ7XG5cblx0cmVzaXplO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25CbHVyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlYWR5XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk1vZGVDaGFuZ2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9uQmx1ciA9IG51bGwsIG9uUmVhZHkgPSBudWxsLCBvbk1vZGVDaGFuZ2UgPSBudWxsKSB7XG5cdFx0dGhpcy5vbkJsdXIgPSBvbkJsdXI7XG5cdFx0dGhpcy5vblJlYWR5ID0gb25SZWFkeTtcblx0XHR0aGlzLm9uTW9kZUNoYW5nZSA9IG9uTW9kZUNoYW5nZTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cdFx0dGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7XG5cblx0XHR0aGlzLnJlc2l6ZSA9IF8udGhyb3R0bGUoXy5iaW5kKHRoaXMucmVzaXplRWRpdG9yLCB0aGlzKSwgMTAwKTtcblxuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cblx0cnVuT25CbHVyKCkge1xuXHRcdGlmICh0aGlzLm9uQmx1cikge1xuXHRcdFx0dGhpcy5vbkJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHRibHVyVHJpZ2dlcigpIHtcblx0XHRpZiAodGhpcy5vbkJsdXIpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpO1xuXHRcdFx0dGhpcy5ibHVyVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVuT25CbHVyKCk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTIwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRmb2N1c1RyaWdnZXIoKSB7XG5cdFx0aWYgKHRoaXMub25CbHVyKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0h0bWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdG9yID8gJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhckNhY2hlZFNpZ25hdHVyZSgpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCdpbnNlcnRTaWduYXR1cmUnLCB7XG5cdFx0XHRcdGNsZWFyQ2FjaGU6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlXG5cdCAqIEBwYXJhbSB7Ym9vbH0gaHRtbFxuXHQgKiBAcGFyYW0ge2Jvb2x9IGluc2VydEJlZm9yZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNldFNpZ25hdHVyZShzaWduYXR1cmUsIGh0bWwsIGluc2VydEJlZm9yZSA9IGZhbHNlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnaW5zZXJ0U2lnbmF0dXJlJywge1xuXHRcdFx0XHRpc0h0bWw6IGh0bWwsXG5cdFx0XHRcdGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuXHRcdFx0XHRzaWduYXR1cmU6IHNpZ25hdHVyZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y2hlY2tEaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0b3IgPyB0aGlzLmVkaXRvci5jaGVja0RpcnR5KCkgOiBmYWxzZTtcblx0fVxuXG5cdHJlc2V0RGlydHkoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5yZXNldERpcnR5KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBJc0h0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0RGF0YSh3cmFwSXNIdG1sID0gZmFsc2UpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSAmJiB0aGlzLmVkaXRvci5wbHVnaW5zLnBsYWluICYmIHRoaXMuZWRpdG9yLl9fcGxhaW4pIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLmVkaXRvci5fX3BsYWluLmdldFJhd0RhdGEoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB3cmFwSXNIdG1sXG5cdFx0XHRcdFx0XHQ/ICc8ZGl2IGRhdGEtaHRtbC1lZGl0b3ItZm9udC13cmFwcGVyPVwidHJ1ZVwiIHN0eWxlPVwiZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzcHg7XCI+JyArXG5cdFx0XHRcdFx0XHQgIHRoaXMuZWRpdG9yLmdldERhdGEoKSArXG5cdFx0XHRcdFx0XHQgICc8L2Rpdj4nXG5cdFx0XHRcdFx0XHQ6IHRoaXMuZWRpdG9yLmdldERhdGEoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcElzSHRtbCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXREYXRhV2l0aEh0bWxNYXJrKHdyYXBJc0h0bWwgPSBmYWxzZSkge1xuXHRcdHJldHVybiAodGhpcy5pc0h0bWwoKSA/ICc6SFRNTDonIDogJycpICsgdGhpcy5nZXREYXRhKHdyYXBJc0h0bWwpO1xuXHR9XG5cblx0bW9kZVRvZ2dsZShwbGFpbiwgcmVzaXplKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAocGxhaW4pIHtcblx0XHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0TW9kZSgnd3lzaXd5ZycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICgnd3lzaXd5ZycgPT09IHRoaXMuZWRpdG9yLm1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXRNb2RlKCdwbGFpbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRcdGlmIChyZXNpemUpIHtcblx0XHRcdFx0dGhpcy5yZXNpemUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sT3JQbGFpbih0ZXh0LCBmb2N1cykge1xuXHRcdGlmICgnOkhUTUw6JyA9PT0gdGV4dC5zdWJzdHIoMCwgNikpIHtcblx0XHRcdHRoaXMuc2V0SHRtbCh0ZXh0LnN1YnN0cig2KSwgZm9jdXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldFBsYWluKHRleHQsIGZvY3VzKTtcblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sKGh0bWwsIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKHRydWUpO1xuXG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC88cFtePl0qPjxcXC9wPi9naSwgJycpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKGh0bWwpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlcGxhY2VIdG1sKGZpbmQsIHJlcGxhY2VIdG1sKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQgJiYgJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHRoaXMuZWRpdG9yLmdldERhdGEoKS5yZXBsYWNlKGZpbmQsIHJlcGxhY2VIdG1sKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0c2V0UGxhaW4ocGxhaW4sIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKGZhbHNlKTtcblx0XHRcdGlmICgncGxhaW4nID09PSB0aGlzLmVkaXRvci5tb2RlICYmIHRoaXMuZWRpdG9yLnBsdWdpbnMucGxhaW4gJiYgdGhpcy5lZGl0b3IuX19wbGFpbikge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5fX3BsYWluLnNldFJhd0RhdGEocGxhaW4pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHBsYWluKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0aWYgKHRoaXMuZWxlbWVudCAmJiAhdGhpcy5lZGl0b3IpIHtcblx0XHRcdGNvbnN0IGluaXRGdW5jID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjb25maWcgPSBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyxcblx0XHRcdFx0XHRsYW5ndWFnZSA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZScpLFxuXHRcdFx0XHRcdGFsbG93U291cmNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWxsb3dIdG1sRWRpdG9yU291cmNlQnV0dG9uJyksXG5cdFx0XHRcdFx0Yml0aSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93SHRtbEVkaXRvckJpdGlCdXR0b25zJyk7XG5cblx0XHRcdFx0aWYgKChhbGxvd1NvdXJjZSB8fCAhYml0aSkgJiYgIWNvbmZpZy50b29sYmFyR3JvdXBzLl9fY2ZnSW5pdGVkKSB7XG5cdFx0XHRcdFx0Y29uZmlnLnRvb2xiYXJHcm91cHMuX19jZmdJbml0ZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKGFsbG93U291cmNlKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlQnV0dG9ucyA9IGNvbmZpZy5yZW1vdmVCdXR0b25zLnJlcGxhY2UoJyxTb3VyY2UnLCAnJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFiaXRpKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlUGx1Z2lucyArPSAoY29uZmlnLnJlbW92ZVBsdWdpbnMgPyAnLCcgOiAnJykgKyAnYmlkaSc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uZmlnLmVudGVyTW9kZSA9IHdpbmRvdy5DS0VESVRPUi5FTlRFUl9CUjtcblx0XHRcdFx0Y29uZmlnLnNoaWZ0RW50ZXJNb2RlID0gd2luZG93LkNLRURJVE9SLkVOVEVSX1A7XG5cblx0XHRcdFx0Y29uZmlnLmxhbmd1YWdlID0gaHRtbEVkaXRvckxhbmdzTWFwWyhsYW5ndWFnZSB8fCAnZW4nKS50b0xvd2VyQ2FzZSgpXSB8fCAnZW4nO1xuXHRcdFx0XHRpZiAod2luZG93LkNLRURJVE9SLmVudikge1xuXHRcdFx0XHRcdHdpbmRvdy5DS0VESVRPUi5lbnYuaXNDb21wYXRpYmxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZWRpdG9yID0gd2luZG93LkNLRURJVE9SLmFwcGVuZFRvKHRoaXMuZWxlbWVudCwgY29uZmlnKTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbigna2V5JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmRhdGEgJiYgRXZlbnRLZXlDb2RlLlRhYiA9PT0gZXZlbnQuZGF0YS5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdibHVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmx1clRyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ21vZGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ibHVyVHJpZ2dlcigpO1xuXHRcdFx0XHRcdGlmICh0aGlzLm9uTW9kZUNoYW5nZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vbk1vZGVDaGFuZ2UoJ3BsYWluJyAhPT0gdGhpcy5lZGl0b3IubW9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignZm9jdXMnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c1RyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKHdpbmRvdy5GaWxlUmVhZGVyKSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2Ryb3AnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGlmICgwIDwgZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuZ2V0RmlsZXNDb3VudCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGZpbGUgPSBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5nZXRGaWxlKDApO1xuXHRcdFx0XHRcdFx0XHRpZiAoZmlsZSAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5pZCAmJiBmaWxlLnR5cGUgJiYgZmlsZS50eXBlLm1hdGNoKC9eaW1hZ2UvaSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpZCA9IGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1hZ2VJZCA9IGBbaW1nPSR7aWR9XWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZWFkZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcblxuXHRcdFx0XHRcdFx0XHRcdHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVhZGVyLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlcGxhY2VIdG1sKGltYWdlSWQsIGA8aW1nIHNyYz1cIiR7cmVhZGVyLnJlc3VsdH1cIiAvPmApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvaHRtbCcsIGltYWdlSWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignaW5zdGFuY2VSZWFkeScsICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5lZGl0b3IucmVtb3ZlTWVudUl0ZW0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjdXQnKTtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjb3B5Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgncGFzdGUnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9fcmVzaXphYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLl9faW5pdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHRoaXMucmVzaXplKCk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5vblJlYWR5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uUmVhZHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHdpbmRvdy5DS0VESVRPUikge1xuXHRcdFx0XHRpbml0RnVuYygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93Ll9faW5pdEVkaXRvciA9IGluaXRGdW5jO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvY3VzKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXMoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRoYXNGb2N1cygpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiAhIXRoaXMuZWRpdG9yLmZvY3VzTWFuYWdlci5oYXNGb2N1cztcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRibHVyKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXNNYW5hZ2VyLmJsdXIodHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0cmVzaXplRWRpdG9yKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9fcmVzaXphYmxlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5yZXNpemUodGhpcy4kZWxlbWVudC53aWR0aCgpLCB0aGlzLiRlbGVtZW50LmlubmVySGVpZ2h0KCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHNldFJlYWRPbmx5KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXRSZWFkT25seSghIXZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRjbGVhcihmb2N1cykge1xuXHRcdHRoaXMuc2V0SHRtbCgnJywgZm9jdXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEh0bWxFZGl0b3IsIEh0bWxFZGl0b3IgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2VcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuXG5jb25zdCBPcGVudGlwID0gd2luZG93Lk9wZW50aXAgfHwge307XG5cbk9wZW50aXAuc3R5bGVzID0gT3BlbnRpcC5zdHlsZXMgfHwge307XG5cbk9wZW50aXAuc3R5bGVzLnJhaW5sb29wID0ge1xuXHQnZXh0ZW5kcyc6ICdzdGFuZGFyZCcsXG5cblx0J2ZpeGVkJzogdHJ1ZSxcblx0J3RhcmdldCc6IHRydWUsXG5cblx0J2RlbGF5JzogMC4yLFxuXHQnaGlkZURlbGF5JzogMCxcblxuXHQnaGlkZUVmZmVjdCc6ICdmYWRlJyxcblx0J2hpZGVFZmZlY3REdXJhdGlvbic6IDAuMixcblxuXHQnc2hvd0VmZmVjdCc6ICdmYWRlJyxcblx0J3Nob3dFZmZlY3REdXJhdGlvbic6IDAuMixcblxuXHQnc2hvd09uJzogJ21vdXNlb3ZlciBjbGljaycsXG5cdCdyZW1vdmVFbGVtZW50c09uSGlkZSc6IHRydWUsXG5cblx0J2JhY2tncm91bmQnOiAnI2ZmZicsXG5cdCdzaGFkb3cnOiBmYWxzZSxcblxuXHQnYm9yZGVyQ29sb3InOiAnIzk5OScsXG5cdCdib3JkZXJSYWRpdXMnOiAyLFxuXHQnYm9yZGVyV2lkdGgnOiAxXG59O1xuXG5PcGVudGlwLnN0eWxlcy5yYWlubG9vcFRpcCA9IHtcblx0J2V4dGVuZHMnOiAncmFpbmxvb3AnLFxuXHQnZGVsYXknOiAwLjQsXG5cdCdncm91cCc6ICdyYWlubG9vcFRpcHMnXG59O1xuXG5PcGVudGlwLnN0eWxlcy5yYWlubG9vcEVycm9yVGlwID0ge1xuXHQnZXh0ZW5kcyc6ICdyYWlubG9vcCcsXG5cdCdjbGFzc05hbWUnOiAncmFpbmxvb3BFcnJvclRpcCdcbn07XG5cbmV4cG9ydCB7IE9wZW50aXAsIE9wZW50aXAgYXMgZGVmYXVsdCB9O1xuIiwiLyohXG4gKiBQaWthZGF5XG4gKlxuICogQ29weXJpZ2h0IMKpIDIwMTQgRGF2aWQgQnVzaGVsbCB8IEJTRCAmIE1JVCBsaWNlbnNlIHwgaHR0cHM6Ly9naXRodWIuY29tL1Bpa2FkYXkvUGlrYWRheVxuICovXG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSlcbntcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgbW9tZW50O1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gQ29tbW9uSlMgbW9kdWxlXG4gICAgICAgIC8vIExvYWQgbW9tZW50LmpzIGFzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY3lcbiAgICAgICAgdHJ5IHsgbW9tZW50ID0gcmVxdWlyZSgnbW9tZW50Jyk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShtb21lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgICAgZGVmaW5lKGZ1bmN0aW9uIChyZXEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIExvYWQgbW9tZW50LmpzIGFzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY3lcbiAgICAgICAgICAgIHZhciBpZCA9ICdtb21lbnQnO1xuICAgICAgICAgICAgdHJ5IHsgbW9tZW50ID0gcmVxKGlkKTsgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KG1vbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuUGlrYWRheSA9IGZhY3Rvcnkocm9vdC5tb21lbnQpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKG1vbWVudClcbntcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBmZWF0dXJlIGRldGVjdGlvbiBhbmQgaGVscGVyIGZ1bmN0aW9uc1xuICAgICAqL1xuICAgIHZhciBoYXNNb21lbnQgPSB0eXBlb2YgbW9tZW50ID09PSAnZnVuY3Rpb24nLFxuXG4gICAgaGFzRXZlbnRMaXN0ZW5lcnMgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyLFxuXG4gICAgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsXG5cbiAgICBzdG8gPSB3aW5kb3cuc2V0VGltZW91dCxcblxuICAgIGFkZEV2ZW50ID0gZnVuY3Rpb24oZWwsIGUsIGNhbGxiYWNrLCBjYXB0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKGUsIGNhbGxiYWNrLCAhIWNhcHR1cmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwuYXR0YWNoRXZlbnQoJ29uJyArIGUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVFdmVudCA9IGZ1bmN0aW9uKGVsLCBlLCBjYWxsYmFjaywgY2FwdHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChoYXNFdmVudExpc3RlbmVycykge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLCBjYWxsYmFjaywgISFjYXB0dXJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsLmRldGFjaEV2ZW50KCdvbicgKyBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdHJpbSA9IGZ1bmN0aW9uKHN0cilcbiAgICB7XG4gICAgICAgIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywnJyk7XG4gICAgfSxcblxuICAgIGhhc0NsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgnICcgKyBlbC5jbGFzc05hbWUgKyAnICcpLmluZGV4T2YoJyAnICsgY24gKyAnICcpICE9PSAtMTtcbiAgICB9LFxuXG4gICAgYWRkQ2xhc3MgPSBmdW5jdGlvbihlbCwgY24pXG4gICAge1xuICAgICAgICBpZiAoIWhhc0NsYXNzKGVsLCBjbikpIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTmFtZSA9IChlbC5jbGFzc05hbWUgPT09ICcnKSA/IGNuIDogZWwuY2xhc3NOYW1lICsgJyAnICsgY247XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbihlbCwgY24pXG4gICAge1xuICAgICAgICBlbC5jbGFzc05hbWUgPSB0cmltKCgnICcgKyBlbC5jbGFzc05hbWUgKyAnICcpLnJlcGxhY2UoJyAnICsgY24gKyAnICcsICcgJykpO1xuICAgIH0sXG5cbiAgICBpc0FycmF5ID0gZnVuY3Rpb24ob2JqKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgvQXJyYXkvKS50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKTtcbiAgICB9LFxuXG4gICAgaXNEYXRlID0gZnVuY3Rpb24ob2JqKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgvRGF0ZS8pLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpICYmICFpc05hTihvYmouZ2V0VGltZSgpKTtcbiAgICB9LFxuXG4gICAgaXNXZWVrZW5kID0gZnVuY3Rpb24oZGF0ZSlcbiAgICB7XG4gICAgICAgIHZhciBkYXkgPSBkYXRlLmdldERheSgpO1xuICAgICAgICByZXR1cm4gZGF5ID09PSAwIHx8IGRheSA9PT0gNjtcbiAgICB9LFxuXG4gICAgaXNMZWFwWWVhciA9IGZ1bmN0aW9uKHllYXIpXG4gICAge1xuICAgICAgICAvLyBzb2x1dGlvbiBsaWZ0ZWQgZnJvbSBkYXRlLmpzIChNSVQgbGljZW5zZSk6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlanMvRGF0ZWpzXG4gICAgICAgIHJldHVybiAoKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDApO1xuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFszMSwgaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb250aF07XG4gICAgfSxcblxuICAgIHNldFRvU3RhcnRPZkRheSA9IGZ1bmN0aW9uKGRhdGUpXG4gICAge1xuICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSBkYXRlLnNldEhvdXJzKDAsMCwwLDApO1xuICAgIH0sXG5cbiAgICBjb21wYXJlRGF0ZXMgPSBmdW5jdGlvbihhLGIpXG4gICAge1xuICAgICAgICAvLyB3ZWFrIGRhdGUgY29tcGFyaXNvbiAodXNlIHNldFRvU3RhcnRPZkRheShkYXRlKSB0byBlbnN1cmUgY29ycmVjdCByZXN1bHQpXG4gICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XG4gICAgfSxcblxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKHRvLCBmcm9tLCBvdmVyd3JpdGUpXG4gICAge1xuICAgICAgICB2YXIgcHJvcCwgaGFzUHJvcDtcbiAgICAgICAgZm9yIChwcm9wIGluIGZyb20pIHtcbiAgICAgICAgICAgIGhhc1Byb3AgPSB0b1twcm9wXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGhhc1Byb3AgJiYgdHlwZW9mIGZyb21bcHJvcF0gPT09ICdvYmplY3QnICYmIGZyb21bcHJvcF0gIT09IG51bGwgJiYgZnJvbVtwcm9wXS5ub2RlTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGF0ZShmcm9tW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IG5ldyBEYXRlKGZyb21bcHJvcF0uZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5KGZyb21bcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gZnJvbVtwcm9wXS5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gZXh0ZW5kKHt9LCBmcm9tW3Byb3BdLCBvdmVyd3JpdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3ZlcndyaXRlIHx8ICFoYXNQcm9wKSB7XG4gICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9LFxuXG4gICAgZmlyZUV2ZW50ID0gZnVuY3Rpb24oZWwsIGV2ZW50TmFtZSwgZGF0YSlcbiAgICB7XG4gICAgICAgIHZhciBldjtcblxuICAgICAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICAgICAgICAgIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgICAgICAgICAgIGV2LmluaXRFdmVudChldmVudE5hbWUsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgIGV2ID0gZXh0ZW5kKGV2LCBkYXRhKTtcbiAgICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQoZXYpO1xuICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KSB7XG4gICAgICAgICAgICBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG4gICAgICAgICAgICBldiA9IGV4dGVuZChldiwgZGF0YSk7XG4gICAgICAgICAgICBlbC5maXJlRXZlbnQoJ29uJyArIGV2ZW50TmFtZSwgZXYpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFkanVzdENhbGVuZGFyID0gZnVuY3Rpb24oY2FsZW5kYXIpIHtcbiAgICAgICAgaWYgKGNhbGVuZGFyLm1vbnRoIDwgMCkge1xuICAgICAgICAgICAgY2FsZW5kYXIueWVhciAtPSBNYXRoLmNlaWwoTWF0aC5hYnMoY2FsZW5kYXIubW9udGgpLzEyKTtcbiAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRoICs9IDEyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxlbmRhci5tb250aCA+IDExKSB7XG4gICAgICAgICAgICBjYWxlbmRhci55ZWFyICs9IE1hdGguZmxvb3IoTWF0aC5hYnMoY2FsZW5kYXIubW9udGgpLzEyKTtcbiAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRoIC09IDEyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxlbmRhcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZGVmYXVsdHMgYW5kIGxvY2FsaXNhdGlvblxuICAgICAqL1xuICAgIGRlZmF1bHRzID0ge1xuXG4gICAgICAgIC8vIGJpbmQgdGhlIHBpY2tlciB0byBhIGZvcm0gZmllbGRcbiAgICAgICAgZmllbGQ6IG51bGwsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzaG93L2hpZGUgdGhlIHBpY2tlciBvbiBgZmllbGRgIGZvY3VzIChkZWZhdWx0IGB0cnVlYCBpZiBgZmllbGRgIGlzIHNldClcbiAgICAgICAgYm91bmQ6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBkYXRhLWF0dHJpYnV0ZSBvbiB0aGUgaW5wdXQgZmllbGQgd2l0aCBhbiBhcmlhIGFzc2lzdGFuY2UgdGV4dCAob25seSBhcHBsaWVkIHdoZW4gYGJvdW5kYCBpcyBzZXQpXG4gICAgICAgIGFyaWFMYWJlbDogJ1VzZSB0aGUgYXJyb3cga2V5cyB0byBwaWNrIGEgZGF0ZScsXG5cbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGRhdGVwaWNrZXIsIHJlbGF0aXZlIHRvIHRoZSBmaWVsZCAoZGVmYXVsdCB0byBib3R0b20gJiBsZWZ0KVxuICAgICAgICAvLyAoJ2JvdHRvbScgJiAnbGVmdCcga2V5d29yZHMgYXJlIG5vdCB1c2VkLCAndG9wJyAmICdyaWdodCcgYXJlIG1vZGlmaWVyIG9uIHRoZSBib3R0b20vbGVmdCBwb3NpdGlvbilcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20gbGVmdCcsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBmaXQgaW4gdGhlIHZpZXdwb3J0IGV2ZW4gaWYgaXQgbWVhbnMgcmVwb3NpdGlvbmluZyBmcm9tIHRoZSBwb3NpdGlvbiBvcHRpb25cbiAgICAgICAgcmVwb3NpdGlvbjogdHJ1ZSxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IGZvciBgLnRvU3RyaW5nKClgIGFuZCBgZmllbGRgIHZhbHVlXG4gICAgICAgIGZvcm1hdDogJ1lZWVktTU0tREQnLFxuXG4gICAgICAgIC8vIHRoZSB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZXRzIHBhc3NlZCBhIGN1cnJlbnQgZGF0ZSBvYmplY3QgYW5kIGZvcm1hdFxuICAgICAgICAvLyBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICAgICAgICB0b1N0cmluZzogbnVsbCxcblxuICAgICAgICAvLyB1c2VkIHRvIGNyZWF0ZSBkYXRlIG9iamVjdCBmcm9tIGN1cnJlbnQgaW5wdXQgc3RyaW5nXG4gICAgICAgIHBhcnNlOiBudWxsLFxuXG4gICAgICAgIC8vIHRoZSBpbml0aWFsIGRhdGUgdG8gdmlldyB3aGVuIGZpcnN0IG9wZW5lZFxuICAgICAgICBkZWZhdWx0RGF0ZTogbnVsbCxcblxuICAgICAgICAvLyBtYWtlIHRoZSBgZGVmYXVsdERhdGVgIHRoZSBpbml0aWFsIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgIHNldERlZmF1bHREYXRlOiBmYWxzZSxcblxuICAgICAgICAvLyBmaXJzdCBkYXkgb2Ygd2VlayAoMDogU3VuZGF5LCAxOiBNb25kYXkgZXRjKVxuICAgICAgICBmaXJzdERheTogMCxcblxuICAgICAgICAvLyBtaW5pbXVtIG51bWJlciBvZiBkYXlzIGluIHRoZSB3ZWVrIHRoYXQgZ2V0cyB3ZWVrIG51bWJlciBvbmVcbiAgICAgICAgLy8gZGVmYXVsdCBJU08gODYwMSwgd2VlayAwMSBpcyB0aGUgd2VlayB3aXRoIHRoZSBmaXJzdCBUaHVyc2RheSAoNClcbiAgICAgICAgZmlyc3RXZWVrT2ZZZWFyTWluRGF5czogNCxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBmbGFnIGZvciBtb21lbnQncyBzdHJpY3QgZGF0ZSBwYXJzaW5nXG4gICAgICAgIGZvcm1hdFN0cmljdDogZmFsc2UsXG5cbiAgICAgICAgLy8gdGhlIG1pbmltdW0vZWFybGllc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtaW5EYXRlOiBudWxsLFxuICAgICAgICAvLyB0aGUgbWF4aW11bS9sYXRlc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtYXhEYXRlOiBudWxsLFxuXG4gICAgICAgIC8vIG51bWJlciBvZiB5ZWFycyBlaXRoZXIgc2lkZSwgb3IgYXJyYXkgb2YgdXBwZXIvbG93ZXIgcmFuZ2VcbiAgICAgICAgeWVhclJhbmdlOiAxMCxcblxuICAgICAgICAvLyBzaG93IHdlZWsgbnVtYmVycyBhdCBoZWFkIG9mIHJvd1xuICAgICAgICBzaG93V2Vla051bWJlcjogZmFsc2UsXG5cbiAgICAgICAgLy8gV2VlayBwaWNrZXIgbW9kZVxuICAgICAgICBwaWNrV2hvbGVXZWVrOiBmYWxzZSxcblxuICAgICAgICAvLyB1c2VkIGludGVybmFsbHkgKGRvbid0IGNvbmZpZyBvdXRzaWRlKVxuICAgICAgICBtaW5ZZWFyOiAwLFxuICAgICAgICBtYXhZZWFyOiA5OTk5LFxuICAgICAgICBtaW5Nb250aDogdW5kZWZpbmVkLFxuICAgICAgICBtYXhNb250aDogdW5kZWZpbmVkLFxuXG4gICAgICAgIHN0YXJ0UmFuZ2U6IG51bGwsXG4gICAgICAgIGVuZFJhbmdlOiBudWxsLFxuXG4gICAgICAgIGlzUlRMOiBmYWxzZSxcblxuICAgICAgICAvLyBBZGRpdGlvbmFsIHRleHQgdG8gYXBwZW5kIHRvIHRoZSB5ZWFyIGluIHRoZSBjYWxlbmRhciB0aXRsZVxuICAgICAgICB5ZWFyU3VmZml4OiAnJyxcblxuICAgICAgICAvLyBSZW5kZXIgdGhlIG1vbnRoIGFmdGVyIHllYXIgaW4gdGhlIGNhbGVuZGFyIHRpdGxlXG4gICAgICAgIHNob3dNb250aEFmdGVyWWVhcjogZmFsc2UsXG5cbiAgICAgICAgLy8gUmVuZGVyIGRheXMgb2YgdGhlIGNhbGVuZGFyIGdyaWQgdGhhdCBmYWxsIGluIHRoZSBuZXh0IG9yIHByZXZpb3VzIG1vbnRoXG4gICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIEFsbG93cyB1c2VyIHRvIHNlbGVjdCBkYXlzIHRoYXQgZmFsbCBpbiB0aGUgbmV4dCBvciBwcmV2aW91cyBtb250aFxuICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIGhvdyBtYW55IG1vbnRocyBhcmUgdmlzaWJsZVxuICAgICAgICBudW1iZXJPZk1vbnRoczogMSxcblxuICAgICAgICAvLyB3aGVuIG51bWJlck9mTW9udGhzIGlzIHVzZWQsIHRoaXMgd2lsbCBoZWxwIHlvdSB0byBjaG9vc2Ugd2hlcmUgdGhlIG1haW4gY2FsZW5kYXIgd2lsbCBiZSAoZGVmYXVsdCBgbGVmdGAsIGNhbiBiZSBzZXQgdG8gYHJpZ2h0YClcbiAgICAgICAgLy8gb25seSB1c2VkIGZvciB0aGUgZmlyc3QgZGlzcGxheSBvciB3aGVuIGEgc2VsZWN0ZWQgZGF0ZSBpcyBub3QgdmlzaWJsZVxuICAgICAgICBtYWluQ2FsZW5kYXI6ICdsZWZ0JyxcblxuICAgICAgICAvLyBTcGVjaWZ5IGEgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBjYWxlbmRhciBpblxuICAgICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBCbHVyIGZpZWxkIHdoZW4gZGF0ZSBpcyBzZWxlY3RlZFxuICAgICAgICBibHVyRmllbGRPblNlbGVjdCA6IHRydWUsXG5cbiAgICAgICAgLy8gaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgcHJldmlvdXNNb250aCA6ICdQcmV2aW91cyBNb250aCcsXG4gICAgICAgICAgICBuZXh0TW9udGggICAgIDogJ05leHQgTW9udGgnLFxuICAgICAgICAgICAgbW9udGhzICAgICAgICA6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcbiAgICAgICAgICAgIHdlZWtkYXlzICAgICAgOiBbJ1N1bmRheScsJ01vbmRheScsJ1R1ZXNkYXknLCdXZWRuZXNkYXknLCdUaHVyc2RheScsJ0ZyaWRheScsJ1NhdHVyZGF5J10sXG4gICAgICAgICAgICB3ZWVrZGF5c1Nob3J0IDogWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRoZW1lIENsYXNzbmFtZVxuICAgICAgICB0aGVtZTogbnVsbCxcblxuICAgICAgICAvLyBldmVudHMgYXJyYXlcbiAgICAgICAgZXZlbnRzOiBbXSxcblxuICAgICAgICAvLyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBvblNlbGVjdDogbnVsbCxcbiAgICAgICAgb25PcGVuOiBudWxsLFxuICAgICAgICBvbkNsb3NlOiBudWxsLFxuICAgICAgICBvbkRyYXc6IG51bGwsXG5cbiAgICAgICAgLy8gRW5hYmxlIGtleWJvYXJkIGlucHV0XG4gICAgICAgIGtleWJvYXJkSW5wdXQ6IHRydWVcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiB0ZW1wbGF0aW5nIGZ1bmN0aW9ucyB0byBhYnN0cmFjdCBIVE1MIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHJlbmRlckRheU5hbWUgPSBmdW5jdGlvbihvcHRzLCBkYXksIGFiYnIpXG4gICAge1xuICAgICAgICBkYXkgKz0gb3B0cy5maXJzdERheTtcbiAgICAgICAgd2hpbGUgKGRheSA+PSA3KSB7XG4gICAgICAgICAgICBkYXkgLT0gNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJiciA/IG9wdHMuaTE4bi53ZWVrZGF5c1Nob3J0W2RheV0gOiBvcHRzLmkxOG4ud2Vla2RheXNbZGF5XTtcbiAgICB9LFxuXG4gICAgcmVuZGVyRGF5ID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgICAgdmFyIGFyaWFTZWxlY3RlZCA9ICdmYWxzZSc7XG4gICAgICAgIGlmIChvcHRzLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCgnaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoJyk7XG5cbiAgICAgICAgICAgICAgICBpZighb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXNlbGVjdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cImlzLWVtcHR5XCI+PC90ZD4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzVG9kYXkpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy10b2RheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgYXJpYVNlbGVjdGVkID0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmhhc0V2ZW50KSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaGFzLWV2ZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuaXNJblJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtaW5yYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU3RhcnRSYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXN0YXJ0cmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc0VuZFJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtZW5kcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0ZCBkYXRhLWRheT1cIicgKyBvcHRzLmRheSArICdcIiBjbGFzcz1cIicgKyBhcnIuam9pbignICcpICsgJ1wiIGFyaWEtc2VsZWN0ZWQ9XCInICsgYXJpYVNlbGVjdGVkICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtYnV0dG9uIHBpa2EtZGF5XCIgdHlwZT1cImJ1dHRvblwiICcgK1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1waWthLXllYXI9XCInICsgb3B0cy55ZWFyICsgJ1wiIGRhdGEtcGlrYS1tb250aD1cIicgKyBvcHRzLm1vbnRoICsgJ1wiIGRhdGEtcGlrYS1kYXk9XCInICsgb3B0cy5kYXkgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmRheSArXG4gICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICc8L3RkPic7XG4gICAgfSxcblxuICAgIGlzb1dlZWsgPSBmdW5jdGlvbihkYXRlLCBmaXJzdFdlZWtPZlllYXJNaW5EYXlzKSB7XG4gICAgICAgIC8vIEVuc3VyZSB3ZSdyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRheS5cbiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcblxuICAgICAgICAvLyBUaHVyc2RheSBpbiBjdXJyZW50IHdlZWsgZGVjaWRlcyB0aGUgeWVhciBiZWNhdXNlIEphbnVhcnkgNHRoXG4gICAgICAgIC8vIGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayBhY2NvcmRpbmcgdG8gSVNPODYwMS5cbiAgICAgICAgdmFyIHllYXJEYXkgICAgICAgID0gZGF0ZS5nZXREYXRlKCksXG4gICAgICAgICAgICB3ZWVrRGF5ICAgICAgICA9IGRhdGUuZ2V0RGF5KCksXG4gICAgICAgICAgICBkYXlJbkZpcnN0V2VlayA9IGZpcnN0V2Vla09mWWVhck1pbkRheXMsXG4gICAgICAgICAgICBkYXlTaGlmdCAgICAgICA9IGRheUluRmlyc3RXZWVrIC0gMSwgLy8gY291bnRpbmcgc3RhcnRzIGF0IDBcbiAgICAgICAgICAgIGRheXNQZXJXZWVrICAgID0gNyxcbiAgICAgICAgICAgIHByZXZXZWVrRGF5ICAgID0gZnVuY3Rpb24oZGF5KSB7IHJldHVybiAoZGF5ICsgZGF5c1BlcldlZWsgLSAxKSAlIGRheXNQZXJXZWVrOyB9O1xuXG4gICAgICAgIC8vIEFkanVzdCB0byBUaHVyc2RheSBpbiB3ZWVrIDEgYW5kIGNvdW50IG51bWJlciBvZiB3ZWVrcyBmcm9tIGRhdGUgdG8gd2VlayAxLlxuICAgICAgICBkYXRlLnNldERhdGUoeWVhckRheSArIGRheVNoaWZ0IC0gcHJldldlZWtEYXkod2Vla0RheSkpO1xuXG4gICAgICAgIHZhciBqYW40dGggICAgICA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgZGF5SW5GaXJzdFdlZWspLFxuICAgICAgICAgICAgbXNQZXJEYXkgICAgPSAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgICAgICAgICAgZGF5c0JldHdlZW4gPSAoZGF0ZS5nZXRUaW1lKCkgLSBqYW40dGguZ2V0VGltZSgpKSAvIG1zUGVyRGF5LFxuICAgICAgICAgICAgd2Vla051bSAgICAgPSAxICsgTWF0aC5yb3VuZCgoZGF5c0JldHdlZW4gLSBkYXlTaGlmdCArIHByZXZXZWVrRGF5KGphbjR0aC5nZXREYXkoKSkpIC8gZGF5c1BlcldlZWspO1xuXG4gICAgICAgIHJldHVybiB3ZWVrTnVtO1xuICAgIH0sXG5cbiAgICByZW5kZXJXZWVrID0gZnVuY3Rpb24gKGQsIG0sIHksIGZpcnN0V2Vla09mWWVhck1pbkRheXMpIHtcbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkKSxcbiAgICAgICAgICAgIHdlZWsgPSBoYXNNb21lbnQgPyBtb21lbnQoZGF0ZSkuaXNvV2VlaygpIDogaXNvV2VlayhkYXRlLCBmaXJzdFdlZWtPZlllYXJNaW5EYXlzKTtcblxuICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cInBpa2Etd2Vla1wiPicgKyB3ZWVrICsgJzwvdGQ+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyUm93ID0gZnVuY3Rpb24oZGF5cywgaXNSVEwsIHBpY2tXaG9sZVdlZWssIGlzUm93U2VsZWN0ZWQpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0ciBjbGFzcz1cInBpa2Etcm93JyArIChwaWNrV2hvbGVXZWVrID8gJyBwaWNrLXdob2xlLXdlZWsnIDogJycpICsgKGlzUm93U2VsZWN0ZWQgPyAnIGlzLXNlbGVjdGVkJyA6ICcnKSArICdcIj4nICsgKGlzUlRMID8gZGF5cy5yZXZlcnNlKCkgOiBkYXlzKS5qb2luKCcnKSArICc8L3RyPic7XG4gICAgfSxcblxuICAgIHJlbmRlckJvZHkgPSBmdW5jdGlvbihyb3dzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICc8dGJvZHk+JyArIHJvd3Muam9pbignJykgKyAnPC90Ym9keT4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJIZWFkID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBpLCBhcnIgPSBbXTtcbiAgICAgICAgaWYgKG9wdHMuc2hvd1dlZWtOdW1iZXIpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8dGg+PC90aD4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnPHRoIHNjb3BlPVwiY29sXCI+PGFiYnIgdGl0bGU9XCInICsgcmVuZGVyRGF5TmFtZShvcHRzLCBpKSArICdcIj4nICsgcmVuZGVyRGF5TmFtZShvcHRzLCBpLCB0cnVlKSArICc8L2FiYnI+PC90aD4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0aGVhZD48dHI+JyArIChvcHRzLmlzUlRMID8gYXJyLnJldmVyc2UoKSA6IGFycikuam9pbignJykgKyAnPC90cj48L3RoZWFkPic7XG4gICAgfSxcblxuICAgIHJlbmRlclRpdGxlID0gZnVuY3Rpb24oaW5zdGFuY2UsIGMsIHllYXIsIG1vbnRoLCByZWZZZWFyLCByYW5kSWQpXG4gICAge1xuICAgICAgICB2YXIgaSwgaiwgYXJyLFxuICAgICAgICAgICAgb3B0cyA9IGluc3RhbmNlLl9vLFxuICAgICAgICAgICAgaXNNaW5ZZWFyID0geWVhciA9PT0gb3B0cy5taW5ZZWFyLFxuICAgICAgICAgICAgaXNNYXhZZWFyID0geWVhciA9PT0gb3B0cy5tYXhZZWFyLFxuICAgICAgICAgICAgaHRtbCA9ICc8ZGl2IGlkPVwiJyArIHJhbmRJZCArICdcIiBjbGFzcz1cInBpa2EtdGl0bGVcIiByb2xlPVwiaGVhZGluZ1wiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPicsXG4gICAgICAgICAgICBtb250aEh0bWwsXG4gICAgICAgICAgICB5ZWFySHRtbCxcbiAgICAgICAgICAgIHByZXYgPSB0cnVlLFxuICAgICAgICAgICAgbmV4dCA9IHRydWU7XG5cbiAgICAgICAgZm9yIChhcnIgPSBbXSwgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnPG9wdGlvbiB2YWx1ZT1cIicgKyAoeWVhciA9PT0gcmVmWWVhciA/IGkgLSBjIDogMTIgKyBpIC0gYykgKyAnXCInICtcbiAgICAgICAgICAgICAgICAoaSA9PT0gbW9udGggPyAnIHNlbGVjdGVkPVwic2VsZWN0ZWRcIic6ICcnKSArXG4gICAgICAgICAgICAgICAgKChpc01pblllYXIgJiYgaSA8IG9wdHMubWluTW9udGgpIHx8IChpc01heFllYXIgJiYgaSA+IG9wdHMubWF4TW9udGgpID8gJyBkaXNhYmxlZD1cImRpc2FibGVkXCInIDogJycpICsgJz4nICtcbiAgICAgICAgICAgICAgICBvcHRzLmkxOG4ubW9udGhzW2ldICsgJzwvb3B0aW9uPicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbW9udGhIdG1sID0gJzxkaXYgY2xhc3M9XCJwaWthLWxhYmVsXCI+JyArIG9wdHMuaTE4bi5tb250aHNbbW9udGhdICsgJzxzZWxlY3QgY2xhc3M9XCJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC1tb250aFwiIHRhYmluZGV4PVwiLTFcIj4nICsgYXJyLmpvaW4oJycpICsgJzwvc2VsZWN0PjwvZGl2Pic7XG5cbiAgICAgICAgaWYgKGlzQXJyYXkob3B0cy55ZWFyUmFuZ2UpKSB7XG4gICAgICAgICAgICBpID0gb3B0cy55ZWFyUmFuZ2VbMF07XG4gICAgICAgICAgICBqID0gb3B0cy55ZWFyUmFuZ2VbMV0gKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaSA9IHllYXIgLSBvcHRzLnllYXJSYW5nZTtcbiAgICAgICAgICAgIGogPSAxICsgeWVhciArIG9wdHMueWVhclJhbmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChhcnIgPSBbXTsgaSA8IGogJiYgaSA8PSBvcHRzLm1heFllYXI7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPj0gb3B0cy5taW5ZZWFyKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIicgKyAoaSA9PT0geWVhciA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJzogJycpICsgJz4nICsgKGkpICsgJzwvb3B0aW9uPicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHllYXJIdG1sID0gJzxkaXYgY2xhc3M9XCJwaWthLWxhYmVsXCI+JyArIHllYXIgKyBvcHRzLnllYXJTdWZmaXggKyAnPHNlbGVjdCBjbGFzcz1cInBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LXllYXJcIiB0YWJpbmRleD1cIi0xXCI+JyArIGFyci5qb2luKCcnKSArICc8L3NlbGVjdD48L2Rpdj4nO1xuXG4gICAgICAgIGlmIChvcHRzLnNob3dNb250aEFmdGVyWWVhcikge1xuICAgICAgICAgICAgaHRtbCArPSB5ZWFySHRtbCArIG1vbnRoSHRtbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh0bWwgKz0gbW9udGhIdG1sICsgeWVhckh0bWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNaW5ZZWFyICYmIChtb250aCA9PT0gMCB8fCBvcHRzLm1pbk1vbnRoID49IG1vbnRoKSkge1xuICAgICAgICAgICAgcHJldiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTWF4WWVhciAmJiAobW9udGggPT09IDExIHx8IG9wdHMubWF4TW9udGggPD0gbW9udGgpKSB7XG4gICAgICAgICAgICBuZXh0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA9PT0gMCkge1xuICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtcHJldicgKyAocHJldiA/ICcnIDogJyBpcy1kaXNhYmxlZCcpICsgJ1wiIHR5cGU9XCJidXR0b25cIj4nICsgb3B0cy5pMThuLnByZXZpb3VzTW9udGggKyAnPC9idXR0b24+JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gKGluc3RhbmNlLl9vLm51bWJlck9mTW9udGhzIC0gMSkgKSB7XG4gICAgICAgICAgICBodG1sICs9ICc8YnV0dG9uIGNsYXNzPVwicGlrYS1uZXh0JyArIChuZXh0ID8gJycgOiAnIGlzLWRpc2FibGVkJykgKyAnXCIgdHlwZT1cImJ1dHRvblwiPicgKyBvcHRzLmkxOG4ubmV4dE1vbnRoICsgJzwvYnV0dG9uPic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaHRtbCArPSAnPC9kaXY+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyVGFibGUgPSBmdW5jdGlvbihvcHRzLCBkYXRhLCByYW5kSWQpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0YWJsZSBjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBjbGFzcz1cInBpa2EtdGFibGVcIiByb2xlPVwiZ3JpZFwiIGFyaWEtbGFiZWxsZWRieT1cIicgKyByYW5kSWQgKyAnXCI+JyArIHJlbmRlckhlYWQob3B0cykgKyByZW5kZXJCb2R5KGRhdGEpICsgJzwvdGFibGU+JztcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBQaWthZGF5IGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgUGlrYWRheSA9IGZ1bmN0aW9uKG9wdGlvbnMpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgICAgICBvcHRzID0gc2VsZi5jb25maWcob3B0aW9ucyk7XG5cbiAgICAgICAgc2VsZi5fb25Nb3VzZURvd24gPSBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuX3YpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaGFzQ2xhc3ModGFyZ2V0LCAnaXMtZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLWJ1dHRvbicpICYmICFoYXNDbGFzcyh0YXJnZXQsICdpcy1lbXB0eScpICYmICFoYXNDbGFzcyh0YXJnZXQucGFyZW50Tm9kZSwgJ2lzLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKG5ldyBEYXRlKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGlrYS15ZWFyJyksIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGlrYS1tb250aCcpLCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EtZGF5JykpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0byhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5ibHVyRmllbGRPblNlbGVjdCAmJiBvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZmllbGQuYmx1cigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1wcmV2JykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmV2TW9udGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1uZXh0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXh0TW9udGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIHRvdWNoIGV2ZW50IHByZXZlbnQgbW91c2UgZXZlbnRzIGVtdWxhdGlvblxuICAgICAgICAgICAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuX2MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uQ2hhbmdlID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0LW1vbnRoJykpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdvdG9Nb250aCh0YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1zZWxlY3QteWVhcicpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5nb3RvWWVhcih0YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uS2V5Q2hhbmdlID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuXG4gICAgICAgICAgICBpZiAoc2VsZi5pc1Zpc2libGUoKSkge1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoKGUua2V5Q29kZSl7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZmllbGQuYmx1cigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ3N1YnRyYWN0JywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnc3VidHJhY3QnLCA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdhZGQnLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdhZGQnLCA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fcGFyc2VGaWVsZFZhbHVlID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAob3B0cy5wYXJzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRzLnBhcnNlKG9wdHMuZmllbGQudmFsdWUsIG9wdHMuZm9ybWF0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzTW9tZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQsIG9wdHMuZm9ybWF0U3RyaWN0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGRhdGUgJiYgZGF0ZS5pc1ZhbGlkKCkpID8gZGF0ZS50b0RhdGUoKSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKG9wdHMuZmllbGQudmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Q2hhbmdlID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGU7XG5cbiAgICAgICAgICAgIGlmIChlLmZpcmVkQnkgPT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRlID0gc2VsZi5fcGFyc2VGaWVsZFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5fdikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgc2VsZi5zaG93KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENsaWNrID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBzZWxmLnNob3coKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Qmx1ciA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSUUgYWxsb3dzIHBpa2EgZGl2IHRvIGdhaW4gZm9jdXM7IGNhdGNoIGJsdXIgdGhlIGlucHV0IGZpZWxkXG4gICAgICAgICAgICB2YXIgcEVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3MocEVsLCAncGlrYS1zaW5nbGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKChwRWwgPSBwRWwucGFyZW50Tm9kZSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNlbGYuX2MpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9iID0gc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9jID0gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgcEVsID0gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc0V2ZW50TGlzdGVuZXJzICYmIGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5vbmNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsICdyZXR1cm47Jyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHRhcmdldCwgJ2NoYW5nZScsIHNlbGYuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHBFbCwgJ3Bpa2Etc2luZ2xlJykgfHwgcEVsID09PSBvcHRzLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICgocEVsID0gcEVsLnBhcmVudE5vZGUpKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl92ICYmIHRhcmdldCAhPT0gb3B0cy50cmlnZ2VyICYmIHBFbCAhPT0gb3B0cy50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxmLmVsLmNsYXNzTmFtZSA9ICdwaWthLXNpbmdsZScgKyAob3B0cy5pc1JUTCA/ICcgaXMtcnRsJyA6ICcnKSArIChvcHRzLnRoZW1lID8gJyAnICsgb3B0cy50aGVtZSA6ICcnKTtcblxuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAnbW91c2Vkb3duJywgc2VsZi5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAndG91Y2hlbmQnLCBzZWxmLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgIGFkZEV2ZW50KHNlbGYuZWwsICdjaGFuZ2UnLCBzZWxmLl9vbkNoYW5nZSk7XG5cbiAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJywgc2VsZi5fb25LZXlDaGFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIG9wdHMuY29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxmLmVsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmVsLCBvcHRzLmZpZWxkLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCBzZWxmLl9vbklucHV0Q2hhbmdlKTtcblxuICAgICAgICAgICAgaWYgKCFvcHRzLmRlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5kZWZhdWx0RGF0ZSA9IHNlbGYuX3BhcnNlRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIG9wdHMuc2V0RGVmYXVsdERhdGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlZkRhdGUgPSBvcHRzLmRlZmF1bHREYXRlO1xuXG4gICAgICAgIGlmIChpc0RhdGUoZGVmRGF0ZSkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNldERlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKGRlZkRhdGUsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdvdG9EYXRlKGRlZkRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5nb3RvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHNlbGYuZWwuY2xhc3NOYW1lICs9ICcgaXMtYm91bmQnO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnY2xpY2snLCBzZWxmLl9vbklucHV0Q2xpY2spO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnZm9jdXMnLCBzZWxmLl9vbklucHV0Rm9jdXMpO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnYmx1cicsIHNlbGYuX29uSW5wdXRCbHVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgICB9XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogcHVibGljIFBpa2FkYXkgQVBJXG4gICAgICovXG4gICAgUGlrYWRheS5wcm90b3R5cGUgPSB7XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogY29uZmlndXJlIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICovXG4gICAgICAgIGNvbmZpZzogZnVuY3Rpb24ob3B0aW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9vKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3B0cyA9IGV4dGVuZCh0aGlzLl9vLCBvcHRpb25zLCB0cnVlKTtcblxuICAgICAgICAgICAgb3B0cy5pc1JUTCA9ICEhb3B0cy5pc1JUTDtcblxuICAgICAgICAgICAgb3B0cy5maWVsZCA9IChvcHRzLmZpZWxkICYmIG9wdHMuZmllbGQubm9kZU5hbWUpID8gb3B0cy5maWVsZCA6IG51bGw7XG5cbiAgICAgICAgICAgIG9wdHMudGhlbWUgPSAodHlwZW9mIG9wdHMudGhlbWUpID09PSAnc3RyaW5nJyAmJiBvcHRzLnRoZW1lID8gb3B0cy50aGVtZSA6IG51bGw7XG5cbiAgICAgICAgICAgIG9wdHMuYm91bmQgPSAhIShvcHRzLmJvdW5kICE9PSB1bmRlZmluZWQgPyBvcHRzLmZpZWxkICYmIG9wdHMuYm91bmQgOiBvcHRzLmZpZWxkKTtcblxuICAgICAgICAgICAgb3B0cy50cmlnZ2VyID0gKG9wdHMudHJpZ2dlciAmJiBvcHRzLnRyaWdnZXIubm9kZU5hbWUpID8gb3B0cy50cmlnZ2VyIDogb3B0cy5maWVsZDtcblxuICAgICAgICAgICAgb3B0cy5kaXNhYmxlV2Vla2VuZHMgPSAhIW9wdHMuZGlzYWJsZVdlZWtlbmRzO1xuXG4gICAgICAgICAgICBvcHRzLmRpc2FibGVEYXlGbiA9ICh0eXBlb2Ygb3B0cy5kaXNhYmxlRGF5Rm4pID09PSAnZnVuY3Rpb24nID8gb3B0cy5kaXNhYmxlRGF5Rm4gOiBudWxsO1xuXG4gICAgICAgICAgICB2YXIgbm9tID0gcGFyc2VJbnQob3B0cy5udW1iZXJPZk1vbnRocywgMTApIHx8IDE7XG4gICAgICAgICAgICBvcHRzLm51bWJlck9mTW9udGhzID0gbm9tID4gNCA/IDQgOiBub207XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRlKG9wdHMubWluRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1pbkRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNEYXRlKG9wdHMubWF4RGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1heERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgob3B0cy5taW5EYXRlICYmIG9wdHMubWF4RGF0ZSkgJiYgb3B0cy5tYXhEYXRlIDwgb3B0cy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5tYXhEYXRlID0gb3B0cy5taW5EYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNaW5EYXRlKG9wdHMubWluRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNYXhEYXRlKG9wdHMubWF4RGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdHMueWVhclJhbmdlKSkge1xuICAgICAgICAgICAgICAgIHZhciBmYWxsYmFjayA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDEwO1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlWzBdID0gcGFyc2VJbnQob3B0cy55ZWFyUmFuZ2VbMF0sIDEwKSB8fCBmYWxsYmFjaztcbiAgICAgICAgICAgICAgICBvcHRzLnllYXJSYW5nZVsxXSA9IHBhcnNlSW50KG9wdHMueWVhclJhbmdlWzFdLCAxMCkgfHwgZmFsbGJhY2s7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlID0gTWF0aC5hYnMocGFyc2VJbnQob3B0cy55ZWFyUmFuZ2UsIDEwKSkgfHwgZGVmYXVsdHMueWVhclJhbmdlO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnllYXJSYW5nZSA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRzLnllYXJSYW5nZSA9IDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvcHRzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAodXNpbmcgTW9tZW50LmpzIGlmIGF2YWlsYWJsZSlcbiAgICAgICAgICovXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbihmb3JtYXQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLl9vLmZvcm1hdDtcbiAgICAgICAgICAgIGlmICghaXNEYXRlKHRoaXMuX2QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX28udG9TdHJpbmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX28udG9TdHJpbmcodGhpcy5fZCwgZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNNb21lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudCh0aGlzLl9kKS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kLnRvRGF0ZVN0cmluZygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBNb21lbnQuanMgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAoaWYgYXZhaWxhYmxlKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0TW9tZW50OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBoYXNNb21lbnQgPyBtb21lbnQodGhpcy5fZCkgOiBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGZyb20gYSBNb21lbnQuanMgb2JqZWN0IChpZiBhdmFpbGFibGUpXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNb21lbnQ6IGZ1bmN0aW9uKGRhdGUsIHByZXZlbnRPblNlbGVjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKGhhc01vbWVudCAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGUoZGF0ZS50b0RhdGUoKSwgcHJldmVudE9uU2VsZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmV0dXJuIGEgRGF0ZSBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXREYXRlOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBpc0RhdGUodGhpcy5fZCkgPyBuZXcgRGF0ZSh0aGlzLl9kLmdldFRpbWUoKSkgOiBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBzZXREYXRlOiBmdW5jdGlvbihkYXRlLCBwcmV2ZW50T25TZWxlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2QgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5maWVsZC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmaXJlRXZlbnQodGhpcy5fby5maWVsZCwgJ2NoYW5nZScsIHsgZmlyZWRCeTogdGhpcyB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcmF3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UoZGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0RhdGUoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLl9vLm1pbkRhdGUsXG4gICAgICAgICAgICAgICAgbWF4ID0gdGhpcy5fby5tYXhEYXRlO1xuXG4gICAgICAgICAgICBpZiAoaXNEYXRlKG1pbikgJiYgZGF0ZSA8IG1pbikge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtaW47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShtYXgpICYmIGRhdGUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbWF4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHRoaXMuX2QpO1xuICAgICAgICAgICAgdGhpcy5nb3RvRGF0ZSh0aGlzLl9kKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX28uZmllbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLmZpZWxkLnZhbHVlID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGZpcmVFdmVudCh0aGlzLl9vLmZpZWxkLCAnY2hhbmdlJywgeyBmaXJlZEJ5OiB0aGlzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcmV2ZW50T25TZWxlY3QgJiYgdHlwZW9mIHRoaXMuX28ub25TZWxlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm9uU2VsZWN0LmNhbGwodGhpcywgdGhpcy5nZXREYXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjbGVhciBhbmQgcmVzZXQgdGhlIGRhdGVcbiAgICAgICAgICovXG4gICAgICAgIGNsZWFyOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZShudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHZpZXcgdG8gYSBzcGVjaWZpYyBkYXRlXG4gICAgICAgICAqL1xuICAgICAgICBnb3RvRGF0ZTogZnVuY3Rpb24oZGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5ld0NhbGVuZGFyID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKCFpc0RhdGUoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGVuZGFycykge1xuICAgICAgICAgICAgICAgIHZhciBmaXJzdFZpc2libGVEYXRlID0gbmV3IERhdGUodGhpcy5jYWxlbmRhcnNbMF0ueWVhciwgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgsIDEpLFxuICAgICAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZURhdGUgPSBuZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ueWVhciwgdGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLm1vbnRoLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZURhdGUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGVuZCBvZiB0aGUgbW9udGhcbiAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZURhdGUuc2V0TW9udGgobGFzdFZpc2libGVEYXRlLmdldE1vbnRoKCkrMSk7XG4gICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlLnNldERhdGUobGFzdFZpc2libGVEYXRlLmdldERhdGUoKS0xKTtcbiAgICAgICAgICAgICAgICBuZXdDYWxlbmRhciA9ICh2aXNpYmxlRGF0ZSA8IGZpcnN0VmlzaWJsZURhdGUuZ2V0VGltZSgpIHx8IGxhc3RWaXNpYmxlRGF0ZS5nZXRUaW1lKCkgPCB2aXNpYmxlRGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdDYWxlbmRhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzID0gW3tcbiAgICAgICAgICAgICAgICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28ubWFpbkNhbGVuZGFyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoICs9IDEgLSB0aGlzLl9vLm51bWJlck9mTW9udGhzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3REYXRlOiBmdW5jdGlvbihzaWduLCBkYXlzKSB7XG5cbiAgICAgICAgICAgIHZhciBkYXkgPSB0aGlzLmdldERhdGUoKSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSBwYXJzZUludChkYXlzKSoyNCo2MCo2MCoxMDAwO1xuXG4gICAgICAgICAgICB2YXIgbmV3RGF5O1xuXG4gICAgICAgICAgICBpZiAoc2lnbiA9PT0gJ2FkZCcpIHtcbiAgICAgICAgICAgICAgICBuZXdEYXkgPSBuZXcgRGF0ZShkYXkudmFsdWVPZigpICsgZGlmZmVyZW5jZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNpZ24gPT09ICdzdWJ0cmFjdCcpIHtcbiAgICAgICAgICAgICAgICBuZXdEYXkgPSBuZXcgRGF0ZShkYXkudmFsdWVPZigpIC0gZGlmZmVyZW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZShuZXdEYXkpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFkanVzdENhbGVuZGFyczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXSA9IGFkanVzdENhbGVuZGFyKHRoaXMuY2FsZW5kYXJzWzBdKTtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAxOyBjIDwgdGhpcy5fby5udW1iZXJPZk1vbnRoczsgYysrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbY10gPSBhZGp1c3RDYWxlbmRhcih7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiB0aGlzLmNhbGVuZGFyc1swXS5tb250aCArIGMsXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IHRoaXMuY2FsZW5kYXJzWzBdLnllYXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdvdG9Ub2RheTogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdvdG9EYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIG1vbnRoICh6ZXJvLWluZGV4LCBlLmcuIDA6IEphbnVhcnkpXG4gICAgICAgICAqL1xuICAgICAgICBnb3RvTW9udGg6IGZ1bmN0aW9uKG1vbnRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoID0gcGFyc2VJbnQobW9udGgsIDEwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG5leHRNb250aDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCsrO1xuICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwcmV2TW9udGg6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgtLTtcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB2aWV3IHRvIGEgc3BlY2lmaWMgZnVsbCB5ZWFyIChlLmcuIFwiMjAxMlwiKVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b1llYXI6IGZ1bmN0aW9uKHllYXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNOYU4oeWVhcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS55ZWFyID0gcGFyc2VJbnQoeWVhciwgMTApO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB0aGUgbWluRGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgc2V0TWluRGF0ZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldFRvU3RhcnRPZkRheSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5EYXRlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5ZZWFyICA9IHZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5Nb250aCA9IHZhbHVlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluRGF0ZSA9IGRlZmF1bHRzLm1pbkRhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5ZZWFyICA9IGRlZmF1bHRzLm1pblllYXI7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5Nb250aCA9IGRlZmF1bHRzLm1pbk1vbnRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX28uc3RhcnRSYW5nZSA9IGRlZmF1bHRzLnN0YXJ0UmFuZ2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdGhlIG1heERhdGVcbiAgICAgICAgICovXG4gICAgICAgIHNldE1heERhdGU6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4RGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4WWVhciA9IHZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhNb250aCA9IHZhbHVlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4RGF0ZSA9IGRlZmF1bHRzLm1heERhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhZZWFyID0gZGVmYXVsdHMubWF4WWVhcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heE1vbnRoID0gZGVmYXVsdHMubWF4TW9udGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5lbmRSYW5nZSA9IGRlZmF1bHRzLmVuZFJhbmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZXRTdGFydFJhbmdlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fby5zdGFydFJhbmdlID0gdmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0RW5kUmFuZ2U6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9vLmVuZFJhbmdlID0gdmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJlZnJlc2ggdGhlIEhUTUxcbiAgICAgICAgICovXG4gICAgICAgIGRyYXc6IGZ1bmN0aW9uKGZvcmNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3YgJiYgIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLl9vLFxuICAgICAgICAgICAgICAgIG1pblllYXIgPSBvcHRzLm1pblllYXIsXG4gICAgICAgICAgICAgICAgbWF4WWVhciA9IG9wdHMubWF4WWVhcixcbiAgICAgICAgICAgICAgICBtaW5Nb250aCA9IG9wdHMubWluTW9udGgsXG4gICAgICAgICAgICAgICAgbWF4TW9udGggPSBvcHRzLm1heE1vbnRoLFxuICAgICAgICAgICAgICAgIGh0bWwgPSAnJyxcbiAgICAgICAgICAgICAgICByYW5kSWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl95IDw9IG1pblllYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl95ID0gbWluWWVhcjtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKG1pbk1vbnRoKSAmJiB0aGlzLl9tIDwgbWluTW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbSA9IG1pbk1vbnRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl95ID49IG1heFllYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl95ID0gbWF4WWVhcjtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKG1heE1vbnRoKSAmJiB0aGlzLl9tID4gbWF4TW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbSA9IG1heE1vbnRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBvcHRzLm51bWJlck9mTW9udGhzOyBjKyspIHtcbiAgICAgICAgICAgICAgICByYW5kSWQgPSAncGlrYS10aXRsZS0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCAnJykuc3Vic3RyKDAsIDIpO1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJwaWthLWxlbmRhclwiPicgKyByZW5kZXJUaXRsZSh0aGlzLCBjLCB0aGlzLmNhbGVuZGFyc1tjXS55ZWFyLCB0aGlzLmNhbGVuZGFyc1tjXS5tb250aCwgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciwgcmFuZElkKSArIHRoaXMucmVuZGVyKHRoaXMuY2FsZW5kYXJzW2NdLnllYXIsIHRoaXMuY2FsZW5kYXJzW2NdLm1vbnRoLCByYW5kSWQpICsgJzwvZGl2Pic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWwuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgICAgICBpZihvcHRzLmZpZWxkLnR5cGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0byhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMudHJpZ2dlci5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbkRyYXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm9uRHJhdyh0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGhlIHNjcmVlbiByZWFkZXIgdXNlciBrbm93IHRvIHVzZSBhcnJvdyBrZXlzXG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBvcHRzLmFyaWFMYWJlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0UG9zaXRpb246IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpZWxkLCBwRWwsIHdpZHRoLCBoZWlnaHQsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCBzY3JvbGxUb3AsIGxlZnQsIHRvcCwgY2xpZW50UmVjdCwgbGVmdEFsaWduZWQsIGJvdHRvbUFsaWduZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9vLmNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuICAgICAgICAgICAgZmllbGQgPSB0aGlzLl9vLnRyaWdnZXI7XG4gICAgICAgICAgICBwRWwgPSBmaWVsZDtcbiAgICAgICAgICAgIHdpZHRoID0gdGhpcy5lbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGxlZnRBbGlnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJvdHRvbUFsaWduZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNsaWVudFJlY3QgPSBmaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRvcCA9IGNsaWVudFJlY3QuYm90dG9tICsgd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gcEVsLm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgdG9wICA9IHBFbC5vZmZzZXRUb3AgKyBwRWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgIHdoaWxlKChwRWwgPSBwRWwub2Zmc2V0UGFyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IHBFbC5vZmZzZXRMZWZ0O1xuICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBFbC5vZmZzZXRUb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHBvc2l0aW9uIGlzIGJvdHRvbSAmIGxlZnRcbiAgICAgICAgICAgIGlmICgodGhpcy5fby5yZXBvc2l0aW9uICYmIGxlZnQgKyB3aWR0aCA+IHZpZXdwb3J0V2lkdGgpIHx8XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoJ3JpZ2h0JykgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aCA+IDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCAtIHdpZHRoICsgZmllbGQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgbGVmdEFsaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodGhpcy5fby5yZXBvc2l0aW9uICYmIHRvcCArIGhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0ICsgc2Nyb2xsVG9wKSB8fFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCd0b3AnKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIHRvcCAtIGhlaWdodCAtIGZpZWxkLm9mZnNldEhlaWdodCA+IDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0b3AgPSB0b3AgLSBoZWlnaHQgLSBmaWVsZC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgYm90dG9tQWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUudG9wID0gdG9wICsgJ3B4JztcblxuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5lbCwgbGVmdEFsaWduZWQgPyAnbGVmdC1hbGlnbmVkJyA6ICdyaWdodC1hbGlnbmVkJyk7XG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmVsLCBib3R0b21BbGlnbmVkID8gJ2JvdHRvbS1hbGlnbmVkJyA6ICd0b3AtYWxpZ25lZCcpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgIWxlZnRBbGlnbmVkID8gJ2xlZnQtYWxpZ25lZCcgOiAncmlnaHQtYWxpZ25lZCcpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgIWJvdHRvbUFsaWduZWQgPyAnYm90dG9tLWFsaWduZWQnIDogJ3RvcC1hbGlnbmVkJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJlbmRlciBIVE1MIGZvciBhIHBhcnRpY3VsYXIgbW9udGhcbiAgICAgICAgICovXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIHJhbmRJZClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG9wdHMgICA9IHRoaXMuX28sXG4gICAgICAgICAgICAgICAgbm93ICAgID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBkYXlzICAgPSBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgICAgICAgYmVmb3JlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpLFxuICAgICAgICAgICAgICAgIGRhdGEgICA9IFtdLFxuICAgICAgICAgICAgICAgIHJvdyAgICA9IFtdO1xuICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KG5vdyk7XG4gICAgICAgICAgICBpZiAob3B0cy5maXJzdERheSA+IDApIHtcbiAgICAgICAgICAgICAgICBiZWZvcmUgLT0gb3B0cy5maXJzdERheTtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmUgKz0gNztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNNb250aCA9IG1vbnRoID09PSAwID8gMTEgOiBtb250aCAtIDEsXG4gICAgICAgICAgICAgICAgbmV4dE1vbnRoID0gbW9udGggPT09IDExID8gMCA6IG1vbnRoICsgMSxcbiAgICAgICAgICAgICAgICB5ZWFyT2ZQcmV2aW91c01vbnRoID0gbW9udGggPT09IDAgPyB5ZWFyIC0gMSA6IHllYXIsXG4gICAgICAgICAgICAgICAgeWVhck9mTmV4dE1vbnRoID0gbW9udGggPT09IDExID8geWVhciArIDEgOiB5ZWFyLFxuICAgICAgICAgICAgICAgIGRheXNJblByZXZpb3VzTW9udGggPSBnZXREYXlzSW5Nb250aCh5ZWFyT2ZQcmV2aW91c01vbnRoLCBwcmV2aW91c01vbnRoKTtcbiAgICAgICAgICAgIHZhciBjZWxscyA9IGRheXMgKyBiZWZvcmUsXG4gICAgICAgICAgICAgICAgYWZ0ZXIgPSBjZWxscztcbiAgICAgICAgICAgIHdoaWxlKGFmdGVyID4gNykge1xuICAgICAgICAgICAgICAgIGFmdGVyIC09IDc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjZWxscyArPSA3IC0gYWZ0ZXI7XG4gICAgICAgICAgICB2YXIgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCByID0gMDsgaSA8IGNlbGxzOyBpKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxICsgKGkgLSBiZWZvcmUpKSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA9IGlzRGF0ZSh0aGlzLl9kKSA/IGNvbXBhcmVEYXRlcyhkYXksIHRoaXMuX2QpIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGlzVG9kYXkgPSBjb21wYXJlRGF0ZXMoZGF5LCBub3cpLFxuICAgICAgICAgICAgICAgICAgICBoYXNFdmVudCA9IG9wdHMuZXZlbnRzLmluZGV4T2YoZGF5LnRvRGF0ZVN0cmluZygpKSAhPT0gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBpIDwgYmVmb3JlIHx8IGkgPj0gKGRheXMgKyBiZWZvcmUpLFxuICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSAxICsgKGkgLSBiZWZvcmUpLFxuICAgICAgICAgICAgICAgICAgICBtb250aE51bWJlciA9IG1vbnRoLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhcixcbiAgICAgICAgICAgICAgICAgICAgaXNTdGFydFJhbmdlID0gb3B0cy5zdGFydFJhbmdlICYmIGNvbXBhcmVEYXRlcyhvcHRzLnN0YXJ0UmFuZ2UsIGRheSksXG4gICAgICAgICAgICAgICAgICAgIGlzRW5kUmFuZ2UgPSBvcHRzLmVuZFJhbmdlICYmIGNvbXBhcmVEYXRlcyhvcHRzLmVuZFJhbmdlLCBkYXkpLFxuICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2UgPSBvcHRzLnN0YXJ0UmFuZ2UgJiYgb3B0cy5lbmRSYW5nZSAmJiBvcHRzLnN0YXJ0UmFuZ2UgPCBkYXkgJiYgZGF5IDwgb3B0cy5lbmRSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZCA9IChvcHRzLm1pbkRhdGUgJiYgZGF5IDwgb3B0cy5taW5EYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdHMubWF4RGF0ZSAmJiBkYXkgPiBvcHRzLm1heERhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5kaXNhYmxlV2Vla2VuZHMgJiYgaXNXZWVrZW5kKGRheSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5kaXNhYmxlRGF5Rm4gJiYgb3B0cy5kaXNhYmxlRGF5Rm4oZGF5KSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TnVtYmVyID0gZGF5c0luUHJldmlvdXNNb250aCArIGRheU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gcHJldmlvdXNNb250aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyT2ZQcmV2aW91c01vbnRoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TnVtYmVyID0gZGF5TnVtYmVyIC0gZGF5cztcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gbmV4dE1vbnRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJPZk5leHRNb250aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkYXlDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXk6IGRheU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoOiBtb250aE51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXI6IHllYXJOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFdmVudDogaGFzRXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb2RheTogaXNUb2RheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0VtcHR5OiBpc0VtcHR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTdGFydFJhbmdlOiBpc1N0YXJ0UmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0VuZFJhbmdlOiBpc0VuZFJhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNJblJhbmdlOiBpc0luUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiBvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IG9wdHMuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0cy5waWNrV2hvbGVXZWVrICYmIGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvdy5wdXNoKHJlbmRlckRheShkYXlDb25maWcpKTtcblxuICAgICAgICAgICAgICAgIGlmICgrK3IgPT09IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuc2hvd1dlZWtOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy51bnNoaWZ0KHJlbmRlcldlZWsoaSAtIGJlZm9yZSwgbW9udGgsIHllYXIsIG9wdHMuZmlyc3RXZWVrT2ZZZWFyTWluRGF5cykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZW5kZXJSb3cocm93LCBvcHRzLmlzUlRMLCBvcHRzLnBpY2tXaG9sZVdlZWssIGlzV2Vla1NlbGVjdGVkKSk7XG4gICAgICAgICAgICAgICAgICAgIHJvdyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyVGFibGUob3B0cywgZGF0YSwgcmFuZElkKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpc1Zpc2libGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Y7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2hvdzogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAnaXMtaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbk9wZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGlkZTogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuX3Y7XG4gICAgICAgICAgICBpZiAodiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5fb25DbGljayk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gJ3N0YXRpYyc7IC8vIHJlc2V0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUubGVmdCA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuZWwsICdpcy1oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdGhpcy5fby5vbkNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ub25DbG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR0FNRSBPVkVSXG4gICAgICAgICAqL1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5fbztcblxuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAnbW91c2Vkb3duJywgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnQodGhpcy5lbCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnQodGhpcy5lbCwgJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChvcHRzLmtleWJvYXJkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9vbktleUNoYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCB0aGlzLl9vbklucHV0Q2hhbmdlKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChvcHRzLnRyaWdnZXIsICdjbGljaycsIHRoaXMuX29uSW5wdXRDbGljayk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMudHJpZ2dlciwgJ2ZvY3VzJywgdGhpcy5fb25JbnB1dEZvY3VzKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy50cmlnZ2VyLCAnYmx1cicsIHRoaXMuX29uSW5wdXRCbHVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgcmV0dXJuIFBpa2FkYXk7XG59KSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5BdXRvbGlua2VyOyIsIi8qIGVzbGludCBrZXktc3BhY2luZzogMCAqL1xuLyogZXNsaW50IHF1b3RlLXByb3BzOiAwICovXG5cbmNvbnN0IE1pbWUgPSB7XG5cdCdlbWwnOiAnbWVzc2FnZS9yZmM4MjInLFxuXHQnbWltZSc6ICdtZXNzYWdlL3JmYzgyMicsXG5cdCd0eHQnOiAndGV4dC9wbGFpbicsXG5cdCd0ZXh0JzogJ3RleHQvcGxhaW4nLFxuXHQnZGVmJzogJ3RleHQvcGxhaW4nLFxuXHQnbGlzdCc6ICd0ZXh0L3BsYWluJyxcblx0J2luJzogJ3RleHQvcGxhaW4nLFxuXHQnaW5pJzogJ3RleHQvcGxhaW4nLFxuXHQnbG9nJzogJ3RleHQvcGxhaW4nLFxuXHQnc3FsJzogJ3RleHQvcGxhaW4nLFxuXHQnY2ZnJzogJ3RleHQvcGxhaW4nLFxuXHQnY29uZic6ICd0ZXh0L3BsYWluJyxcblx0J2FzYyc6ICd0ZXh0L3BsYWluJyxcblx0J3J0eCc6ICd0ZXh0L3JpY2h0ZXh0Jyxcblx0J3ZjYXJkJzogJ3RleHQvdmNhcmQnLFxuXHQndmNmJzogJ3RleHQvdmNhcmQnLFxuXHQnaHRtJzogJ3RleHQvaHRtbCcsXG5cdCdodG1sJzogJ3RleHQvaHRtbCcsXG5cdCdjc3YnOiAndGV4dC9jc3YnLFxuXHQnaWNzJzogJ3RleHQvY2FsZW5kYXInLFxuXHQnaWZiJzogJ3RleHQvY2FsZW5kYXInLFxuXHQneG1sJzogJ3RleHQveG1sJyxcblx0J2pzb24nOiAnYXBwbGljYXRpb24vanNvbicsXG5cdCdzd2YnOiAnYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gnLFxuXHQnaGxwJzogJ2FwcGxpY2F0aW9uL3dpbmhscCcsXG5cdCd3Z3QnOiAnYXBwbGljYXRpb24vd2lkZ2V0Jyxcblx0J2NobSc6ICdhcHBsaWNhdGlvbi92bmQubXMtaHRtbGhlbHAnLFxuXHQncDEwJzogJ2FwcGxpY2F0aW9uL3BrY3MxMCcsXG5cdCdwN2MnOiAnYXBwbGljYXRpb24vcGtjczctbWltZScsXG5cdCdwN20nOiAnYXBwbGljYXRpb24vcGtjczctbWltZScsXG5cdCdwN3MnOiAnYXBwbGljYXRpb24vcGtjczctc2lnbmF0dXJlJyxcblx0J3RvcnJlbnQnOiAnYXBwbGljYXRpb24veC1iaXR0b3JyZW50JyxcblxuXHQvLyBzY3JpcHRzXG5cdCdqcyc6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Jyxcblx0J3BsJzogJ3RleHQvcGVybCcsXG5cdCdjc3MnOiAndGV4dC9jc3MnLFxuXHQnYXNwJzogJ3RleHQvYXNwJyxcblx0J3BocCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHAzJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BocDQnOiAnYXBwbGljYXRpb24veC1odHRwZC1waHAnLFxuXHQncGhwNSc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHRtbCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cblx0Ly8gaW1hZ2VzXG5cdCdwbmcnOiAnaW1hZ2UvcG5nJyxcblx0J2pwZyc6ICdpbWFnZS9qcGVnJyxcblx0J2pwZWcnOiAnaW1hZ2UvanBlZycsXG5cdCdqcGUnOiAnaW1hZ2UvanBlZycsXG5cdCdqZmlmJzogJ2ltYWdlL2pwZWcnLFxuXHQnZ2lmJzogJ2ltYWdlL2dpZicsXG5cdCdibXAnOiAnaW1hZ2UvYm1wJyxcblx0J2NnbSc6ICdpbWFnZS9jZ20nLFxuXHQnaWVmJzogJ2ltYWdlL2llZicsXG5cdCdpY28nOiAnaW1hZ2UveC1pY29uJyxcblx0J3RpZic6ICdpbWFnZS90aWZmJyxcblx0J3RpZmYnOiAnaW1hZ2UvdGlmZicsXG5cdCdzdmcnOiAnaW1hZ2Uvc3ZnK3htbCcsXG5cdCdzdmd6JzogJ2ltYWdlL3N2Zyt4bWwnLFxuXHQnZGp2JzogJ2ltYWdlL3ZuZC5kanZ1Jyxcblx0J2RqdnUnOiAnaW1hZ2Uvdm5kLmRqdnUnLFxuXHQnd2VicCc6ICdpbWFnZS93ZWJwJyxcblxuXHQvLyBhcmNoaXZlc1xuXHQnemlwJzogJ2FwcGxpY2F0aW9uL3ppcCcsXG5cdCc3eic6ICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnLFxuXHQncmFyJzogJ2FwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQnLFxuXHQnZXhlJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdkbGwnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J3Njcic6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnY29tJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdiYXQnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J21zaSc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnY2FiJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCcsXG5cdCdneic6ICdhcHBsaWNhdGlvbi94LWd6aXAnLFxuXHQndGd6JzogJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsXG5cdCdieic6ICdhcHBsaWNhdGlvbi94LWJ6aXAnLFxuXHQnYnoyJzogJ2FwcGxpY2F0aW9uL3gtYnppcDInLFxuXHQnZGViJzogJ2FwcGxpY2F0aW9uL3gtZGViaWFuLXBhY2thZ2UnLFxuXG5cdC8vIGZvbnRzXG5cdCdwc2YnOiAnYXBwbGljYXRpb24veC1mb250LWxpbnV4LXBzZicsXG5cdCdvdGYnOiAnYXBwbGljYXRpb24veC1mb250LW90ZicsXG5cdCdwY2YnOiAnYXBwbGljYXRpb24veC1mb250LXBjZicsXG5cdCdzbmYnOiAnYXBwbGljYXRpb24veC1mb250LXNuZicsXG5cdCd0dGYnOiAnYXBwbGljYXRpb24veC1mb250LXR0ZicsXG5cdCd0dGMnOiAnYXBwbGljYXRpb24veC1mb250LXR0ZicsXG5cblx0Ly8gYXVkaW9cblx0J21wMyc6ICdhdWRpby9tcGVnJyxcblx0J2Ftcic6ICdhdWRpby9hbXInLFxuXHQnYWFjJzogJ2F1ZGlvL3gtYWFjJyxcblx0J2FpZic6ICdhdWRpby94LWFpZmYnLFxuXHQnYWlmYyc6ICdhdWRpby94LWFpZmYnLFxuXHQnYWlmZic6ICdhdWRpby94LWFpZmYnLFxuXHQnd2F2JzogJ2F1ZGlvL3gtd2F2Jyxcblx0J3dtYSc6ICdhdWRpby94LW1zLXdtYScsXG5cdCd3YXgnOiAnYXVkaW8veC1tcy13YXgnLFxuXHQnbWlkaSc6ICdhdWRpby9taWRpJyxcblx0J21wNGEnOiAnYXVkaW8vbXA0Jyxcblx0J29nZyc6ICdhdWRpby9vZ2cnLFxuXHQnd2ViYSc6ICdhdWRpby93ZWJtJyxcblx0J3JhJzogJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJyxcblx0J3JhbSc6ICdhdWRpby94LXBuLXJlYWxhdWRpbycsXG5cdCdybXAnOiAnYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luJyxcblx0J20zdSc6ICdhdWRpby94LW1wZWd1cmwnLFxuXG5cdC8vIHZpZGVvXG5cdCdmbHYnOiAndmlkZW8veC1mbHYnLFxuXHQncXQnOiAndmlkZW8vcXVpY2t0aW1lJyxcblx0J21vdic6ICd2aWRlby9xdWlja3RpbWUnLFxuXHQnd212JzogJ3ZpZGVvL3dpbmRvd3MtbWVkaWEnLFxuXHQnYXZpJzogJ3ZpZGVvL3gtbXN2aWRlbycsXG5cdCdtcGcnOiAndmlkZW8vbXBlZycsXG5cdCdtcGVnJzogJ3ZpZGVvL21wZWcnLFxuXHQnbXBlJzogJ3ZpZGVvL21wZWcnLFxuXHQnbTF2JzogJ3ZpZGVvL21wZWcnLFxuXHQnbTJ2JzogJ3ZpZGVvL21wZWcnLFxuXHQnM2dwJzogJ3ZpZGVvLzNncHAnLFxuXHQnM2cyJzogJ3ZpZGVvLzNncHAyJyxcblx0J2gyNjEnOiAndmlkZW8vaDI2MScsXG5cdCdoMjYzJzogJ3ZpZGVvL2gyNjMnLFxuXHQnaDI2NCc6ICd2aWRlby9oMjY0Jyxcblx0J2pwZ3YnOiAndmlkZW8vanBndicsXG5cdCdtcDQnOiAndmlkZW8vbXA0Jyxcblx0J21wNHYnOiAndmlkZW8vbXA0Jyxcblx0J21wZzQnOiAndmlkZW8vbXA0Jyxcblx0J29ndic6ICd2aWRlby9vZ2cnLFxuXHQnd2VibSc6ICd2aWRlby93ZWJtJyxcblx0J200dic6ICd2aWRlby94LW00dicsXG5cdCdhc2YnOiAndmlkZW8veC1tcy1hc2YnLFxuXHQnYXN4JzogJ3ZpZGVvL3gtbXMtYXNmJyxcblx0J3dtJzogJ3ZpZGVvL3gtbXMtd20nLFxuXHQnd214JzogJ3ZpZGVvL3gtbXMtd214Jyxcblx0J3d2eCc6ICd2aWRlby94LW1zLXd2eCcsXG5cdCdtb3ZpZSc6ICd2aWRlby94LXNnaS1tb3ZpZScsXG5cblx0Ly8gYWRvYmVcblx0J3BkZic6ICdhcHBsaWNhdGlvbi9wZGYnLFxuXHQncHNkJzogJ2ltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AnLFxuXHQnYWknOiAnYXBwbGljYXRpb24vcG9zdHNjcmlwdCcsXG5cdCdlcHMnOiAnYXBwbGljYXRpb24vcG9zdHNjcmlwdCcsXG5cdCdwcyc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JyxcblxuXHQvLyBtcyBvZmZpY2Vcblx0J2RvYyc6ICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuXHQnZG90JzogJ2FwcGxpY2F0aW9uL21zd29yZCcsXG5cdCdydGYnOiAnYXBwbGljYXRpb24vcnRmJyxcblx0J3hscyc6ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuXHQncHB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50Jyxcblx0J2RvY3gnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuXHQneGxzeCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG5cdCdkb3R4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlJyxcblx0J3BwdHgnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbicsXG5cblx0Ly8gb3BlbiBvZmZpY2Vcblx0J29kdCc6ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQnLFxuXHQnb2RzJzogJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQnXG59O1xuXG5leHBvcnQgeyBNaW1lLCBNaW1lIGFzIGRlZmF1bHQgfTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgVU5TQ09QQUJMRVMgPSB3ZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRkFVTFQgPT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmF0aXZlSXRlcmF0b3IuY2FsbCh0aGlzKTsgfTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IpO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpc0Z1bmMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0FzaycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNBc2snXG59KVxuY2xhc3MgQXNrUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmFza0Rlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnllc0J1dHRvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubm9CdXR0b24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMueWVzRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm5vRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSB0cnVlO1xuXHRcdHRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgPSB0cnVlO1xuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLlBvcHVwQXNrO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmFza0Rlc2MoJycpO1xuXHRcdHRoaXMueWVzQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX1lFUycpKTtcblx0XHR0aGlzLm5vQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX05PJykpO1xuXG5cdFx0dGhpcy55ZXNGb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5ub0ZvY3VzKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXHR9XG5cblx0eWVzQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZlllc0FjdGlvbikpIHtcblx0XHRcdHRoaXMuZlllc0FjdGlvbi5jYWxsKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdG5vQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZk5vQWN0aW9uKSkge1xuXHRcdFx0dGhpcy5mTm9BY3Rpb24uY2FsbChudWxsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBc2tEZXNjXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmWWVzRnVuY1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZk5vRnVuY1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNZZXNCdXR0b25cblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzTm9CdXR0b25cblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkZvY3VzWWVzT25TaG93ID0gdHJ1ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uU2hvdyhhc2tEZXNjLCBmWWVzRnVuYyA9IG51bGwsIGZOb0Z1bmMgPSBudWxsLCB5ZXNCdXR0b24gPSAnJywgbm9CdXR0b24gPSAnJywgaXNGb2N1c1llc09uU2hvdyA9IHRydWUpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IGZZZXNGdW5jIHx8IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBmTm9GdW5jIHx8IG51bGw7XG5cblx0XHR0aGlzLmFza0Rlc2MoYXNrRGVzYyB8fCAnJyk7XG5cblx0XHRpZiAoeWVzQnV0dG9uKSB7XG5cdFx0XHR0aGlzLnllc0J1dHRvbih5ZXNCdXR0b24pO1xuXHRcdH1cblxuXHRcdGlmIChub0J1dHRvbikge1xuXHRcdFx0dGhpcy5ub0J1dHRvbihub0J1dHRvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSAhIWlzRm9jdXNZZXNPblNob3c7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKHRoaXMuYkZvY3VzWWVzT25TaG93KSB7XG5cdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCd0YWIsIHNoaWZ0K3RhYiwgcmlnaHQsIGxlZnQnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMueWVzRm9jdXMoKSkge1xuXHRcdFx0XHR0aGlzLm5vRm9jdXModHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0dGhpcy5ub0NsaWNrKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQXNrUG9wdXBWaWV3LCBBc2tQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgUHJvcGVydGllc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpICYmIGl0ICE9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgU3RyaW5nKGl0KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSkge1xuICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gQXJyYXlWYWx1ZXMpIHRyeSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gPSBBcnJheVZhbHVlcztcbiAgICB9XG4gICAgaWYgKCFDb2xsZWN0aW9uUHJvdG90eXBlW1RPX1NUUklOR19UQUddKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgICB9XG4gICAgaWYgKERPTUl0ZXJhYmxlc1tDT0xMRUNUSU9OX05BTUVdKSBmb3IgKHZhciBNRVRIT0RfTkFNRSBpbiBBcnJheUl0ZXJhdG9yTWV0aG9kcykge1xuICAgICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gIT09IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSkgdHJ5IHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIE1FVEhPRF9OQU1FLCBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgQ29sbGVjdGlvblByb3RvdHlwZVtNRVRIT0RfTkFNRV0gPSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJyZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi50aW1lcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnNldFRpbWVvdXQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgaWYgKCEodGhhdCBpbnN0YW5jZW9mICRBZ2dyZWdhdGVFcnJvcikpIHJldHVybiBuZXcgJEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgbWVzc2FnZSk7XG4gIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2Vycm9yLW1lc3NhZ2VcbiAgICB0aGF0ID0gc2V0UHJvdG90eXBlT2YobmV3IEVycm9yKHVuZGVmaW5lZCksIGdldFByb3RvdHlwZU9mKHRoYXQpKTtcbiAgfVxuICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ21lc3NhZ2UnLCBTdHJpbmcobWVzc2FnZSkpO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIGVycm9yc0FycmF5LnB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbiRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoNSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDUsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDUsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuLy8gYEFnZ3JlZ2F0ZUVycm9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZ2dyZWdhdGUtZXJyb3ItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbCwga2V5LCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpICYmIGl0ICE9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgU3RyaW5nKGl0KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBQcm9wZXJ0aWVzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJ2YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgIVN5bWJvbC5zaGFtXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICB2YXIgcmV0dXJuTWV0aG9kID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICBpZiAocmV0dXJuTWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYW5PYmplY3QocmV0dXJuTWV0aG9kLmNhbGwoaXRlcmF0b3IpKS52YWx1ZTtcbiAgfVxufTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBOYXRpdmVQcm9taXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyICRmZXRjaCA9IGdldEJ1aWx0SW4oJ2ZldGNoJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xudmFyIERJU1BBVENIX0VWRU5UID0gISEoZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYgZ2xvYmFsLmRpc3BhdGNoRXZlbnQpO1xudmFyIE5BVElWRV9SRUpFQ1RJT05fRVZFTlQgPSB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbic7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxudmFyIEZPUkNFRCA9IGlzRm9yY2VkKFBST01JU0UsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBpbnNwZWN0U291cmNlKFByb21pc2VDb25zdHJ1Y3RvcikgIT09IFN0cmluZyhQcm9taXNlQ29uc3RydWN0b3IpO1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UpIHtcbiAgICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICBpZiAoVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAgIC8vIFVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICBpZiAoIUlTX05PREUgJiYgIU5BVElWRV9SRUpFQ1RJT05fRVZFTlQpIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSNmaW5hbGx5IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZVsnZmluYWxseSddKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKFY4X1ZFUlNJT04gPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFByb21pc2VDb25zdHJ1Y3RvcikpIHJldHVybiBmYWxzZTtcbiAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgdmFyIHByb21pc2UgPSBQcm9taXNlQ29uc3RydWN0b3IucmVzb2x2ZSgxKTtcbiAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgfTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICByZXR1cm4gIShwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlKTtcbn0pO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9IEZPUkNFRCB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKVsnY2F0Y2gnXShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBzdGF0ZS5yZWFjdGlvbnM7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT0gRlVMRklMTEVEO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IGNoYWluW2luZGV4KytdO1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHN0YXRlKTtcbiAgICAgICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGUucmVhY3Rpb25zID0gW107XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQoc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmICghTkFUSVZFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIGlmIChJU19OT0RFKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCwgcHJvbWlzZSwgc3RhdGUudmFsdWUpO1xuICB9KTtcbn07XG5cbnZhciBiaW5kID0gZnVuY3Rpb24gKGZuLCBzdGF0ZSwgdW53cmFwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBmbihzdGF0ZSwgdmFsdWUsIHVud3JhcCk7XG4gIH07XG59O1xuXG52YXIgaW50ZXJuYWxSZWplY3QgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICBub3RpZnkoc3RhdGUsIHRydWUpO1xufTtcblxudmFyIGludGVybmFsUmVzb2x2ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXRlLmZhY2FkZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkoc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QoeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRCkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogW10sXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHtcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZWFjdGlvbnMucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAoc3RhdGUuc3RhdGUgIT0gUEVORElORykgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHByb21pc2UpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKTtcbiAgICB0aGlzLnJlamVjdCA9IGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yIHx8IEMgPT09IFByb21pc2VXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG5cbiAgaWYgKCFJU19QVVJFICYmIHR5cGVvZiBOYXRpdmVQcm9taXNlID09ICdmdW5jdGlvbicpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZS5wcm90b3R5cGUudGhlbjtcblxuICAgIC8vIHdyYXAgbmF0aXZlIFByb21pc2UjdGhlbiBmb3IgbmF0aXZlIGFzeW5jIGZ1bmN0aW9uc1xuICAgIHJlZGVmaW5lKE5hdGl2ZVByb21pc2UucHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgbmF0aXZlVGhlbi5jYWxsKHRoYXQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG5cbiAgICAvLyB3cmFwIGZldGNoIHJlc3VsdFxuICAgIGlmICh0eXBlb2YgJGZldGNoID09ICdmdW5jdGlvbicpICQoeyBnbG9iYWw6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIGZldGNoOiBmdW5jdGlvbiBmZXRjaChpbnB1dCAvKiAsIGluaXQgKi8pIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKFByb21pc2VDb25zdHJ1Y3RvciwgJGZldGNoLmFwcGx5KGdsb2JhbCwgYXJndW1lbnRzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBQcm9taXNlOiBQcm9taXNlQ29uc3RydWN0b3Jcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UsIGZhbHNlLCB0cnVlKTtcbnNldFNwZWNpZXMoUFJPTUlTRSk7XG5cblByb21pc2VXcmFwcGVyID0gZ2V0QnVpbHRJbihQUk9NSVNFKTtcblxuLy8gc3RhdGljc1xuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBgUHJvbWlzZS5yZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIGNhcGFiaWxpdHkucmVqZWN0LmNhbGwodW5kZWZpbmVkLCByKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRCB9LCB7XG4gIC8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoSVNfUFVSRSAmJiB0aGlzID09PSBQcm9taXNlV3JhcHBlciA/IFByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgLy8gYFByb21pc2UuYWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUZ1bmN0aW9uKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgICRwcm9taXNlUmVzb2x2ZS5jYWxsKEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gYFByb21pc2UucmFjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgJHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bnNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCAnICsgKG5hbWUgPyBuYW1lICsgJyAnIDogJycpICsgJ2ludm9jYXRpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgcXVldWVNaWNyb3Rhc2sgPSBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgJiYgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yLnZhbHVlO1xuXG52YXIgZmx1c2gsIGhlYWQsIGxhc3QsIG5vdGlmeSwgdG9nZ2xlLCBub2RlLCBwcm9taXNlLCB0aGVuO1xuXG4vLyBtb2Rlcm4gZW5naW5lcyBoYXZlIHF1ZXVlTWljcm90YXNrIG1ldGhvZFxuaWYgKCFxdWV1ZU1pY3JvdGFzaykge1xuICBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICAvLyBhbHNvIGV4Y2VwdCBXZWJPUyBXZWJraXQgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg5OFxuICBpZiAoIUlTX0lPUyAmJiAhSVNfTk9ERSAmJiAhSVNfV0VCT1NfV0VCS0lUICYmIE11dGF0aW9uT2JzZXJ2ZXIgJiYgZG9jdW1lbnQpIHtcbiAgICB0b2dnbGUgPSB0cnVlO1xuICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIHRoZW4gPSBwcm9taXNlLnRoZW47XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhlbi5jYWxsKHByb21pc2UsIGZsdXNoKTtcbiAgICB9O1xuICAvLyBOb2RlLmpzIHdpdGhvdXQgcHJvbWlzZXNcbiAgfSBlbHNlIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBxdWV1ZU1pY3JvdGFzayB8fCBmdW5jdGlvbiAoZm4pIHtcbiAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICBpZiAoIWhlYWQpIHtcbiAgICBoZWFkID0gdGFzaztcbiAgICBub3RpZnkoKTtcbiAgfSBsYXN0ID0gdGFzaztcbn07XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgY29uc29sZSA9IGdsb2JhbC5jb25zb2xlO1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KGluc3BlY3RTb3VyY2UoV2Vha01hcCkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhRnVuY3Rpb24oQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAnZnVsZmlsbGVkJywgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ3JlamVjdGVkJywgcmVhc29uOiBlcnJvciB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbnZhciBQUk9NSVNFX0FOWV9FUlJPUiA9ICdObyBvbmUgcHJvbWlzZSByZXNvbHZlZCc7XG5cbi8vIGBQcm9taXNlLmFueWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYW55XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICBhbnk6IGZ1bmN0aW9uIGFueShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgZXJyb3JzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBlcnJvcnNbaW5kZXhdID0gZXJyb3I7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyAoZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKSkoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyAoZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKSkoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3RvcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgTmF0aXZlUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXS5jYWxsKHsgdGhlbjogZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9IH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmZpbmFsbHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5maW5hbGx5XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IE5PTl9HRU5FUklDIH0sIHtcbiAgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgZ2V0QnVpbHRJbignUHJvbWlzZScpKTtcbiAgICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgICByZXR1cm4gdGhpcy50aGVuKFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHksXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5XG4gICAgKTtcbiAgfVxufSk7XG5cbi8vIHBhdGNoIG5hdGl2ZSBQcm9taXNlLnByb3RvdHlwZSBmb3IgbmF0aXZlIGFzeW5jIGZ1bmN0aW9uc1xuaWYgKCFJU19QVVJFICYmIHR5cGVvZiBOYXRpdmVQcm9taXNlID09ICdmdW5jdGlvbicgJiYgIU5hdGl2ZVByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10pIHtcbiAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZS5wcm90b3R5cGUsICdmaW5hbGx5JywgZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnZmluYWxseSddKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBjb2RlUG9pbnRBdCwgYXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HID8gUy5jaGFyQXQocG9zaXRpb24pIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklORyA/IFMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMikgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwiLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCJ2YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgcmVwbGFjZSA9ICcnLnJlcGxhY2U7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJidgXXxcXGR7MSwyfXw8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkezEsMn0pL2c7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gIH1cbiAgcmV0dXJuIHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcbiIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0SW50ZXJ2YWw7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCxuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyB0aHJvdyAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwiLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBuZXcgKEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQykobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJpbWl0aXZlKGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsInZhciByZWR1Y2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JlZHVjZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZWR1Y2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZWR1Y2UpID8gcmVkdWNlIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsLG5vLXRocm93LWxpdGVyYWxcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHRocm93IDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJPdXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgSVNfRklMVEVSX09VVCA9IFRZUEUgPT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9PVVQgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlck91dFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyT3V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlck91dDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBjb252ZXJ0TGFuZ05hbWUgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG4vLyBpbXBvcnQge3ZpZXcsIFZpZXdUeXBlfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBwb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0xhbmd1YWdlcydcbn0pXG5jbGFzcyBMYW5ndWFnZXNQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZkxhbmcgPSBudWxsO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxhbmdzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VzID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdXNlckxhbmd1YWdlID0gdGhpcy51c2VyTGFuZ3VhZ2UoKTtcblx0XHRcdHJldHVybiBfLm1hcCh0aGlzLmxhbmdzKCksIChsYW5ndWFnZSkgPT4gKHtcblx0XHRcdFx0a2V5OiBsYW5ndWFnZSxcblx0XHRcdFx0dXNlcjogbGFuZ3VhZ2UgPT09IHVzZXJMYW5ndWFnZSxcblx0XHRcdFx0c2VsZWN0ZWQ6IGtvLm9ic2VydmFibGUoZmFsc2UpLFxuXHRcdFx0XHRmdWxsTmFtZTogY29udmVydExhbmdOYW1lKGxhbmd1YWdlKVxuXHRcdFx0fSkpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5sYW5ncy5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5zZXRMYW5ndWFnZVNlbGVjdGlvbigpO1xuXHRcdH0pO1xuXHR9XG5cblx0bGFuZ3VhZ2VUb29sdGlwTmFtZShsYW5ndWFnZSkge1xuXHRcdHJldHVybiBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UsIHRydWUpO1xuXHR9XG5cblx0c2V0TGFuZ3VhZ2VTZWxlY3Rpb24oKSB7XG5cdFx0Y29uc3QgY3VycmVudExhbmcgPSB0aGlzLmZMYW5nID8ga28udW53cmFwKHRoaXMuZkxhbmcpIDogJyc7XG5cdFx0Xy5lYWNoKHRoaXMubGFuZ3VhZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRpdGVtLnNlbGVjdGVkKGl0ZW0ua2V5ID09PSBjdXJyZW50TGFuZyk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkJlZm9yZVNob3coKSB7XG5cdFx0dGhpcy5mTGFuZyA9IG51bGw7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UoJycpO1xuXG5cdFx0dGhpcy5sYW5ncyhbXSk7XG5cdH1cblxuXHRvblNob3coZkxhbmd1YWdlLCBsYW5ncywgdXNlckxhbmd1YWdlKSB7XG5cdFx0dGhpcy5mTGFuZyA9IGZMYW5ndWFnZTtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSh1c2VyTGFuZ3VhZ2UgfHwgJycpO1xuXG5cdFx0dGhpcy5sYW5ncyhsYW5ncyk7XG5cdH1cblxuXHRjaGFuZ2VMYW5ndWFnZShsYW5nKSB7XG5cdFx0aWYgKHRoaXMuZkxhbmcpIHtcblx0XHRcdHRoaXMuZkxhbmcobGFuZyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgTGFuZ3VhZ2VzUG9wdXBWaWV3LCBMYW5ndWFnZXNQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsga2lsbEN0cmxBQ3RybFMsIGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSwgY3JlYXRlQ29tbWFuZExlZ2FjeSwgZG9tUmVhZHkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgJHdpbiwgJGh0bWwsIGRhdGEgYXMgR2xvYmFsc0RhdGEsIGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgKiBhcyBFbnVtcyBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgRW1haWxNb2RlbCB9IGZyb20gJ01vZGVsL0VtYWlsJztcblxuZXhwb3J0IGRlZmF1bHQgKEFwcCkgPT4ge1xuXHRHbG9iYWxzRGF0YS5fX0FQUF9fID0gQXBwO1xuXG5cdCR3aW4ub24oJ2tleWRvd24nLCBraWxsQ3RybEFDdHJsUykub24oJ3VubG9hZCcsICgpID0+IHtcblx0XHRHbG9iYWxzRGF0YS5iVW5sb2FkID0gdHJ1ZTtcblx0fSk7XG5cblx0JGh0bWwuYWRkQ2xhc3MoYk1vYmlsZURldmljZSA/ICdtb2JpbGUnIDogJ25vLW1vYmlsZScpLm9uKCdjbGljay5kcm9wZG93bi5kYXRhLWFwaScsIGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSk7XG5cblx0Y29uc3QgcmwgPSB3aW5kb3cucmwgfHwge307XG5cblx0cmwuaTE4biA9IGkxOG47XG5cdHJsLmNyZWF0ZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kTGVnYWN5O1xuXG5cdHJsLmFkZFNldHRpbmdzVmlld01vZGVsID0gUGx1Z2lucy5hZGRTZXR0aW5nc1ZpZXdNb2RlbDtcblx0cmwuYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbiA9IFBsdWdpbnMuYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbjtcblxuXHRybC5hZGRIb29rID0gUGx1Z2lucy5hZGRIb29rO1xuXHRybC5zZXR0aW5nc0dldCA9IFBsdWdpbnMubWFpblNldHRpbmdzR2V0O1xuXHRybC5wbHVnaW5TZXR0aW5nc0dldCA9IFBsdWdpbnMuc2V0dGluZ3NHZXQ7XG5cdHJsLnBsdWdpblJlbW90ZVJlcXVlc3QgPSBQbHVnaW5zLnJlbW90ZVJlcXVlc3Q7XG5cblx0cmwuRW1haWxNb2RlbCA9IEVtYWlsTW9kZWw7XG5cdHJsLkVudW1zID0gRW51bXM7XG5cblx0d2luZG93LnJsID0gcmw7XG5cblx0Y29uc3Qgc3RhcnQgPSAoKSA9PiB7XG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ25vLWpzIHJsLWJvb3RlZC10cmlnZ2VyJykuYWRkQ2xhc3MoJ3JsLWJvb3RlZCcpO1xuXG5cdFx0XHRBcHAuYm9vdHN0YXJ0KCk7XG5cdFx0fSwgRW51bXMuTWFnaWNzLlRpbWUxMG1zKTtcblx0fTtcblxuXHR3aW5kb3cuX19BUFBfQk9PVCA9IChmRXJyb3JDYWxsYmFjaykgPT4ge1xuXHRcdGRvbVJlYWR5KCgpID0+IHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aWYgKHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFpbmxvb3AtdGVtcGxhdGVzLWlkJykpIHtcblx0XHRcdFx0XHRzdGFydCgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHdpbmRvdy5yYWlubG9vcFRFTVBMQVRFUyAmJiB3aW5kb3cucmFpbmxvb3BURU1QTEFURVNbMF0pIHtcblx0XHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JsLXRlbXBsYXRlcycpLmlubmVySFRNTCA9IHdpbmRvdy5yYWlubG9vcFRFTVBMQVRFU1swXTtcblx0XHRcdFx0XHRzdGFydCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZFcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aW5kb3cuX19BUFBfQk9PVCA9IG51bGw7XG5cdFx0XHR9LCBFbnVtcy5NYWdpY3MuVGltZTEwbXMpO1xuXHRcdH0pO1xuXHR9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlXCIpOyIsImltcG9ydCBfT2JqZWN0JHNldFByb3RvdHlwZU9mIGZyb20gXCJAYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7ICRodG1sLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEFic3RyYWN0QXBwU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGFuaW0gPSBiTW9iaWxlRGV2aWNlIHx8ICF2YWx1ZTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1hbmltJywgIWFuaW0pLnRvZ2dsZUNsYXNzKCduby1ybC1hbmltJywgYW5pbSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93TGFuZ3VhZ2VzT25Mb2dpbicpKTtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MnKSk7XG5cdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnTmV3TW92ZVRvRm9sZGVyJykpO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnSW50ZXJmYWNlQW5pbWF0aW9uJykpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0QXBwU3RvcmUsIEFic3RyYWN0QXBwU3RvcmUgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qva2V5c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmVkdWNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuXG5pbXBvcnQgeyBUT0tFTl9FUlJPUl9MSU1JVCwgQUpBWF9FUlJPUl9MSU1JVCwgREVGQVVMVF9BSkFYX1RJTUVPVVQgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaW5BcnJheSwgcEludCwgcFN0cmluZywgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IGFqYXggfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgcnVuSG9vayB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEFic3RyYWN0QWpheFJlbW90ZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1JlcXVlc3RBY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUeXBlXG5cdCAqIEBwYXJhbSB7P0FqYXhKc29uRGVmYXVsdFJlc3BvbnNlfSBvRGF0YVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJDYWNoZWRcblx0ICogQHBhcmFtIHsqPX0gb1JlcXVlc3RQYXJhbWV0ZXJzXG5cdCAqL1xuXHRkZWZhdWx0UmVzcG9uc2UoZkNhbGxiYWNrLCBzUmVxdWVzdEFjdGlvbiwgc1R5cGUsIG9EYXRhLCBiQ2FjaGVkLCBvUmVxdWVzdFBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBmQ2FsbCA9ICgpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSBzVHlwZSAmJiBHbG9iYWxzRGF0YS5iVW5sb2FkKSB7XG5cdFx0XHRcdHNUeXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuVW5sb2FkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgJiYgb0RhdGEgJiYgIW9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0RhdGEgJiZcblx0XHRcdFx0XHQtMSA8XG5cdFx0XHRcdFx0XHRpbkFycmF5KG9EYXRhLkVycm9yQ29kZSwgW1xuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQXV0aEVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQWNjZXNzRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Db25uZWN0aW9uRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Eb21haW5Ob3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5NYWlsU2VydmVyRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bkVycm9yXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQgKz0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvRGF0YSAmJiBOb3RpZmljYXRpb24uSW52YWxpZFRva2VuID09PSBvRGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoVE9LRU5fRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50KSB7XG5cdFx0XHRcdFx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18gJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZCkge1xuXHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9EYXRhLkNsZWFyQXV0aCB8fCBvRGF0YS5Mb2dvdXQgfHwgQUpBWF9FUlJPUl9MSU1JVCA8IEdsb2JhbHNEYXRhLmlBamF4RXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18uY2xlYXJDbGllbnRTaWRlVG9rZW4pIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uY2xlYXJDbGllbnRTaWRlVG9rZW4oKTtcblxuXHRcdFx0XHRcdFx0aWYgKCFvRGF0YS5DbGVhckF1dGggJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZCkge1xuXHRcdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmxvZ2luQW5kTG9nb3V0UmVsb2FkKGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgJiYgb0RhdGEgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdEdsb2JhbHNEYXRhLmlBamF4RXJyb3JDb3VudCA9IDA7XG5cdFx0XHRcdEdsb2JhbHNEYXRhLmlUb2tlbkVycm9yQ291bnQgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHRydW5Ib29rKCdhamF4LWRlZmF1bHQtcmVzcG9uc2UnLCBbXG5cdFx0XHRcdHNSZXF1ZXN0QWN0aW9uLFxuXHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSA/IG9EYXRhIDogbnVsbCxcblx0XHRcdFx0c1R5cGUsXG5cdFx0XHRcdGJDYWNoZWQsXG5cdFx0XHRcdG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHRcdFx0XSk7XG5cblx0XHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdFx0ZkNhbGxiYWNrKFxuXHRcdFx0XHRcdHNUeXBlLFxuXHRcdFx0XHRcdFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlID8gb0RhdGEgOiBudWxsLFxuXHRcdFx0XHRcdGJDYWNoZWQsXG5cdFx0XHRcdFx0c1JlcXVlc3RBY3Rpb24sXG5cdFx0XHRcdFx0b1JlcXVlc3RQYXJhbWV0ZXJzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHN3aXRjaCAoc1R5cGUpIHtcblx0XHRcdGNhc2UgJ3N1Y2Nlc3MnOlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3M7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYWJvcnQnOlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLkFib3J0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHNUeXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3I7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5FcnJvciA9PT0gc1R5cGUpIHtcblx0XHRcdF8uZGVsYXkoZkNhbGwsIDMwMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZDYWxsKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmUmVzdWx0Q2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSB7P251bWJlcj19IGlUaW1lT3V0ID0gMjAwMDBcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzR2V0QWRkID0gJydcblx0ICogQHBhcmFtIHtBcnJheT19IGFBYm9ydEFjdGlvbnMgPSBbXVxuXHQgKiBAcmV0dXJucyB7alF1ZXJ5LmpxWEhSfVxuXHQgKi9cblx0YWpheFJlcXVlc3QoZlJlc3VsdENhbGxiYWNrLCBwYXJhbXMsIGlUaW1lT3V0ID0gMjAwMDAsIHNHZXRBZGQgPSAnJywgYWJvcnRBY3Rpb25zID0gW10pIHtcblx0XHRjb25zdCBpc1Bvc3QgPSAnJyA9PT0gc0dldEFkZCxcblx0XHRcdGhlYWRlcnMgPSB7fSxcblx0XHRcdHN0YXJ0ID0gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpO1xuXG5cdFx0bGV0IGFjdGlvbiA9ICcnO1xuXG5cdFx0cGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXHRcdGFjdGlvbiA9IHBhcmFtcy5BY3Rpb24gfHwgJyc7XG5cblx0XHRpZiAoYWN0aW9uICYmIDAgPCBhYm9ydEFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRfLmVhY2goYWJvcnRBY3Rpb25zLCAoYWN0aW9uVG9BYm9ydCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0pIHtcblx0XHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25Ub0Fib3J0XS5fX2Fib3J0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25Ub0Fib3J0XS5hYm9ydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uYWJvcnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0gPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoaXNQb3N0KSB7XG5cdFx0XHRwYXJhbXMuWFRva2VuID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3Rva2VuJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RlZkFqYXggPSAkLmFqYXgoe1xuXHRcdFx0dHlwZTogaXNQb3N0ID8gJ1BPU1QnIDogJ0dFVCcsXG5cdFx0XHR1cmw6IGFqYXgoc0dldEFkZCksXG5cdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdGRhdGFUeXBlOiAnanNvbicsXG5cdFx0XHRkYXRhOiBpc1Bvc3QgPyBwYXJhbXMgOiB7fSxcblx0XHRcdGhlYWRlcnM6IGhlYWRlcnMsXG5cdFx0XHR0aW1lb3V0OiBpVGltZU91dCxcblx0XHRcdGdsb2JhbDogdHJ1ZVxuXHRcdH0pO1xuXG5cdFx0b0RlZkFqYXguYWx3YXlzKChvRGF0YSwgc1R5cGUpID0+IHtcblx0XHRcdGxldCBjYWNoZWQgPSBmYWxzZTtcblx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5UaW1lKSB7XG5cdFx0XHRcdGNhY2hlZCA9IHBJbnQob0RhdGEuVGltZSkgPiBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCkgLSBzdGFydDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9EYXRhICYmIG9EYXRhLlVwZGF0ZVRva2VuKSB7XG5cdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5zZXRDbGllbnRTaWRlVG9rZW4ob0RhdGEuVXBkYXRlVG9rZW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhY3Rpb24gJiYgdGhpcy5vUmVxdWVzdHNbYWN0aW9uXSkge1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5fX2Fib3J0ZWQpIHtcblx0XHRcdFx0XHRzVHlwZSA9ICdhYm9ydCc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5kZWZhdWx0UmVzcG9uc2UoZlJlc3VsdENhbGxiYWNrLCBhY3Rpb24sIHNUeXBlLCBvRGF0YSwgY2FjaGVkLCBwYXJhbXMpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFjdGlvbiAmJiAwIDwgYWJvcnRBY3Rpb25zLmxlbmd0aCAmJiAtMSA8IGluQXJyYXkoYWN0aW9uLCBhYm9ydEFjdGlvbnMpKSB7XG5cdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXSkge1xuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dLl9fYWJvcnRlZCA9IHRydWU7XG5cdFx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25dLmFib3J0KSB7XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5hYm9ydCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0gPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gb0RlZkFqYXg7XG5cdFx0fVxuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0XHRvRGVmQWpheC5jYXRjaChjb25zb2xlLmxvZyk7XG5cdFx0cmV0dXJuIG9EZWZBamF4O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBY3Rpb25cblx0ICogQHBhcmFtIHtPYmplY3Q9fSBvUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gez9udW1iZXI9fSBpVGltZW91dFxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNHZXRBZGQgPSAnJ1xuXHQgKiBAcGFyYW0ge0FycmF5PX0gYUFib3J0QWN0aW9ucyA9IFtdXG5cdCAqL1xuXHRkZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssIHNBY3Rpb24sIG9QYXJhbWV0ZXJzLCBpVGltZW91dCwgc0dldEFkZCwgYUFib3J0QWN0aW9ucykge1xuXHRcdG9QYXJhbWV0ZXJzID0gb1BhcmFtZXRlcnMgfHwge307XG5cdFx0b1BhcmFtZXRlcnMuQWN0aW9uID0gc0FjdGlvbjtcblxuXHRcdHNHZXRBZGQgPSBwU3RyaW5nKHNHZXRBZGQpO1xuXG5cdFx0cnVuSG9vaygnYWpheC1kZWZhdWx0LXJlcXVlc3QnLCBbc0FjdGlvbiwgb1BhcmFtZXRlcnMsIHNHZXRBZGRdKTtcblxuXHRcdHJldHVybiB0aGlzLmFqYXhSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0b1BhcmFtZXRlcnMsXG5cdFx0XHRpc1VuZChpVGltZW91dCkgPyBERUZBVUxUX0FKQVhfVElNRU9VVCA6IHBJbnQoaVRpbWVvdXQpLFxuXHRcdFx0c0dldEFkZCxcblx0XHRcdGFBYm9ydEFjdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdG5vb3AoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdOb29wJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Z2V0UHVibGljS2V5KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnR2V0UHVibGljS2V5Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1ZlcnNpb25cblx0ICovXG5cdGpzVmVyc2lvbihmQ2FsbGJhY2ssIHNWZXJzaW9uKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdWZXJzaW9uJywge1xuXHRcdFx0J1ZlcnNpb24nOiBzVmVyc2lvblxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0QWpheFJlbW90ZSwgQWJzdHJhY3RBamF4UmVtb3RlIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBWSUVXX01PREVMUyB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IGRlbGVnYXRlUnVuLCB3aW5kb3dSZXNpemUsIGxvZywgaXNVbmQsIHBTdHJpbmcgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RTY3JlZW4gfSBmcm9tICdLbm9pbi9BYnN0cmFjdFNjcmVlbic7XG5cbmNsYXNzIEFic3RyYWN0U2V0dGluZ3NTY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNjcmVlbiB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FycmF5fSB2aWV3TW9kZWxzXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2aWV3TW9kZWxzKSB7XG5cdFx0c3VwZXIoJ3NldHRpbmdzJywgdmlld01vZGVscyk7XG5cblx0XHR0aGlzLm1lbnUgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbiA9IG51bGw7XG5cdFx0dGhpcy5vVmlld01vZGVsUGxhY2UgPSBudWxsO1xuXG5cdFx0dGhpcy5zZXR1cFNldHRpbmdzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGZDYWxsYmFja1xuXHQgKi9cblx0c2V0dXBTZXR0aW5ncyhmQ2FsbGJhY2sgPSBudWxsKSB7XG5cdFx0aWYgKGZDYWxsYmFjaykge1xuXHRcdFx0ZkNhbGxiYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0b25Sb3V0ZShzdWJOYW1lKSB7XG5cdFx0bGV0IHNldHRpbmdzU2NyZWVuID0gbnVsbCxcblx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbCxcblx0XHRcdHZpZXdNb2RlbFBsYWNlID0gbnVsbCxcblx0XHRcdHZpZXdNb2RlbERvbSA9IG51bGw7XG5cblx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IF8uZmluZChcblx0XHRcdFZJRVdfTU9ERUxTLnNldHRpbmdzLFxuXHRcdFx0KFNldHRpbmdzVmlld01vZGVsKSA9PlxuXHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhICYmIHN1Yk5hbWUgPT09IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGVcblx0XHQpO1xuXG5cdFx0aWYgKFJvdXRlZFNldHRpbmdzVmlld01vZGVsKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdF8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLFxuXHRcdFx0XHRcdChEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsKSA9PlxuXHRcdFx0XHRcdFx0RGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsID09PSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsICYmXG5cdFx0XHRcdF8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtZGlzYWJsZWQnXSxcblx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRcdERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwpIHtcblx0XHRcdGlmIChSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2J1aWxkZWQgJiYgUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX192bSkge1xuXHRcdFx0XHRzZXR0aW5nc1NjcmVlbiA9IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2aWV3TW9kZWxQbGFjZSA9IHRoaXMub1ZpZXdNb2RlbFBsYWNlO1xuXHRcdFx0XHRpZiAodmlld01vZGVsUGxhY2UgJiYgMSA9PT0gdmlld01vZGVsUGxhY2UubGVuZ3RoKSB7XG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gPSBuZXcgUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwoKTtcblxuXHRcdFx0XHRcdHZpZXdNb2RlbERvbSA9ICQoJzxkaXY+PC9kaXY+Jylcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygncmwtc2V0dGluZ3Mtdmlldy1tb2RlbCcpXG5cdFx0XHRcdFx0XHQuaGlkZSgpO1xuXHRcdFx0XHRcdHZpZXdNb2RlbERvbS5hcHBlbmRUbyh2aWV3TW9kZWxQbGFjZSk7XG5cblx0XHRcdFx0XHRzZXR0aW5nc1NjcmVlbi52aWV3TW9kZWxEb20gPSB2aWV3TW9kZWxEb207XG5cblx0XHRcdFx0XHRzZXR0aW5nc1NjcmVlbi5fX3JsU2V0dGluZ3NEYXRhID0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YTtcblxuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fZG9tID0gdmlld01vZGVsRG9tO1xuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fYnVpbGRlZCA9IHRydWU7XG5cdFx0XHRcdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX192bSA9IHNldHRpbmdzU2NyZWVuO1xuXG5cdFx0XHRcdFx0Y29uc3QgdG1wbCA9IHsgbmFtZTogUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5UZW1wbGF0ZSB9O1xuXHRcdFx0XHRcdGtvLmFwcGx5QmluZGluZ0FjY2Vzc29yc1RvTm9kZShcblx0XHRcdFx0XHRcdHZpZXdNb2RlbERvbVswXSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHJhbnNsYXRvckluaXQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlOiAoKSA9PiB0bXBsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW5cblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oc2V0dGluZ3NTY3JlZW4sICdvbkJ1aWxkJywgW3ZpZXdNb2RlbERvbV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxvZygnQ2Fubm90IGZpbmQgc3ViIHNldHRpbmdzIHZpZXcgbW9kZWwgcG9zaXRpb246IFNldHRpbmdzU3ViU2NyZWVuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzU2NyZWVuKSB7XG5cdFx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGhpZGVcblx0XHRcdFx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbikge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uSGlkZScpO1xuXHRcdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uaGlkZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbiA9IHNldHRpbmdzU2NyZWVuO1xuXG5cdFx0XHRcdFx0Ly8gc2hvd1xuXHRcdFx0XHRcdGlmICh0aGlzLm9DdXJyZW50U3ViU2NyZWVuKSB7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLm9DdXJyZW50U3ViU2NyZWVuLCAnb25CZWZvcmVTaG93Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLm9DdXJyZW50U3ViU2NyZWVuLnZpZXdNb2RlbERvbS5zaG93KCk7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLm9DdXJyZW50U3ViU2NyZWVuLCAnb25TaG93Jyk7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLm9DdXJyZW50U3ViU2NyZWVuLCAnb25TaG93V2l0aERlbGF5JywgW10sIDIwMCk7XG5cblx0XHRcdFx0XHRcdF8uZWFjaCh0aGlzLm1lbnUoKSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0aXRlbS5zZWxlY3RlZChcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nc1NjcmVlbiAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbS5yb3V0ZSA9PT0gc2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YS5Sb3V0ZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdCQoJyNybC1jb250ZW50IC5iLXNldHRpbmdzIC5iLWNvbnRlbnQgLmNvbnRlbnQnKS5zY3JvbGxUb3AoMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIC0tXG5cblx0XHRcdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNldEhhc2goc2V0dGluZ3MoKSwgZmFsc2UsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbiAmJiB0aGlzLm9DdXJyZW50U3ViU2NyZWVuLnZpZXdNb2RlbERvbSkge1xuXHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uSGlkZScpO1xuXHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uaGlkZSgpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5lYWNoKFZJRVdfTU9ERUxTLnNldHRpbmdzLCAoU2V0dGluZ3NWaWV3TW9kZWwpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwgJiZcblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSAmJlxuXHRcdFx0XHQhXy5maW5kKFxuXHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1yZW1vdmVkJ10sXG5cdFx0XHRcdFx0KFJlbW92ZVNldHRpbmdzVmlld01vZGVsKSA9PiBSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCAmJiBSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMubWVudS5wdXNoKHtcblx0XHRcdFx0XHRyb3V0ZTogU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5Sb3V0ZSxcblx0XHRcdFx0XHRsYWJlbDogU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5MYWJlbCxcblx0XHRcdFx0XHRzZWxlY3RlZDoga28ub2JzZXJ2YWJsZShmYWxzZSksXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6ICEhXy5maW5kKFxuXHRcdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10sXG5cdFx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT4gRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsID09PSBTZXR0aW5nc1ZpZXdNb2RlbFxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLm9WaWV3TW9kZWxQbGFjZSA9ICQoJyNybC1jb250ZW50ICNybC1zZXR0aW5ncy1zdWJzY3JlZW4nKTtcblx0fVxuXG5cdHJvdXRlcygpIHtcblx0XHRjb25zdCBEZWZhdWx0Vmlld01vZGVsID0gXy5maW5kKFxuXHRcdFx0XHRWSUVXX01PREVMUy5zZXR0aW5ncyxcblx0XHRcdFx0KFNldHRpbmdzVmlld01vZGVsKSA9PlxuXHRcdFx0XHRcdFNldHRpbmdzVmlld01vZGVsICYmIFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgJiYgU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5Jc0RlZmF1bHRcblx0XHRcdCksXG5cdFx0XHRkZWZhdWx0Um91dGUgPVxuXHRcdFx0XHREZWZhdWx0Vmlld01vZGVsICYmIERlZmF1bHRWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSA/IERlZmF1bHRWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YS5Sb3V0ZSA6ICdnZW5lcmFsJyxcblx0XHRcdHJ1bGVzID0ge1xuXHRcdFx0XHRzdWJuYW1lOiAvXiguKikkLyxcblx0XHRcdFx0bm9ybWFsaXplXzogKHJxdWVzdCwgdmFscykgPT4ge1xuXHRcdFx0XHRcdHZhbHMuc3VibmFtZSA9IGlzVW5kKHZhbHMuc3VibmFtZSkgPyBkZWZhdWx0Um91dGUgOiBwU3RyaW5nKHZhbHMuc3VibmFtZSk7XG5cdFx0XHRcdFx0cmV0dXJuIFt2YWxzLnN1Ym5hbWVdO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdFsne3N1Ym5hbWV9LycsIHJ1bGVzXSxcblx0XHRcdFsne3N1Ym5hbWV9JywgcnVsZXNdLFxuXHRcdFx0WycnLCBydWxlc11cblx0XHRdO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0U2V0dGluZ3NTY3JlZW4sIEFic3RyYWN0U2V0dGluZ3NTY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQgc3NtIGZyb20gJ3NzbSc7XG5cbmltcG9ydCB7XG5cdCR3aW4sXG5cdCRodG1sLFxuXHQkZG9jLFxuXHRsZWZ0UGFuZWxEaXNhYmxlZCxcblx0bGVmdFBhbmVsVHlwZSxcblx0c1VzZXJBZ2VudCxcblx0Yk1vYmlsZURldmljZSxcblx0YkFuaW1hdGlvblN1cHBvcnRlZFxufSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCB7IGlzTm9ybWFsLCBwU3RyaW5nLCBkZXRlY3REcm9wZG93blZpc2liaWxpdHksIHdpbmRvd1Jlc2l6ZUNhbGxiYWNrIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgS2V5U3RhdGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyByb290LCByb290QWRtaW4sIHJvb3RVc2VyLCBwb3B1bGF0ZUF1dGhTdWZmaXggfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgaW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UsIGluaXROb3RpZmljYXRpb25MYW5ndWFnZSB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgTGFuZ3VhZ2VTdG9yZSBmcm9tICdTdG9yZXMvTGFuZ3VhZ2UnO1xuaW1wb3J0IFRoZW1lU3RvcmUgZnJvbSAnU3RvcmVzL1RoZW1lJztcbmltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcblxuaW1wb3J0IHsgcm91dGVPZmYsIHNldEhhc2ggfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdEJvb3QgfSBmcm9tICdLbm9pbi9BYnN0cmFjdEJvb3QnO1xuXG5jbGFzcyBBYnN0cmFjdEFwcCBleHRlbmRzIEFic3RyYWN0Qm9vdCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge1JlbW90ZVN0b3JhZ2V8QWRtaW5SZW1vdGVTdG9yYWdlfSBSZW1vdGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSA9IG51bGw7XG5cdFx0dGhpcy5pc0xvY2FsQXV0b2NvbXBsZXRlID0gdHJ1ZTtcblx0XHR0aGlzLmlmcmFtZSA9IG51bGw7XG5cdFx0dGhpcy5sYXN0RXJyb3JUaW1lID0gMDtcblxuXHRcdHRoaXMuaWZyYW1lID0gJCgnPGlmcmFtZSBjbGFzcz1cImludGVybmFsLWhpZGRkZW5cIiAvPicpLmFwcGVuZFRvKCdib2R5Jyk7XG5cblx0XHQkd2luLm9uKCdyZXNpemUnLCAoKSA9PiB7XG5cdFx0XHRFdmVudHMucHViKCd3aW5kb3cucmVzaXplJyk7XG5cdFx0fSk7XG5cblx0XHRFdmVudHMuc3ViKFxuXHRcdFx0J3dpbmRvdy5yZXNpemUnLFxuXHRcdFx0Xy50aHJvdHRsZSgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlIID0gJHdpbi5oZWlnaHQoKSxcblx0XHRcdFx0XHRpVyA9ICR3aW4uaGVpZ2h0KCk7XG5cblx0XHRcdFx0aWYgKCR3aW4uX19zaXplc1swXSAhPT0gaUggfHwgJHdpbi5fX3NpemVzWzFdICE9PSBpVykge1xuXHRcdFx0XHRcdCR3aW4uX19zaXplc1swXSA9IGlIO1xuXHRcdFx0XHRcdCR3aW4uX19zaXplc1sxXSA9IGlXO1xuXG5cdFx0XHRcdFx0RXZlbnRzLnB1Yignd2luZG93LnJlc2l6ZS5yZWFsJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTBtcylcblx0XHQpO1xuXG5cdFx0Ly8gREVCVUdcblx0XHQvL1x0XHRFdmVudHMuc3ViKHtcblx0XHQvL1x0XHRcdCd3aW5kb3cucmVzaXplJzogZnVuY3Rpb24oKSB7XG5cdFx0Ly9cdFx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZygnd2luZG93LnJlc2l6ZScpO1xuXHRcdC8vXHRcdFx0fSxcblx0XHQvL1x0XHRcdCd3aW5kb3cucmVzaXplLnJlYWwnOiBmdW5jdGlvbigpIHtcblx0XHQvL1x0XHRcdFx0d2luZG93LmNvbnNvbGUubG9nKCd3aW5kb3cucmVzaXplLnJlYWwnKTtcblx0XHQvL1x0XHRcdH1cblx0XHQvL1x0XHR9KTtcblxuXHRcdCRkb2Ncblx0XHRcdC5vbigna2V5ZG93bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgZXZlbnQuY3RybEtleSkge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdybC1jdHJsLWtleS1wcmVzc2VkJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQub24oJ2tleXVwJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudCAmJiAhZXZlbnQuY3RybEtleSkge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdybC1jdHJsLWtleS1wcmVzc2VkJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0JGRvYy5vbihcblx0XHRcdCdtb3VzZW1vdmUga2V5cHJlc3MgY2xpY2snLFxuXHRcdFx0Xy5kZWJvdW5jZSgoKSA9PiB7XG5cdFx0XHRcdEV2ZW50cy5wdWIoJ3JsLmF1dG8tbG9nb3V0LXJlZnJlc2gnKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNXMpXG5cdFx0KTtcblxuXHRcdGtleSgnZXNjLCBlbnRlcicsIEtleVN0YXRlLkFsbCwgKCkgPT4ge1xuXHRcdFx0ZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KCk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZW1vdGUoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRkYXRhKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0QXBwbGljYXRpb25Db25maWd1cmF0aW9uKG5hbWUsIGRlZmF1bHRfKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25Db25maWd1cmF0aW9uW25hbWVdIHx8IGRlZmF1bHRfO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsaW5rXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0ZG93bmxvYWQobGluaykge1xuXHRcdGlmIChzVXNlckFnZW50ICYmICgtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignY2hyb21lJykgfHwgLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpKSkge1xuXHRcdFx0Y29uc3Qgb0xpbmsgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXHRcdFx0b0xpbmsuaHJlZiA9IGxpbms7XG5cblx0XHRcdGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7XG5cdFx0XHRcdGNvbnN0IG9FID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50Lk1vdXNlRXZlbnRzO1xuXHRcdFx0XHRpZiAob0UgJiYgb0UuaW5pdEV2ZW50ICYmIG9MaW5rLmRpc3BhdGNoRXZlbnQpIHtcblx0XHRcdFx0XHRvRS5pbml0RXZlbnQoJ2NsaWNrJywgdHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0b0xpbmsuZGlzcGF0Y2hFdmVudChvRSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYk1vYmlsZURldmljZSkge1xuXHRcdFx0d2luZG93Lm9wZW4obGluaywgJ19zZWxmJyk7XG5cdFx0XHR3aW5kb3cuZm9jdXMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5pZnJhbWUuYXR0cignc3JjJywgbGluayk7XG5cdFx0XHQvLyB3aW5kb3cuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IGxpbms7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRnb29nbGVQcmV2aWV3U3VwcG9ydGVkKCkge1xuXHRcdGlmIChudWxsID09PSB0aGlzLmdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSkge1xuXHRcdFx0dGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUgPVxuXHRcdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpICYmICEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsUHJldmlldycpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICovXG5cdHNldFdpbmRvd1RpdGxlKHRpdGxlKSB7XG5cdFx0dGl0bGUgPSBpc05vcm1hbCh0aXRsZSkgJiYgMCA8IHRpdGxlLmxlbmd0aCA/ICcnICsgdGl0bGUgOiAnJztcblx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RpdGxlJykpIHtcblx0XHRcdHRpdGxlICs9ICh0aXRsZSA/ICcgLSAnIDogJycpICsgU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RpdGxlJyk7XG5cdFx0fVxuXG5cdFx0d2luZG93LmRvY3VtZW50LnRpdGxlID0gdGl0bGUgKyAnIC4uLic7XG5cdFx0d2luZG93LmRvY3VtZW50LnRpdGxlID0gdGl0bGU7XG5cdH1cblxuXHRyZWRpcmVjdFRvQWRtaW5QYW5lbCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcm9vdEFkbWluKCk7XG5cdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdH1cblxuXHRjbGVhckNsaWVudFNpZGVUb2tlbigpIHtcblx0XHRpZiAod2luZG93Ll9fcmxhaF9jbGVhcikge1xuXHRcdFx0d2luZG93Ll9fcmxhaF9jbGVhcigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cblx0ICovXG5cdHNldENsaWVudFNpZGVUb2tlbih0b2tlbikge1xuXHRcdGlmICh3aW5kb3cuX19ybGFoX3NldCkge1xuXHRcdFx0d2luZG93Ll9fcmxhaF9zZXQodG9rZW4pO1xuXG5cdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnQXV0aEFjY291bnRIYXNoJywgdG9rZW4pO1xuXHRcdFx0cG9wdWxhdGVBdXRoU3VmZml4KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGFkbWluID0gZmFsc2Vcblx0ICogQHBhcmFtIHtib29sZWFuPX0gbG9nb3V0ID0gZmFsc2Vcblx0ICogQHBhcmFtIHtib29sZWFuPX0gY2xvc2UgPSBmYWxzZVxuXHQgKi9cblx0bG9naW5BbmRMb2dvdXRSZWxvYWQoYWRtaW4gPSBmYWxzZSwgbG9nb3V0ID0gZmFsc2UsIGNsb3NlID0gZmFsc2UpIHtcblx0XHRjb25zdCBpbklmcmFtZSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2luSWZyYW1lJyk7XG5cdFx0bGV0IGN1c3RvbUxvZ291dExpbmsgPSBwU3RyaW5nKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdjdXN0b21Mb2dvdXRMaW5rJykpO1xuXG5cdFx0aWYgKGxvZ291dCkge1xuXHRcdFx0dGhpcy5jbGVhckNsaWVudFNpZGVUb2tlbigpO1xuXHRcdH1cblxuXHRcdGlmIChsb2dvdXQgJiYgY2xvc2UgJiYgd2luZG93LmNsb3NlKSB7XG5cdFx0XHR3aW5kb3cuY2xvc2UoKTtcblx0XHR9XG5cblx0XHRjdXN0b21Mb2dvdXRMaW5rID0gY3VzdG9tTG9nb3V0TGluayB8fCAoYWRtaW4gPyByb290QWRtaW4oKSA6IHJvb3RVc2VyKCkpO1xuXG5cdFx0aWYgKGxvZ291dCAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiAhPT0gY3VzdG9tTG9nb3V0TGluaykge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdGlmIChpbklmcmFtZSAmJiB3aW5kb3cucGFyZW50KSB7XG5cdFx0XHRcdFx0d2luZG93LnBhcmVudC5sb2NhdGlvbi5ocmVmID0gY3VzdG9tTG9nb3V0TGluaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IGN1c3RvbUxvZ291dExpbms7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkd2luLnRyaWdnZXIoJ3JsLnRvb2x0aXBzLmRpYWN0aXZhdGUnKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyb3V0ZU9mZigpO1xuXHRcdFx0c2V0SGFzaChyb290KCksIHRydWUpO1xuXHRcdFx0cm91dGVPZmYoKTtcblxuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdGlmIChpbklmcmFtZSAmJiB3aW5kb3cucGFyZW50KSB7XG5cdFx0XHRcdFx0d2luZG93LnBhcmVudC5sb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkd2luLnRyaWdnZXIoJ3JsLnRvb2x0aXBzLmRpYWN0aXZhdGUnKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHRcdH1cblx0fVxuXG5cdGhpc3RvcnlCYWNrKCkge1xuXHRcdHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcblx0fVxuXG5cdGJvb3RzdGFydCgpIHtcblx0XHQvLyBsb2coJ1BzJyArICdzcywgaGFjJyArICdrZXJzISBUaGUnICsgJ3JlXFwncyBub3QnICsgJ2hpbmcgaW50ZScgKyAncmVzdGluZyA6JyArICcpJyk7XG5cblx0XHRFdmVudHMucHViKCdybC5ib290c3RhcnQnKTtcblxuXHRcdGNvbnN0IG1vYmlsZSA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGUnKTtcblxuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1NhdmVUcmlnZ2VyJywgcmVxdWlyZSgnQ29tcG9uZW50L1NhdmVUcmlnZ2VyJykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignSW5wdXQnLCByZXF1aXJlKCdDb21wb25lbnQvSW5wdXQnKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdTZWxlY3QnLCByZXF1aXJlKCdDb21wb25lbnQvU2VsZWN0JykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignUmFkaW8nLCByZXF1aXJlKCdDb21wb25lbnQvUmFkaW8nKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdUZXh0QXJlYScsIHJlcXVpcmUoJ0NvbXBvbmVudC9UZXh0QXJlYScpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0RhdGUnLCByZXF1aXJlKCdDb21wb25lbnQvRGF0ZScpLmRlZmF1bHQpO1xuXG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcigneC1zY3JpcHQnLCByZXF1aXJlKCdDb21wb25lbnQvU2NyaXB0JykuZGVmYXVsdCk7XG5cdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3Rlcignc3ZnLWljb24nLCByZXF1aXJlKCdDb21wb25lbnQvU3ZnSWNvbicpLmRlZmF1bHQpO1xuXG5cdFx0aWYgKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtYXRlcmlhbERlc2lnbicpICYmIGJBbmltYXRpb25TdXBwb3J0ZWQpIHtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94JywgcmVxdWlyZSgnQ29tcG9uZW50L01hdGVyaWFsRGVzaWduL0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveFNpbXBsZScsIHJlcXVpcmUoJ0NvbXBvbmVudC9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9DbGFzc2ljL0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0XHQvLyBrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveFNpbXBsZScsIHJlcXVpcmUoJ0NvbXBvbmVudC9DbGFzc2ljL0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHR9XG5cblx0XHRpbml0T25TdGFydE9yTGFuZ0NoYW5nZShpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UpO1xuXG5cdFx0Xy5kZWxheSh3aW5kb3dSZXNpemVDYWxsYmFjaywgTWFnaWNzLlRpbWUxcyk7XG5cblx0XHRFdmVudHMuc3ViKCdzc20ubW9iaWxlLWVudGVyJywgKCkgPT4ge1xuXHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQodHJ1ZSk7XG5cdFx0fSk7XG5cblx0XHRFdmVudHMuc3ViKCdzc20ubW9iaWxlLWxlYXZlJywgKCkgPT4ge1xuXHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKCFtb2JpbGUpIHtcblx0XHRcdCRodG1sLmFkZENsYXNzKCdybC1kZXNrdG9wJyk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAnbW9iaWxlJyxcblx0XHRcdFx0cXVlcnk6ICcobWF4LXdpZHRoOiA3NjdweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKTtcblx0XHRcdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWVudGVyJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLW1vYmlsZScpO1xuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3NzbS5tb2JpbGUtbGVhdmUnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAndGFibGV0Jyxcblx0XHRcdFx0cXVlcnk6ICcobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5OXB4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLXRhYmxldCcpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS10YWJsZXQnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAnZGVza3RvcCcsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogMTAwMHB4KSBhbmQgKG1heC13aWR0aDogMTQwMHB4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtZGVza3RvcCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c3NtLmFkZFN0YXRlKHtcblx0XHRcdFx0aWQ6ICdkZXNrdG9wLWxhcmdlJyxcblx0XHRcdFx0cXVlcnk6ICcobWluLXdpZHRoOiAxNDAxcHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtZGVza3RvcC1sYXJnZScpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wLWxhcmdlJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLW1vYmlsZScpLmFkZENsYXNzKCdybC1tb2JpbGUnKTtcblx0XHRcdEV2ZW50cy5wdWIoJ3NzbS5tb2JpbGUtZW50ZXInKTtcblx0XHR9XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZC5zdWJzY3JpYmUoKGJWYWx1ZSkgPT4ge1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLWxlZnQtcGFuZWwtZGlzYWJsZWQnLCBiVmFsdWUpO1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLWxlZnQtcGFuZWwtZW5hYmxlZCcsICFiVmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0bGVmdFBhbmVsVHlwZS5zdWJzY3JpYmUoKHNWYWx1ZSkgPT4ge1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLWxlZnQtcGFuZWwtbm9uZScsICdub25lJyA9PT0gc1ZhbHVlKTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLXNob3J0JywgJ3Nob3J0JyA9PT0gc1ZhbHVlKTtcblx0XHR9KTtcblxuXHRcdGxlZnRQYW5lbERpc2FibGVkLnZhbHVlSGFzTXV0YXRlZCgpO1xuXG5cdFx0TGFuZ3VhZ2VTdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdFRoZW1lU3RvcmUucG9wdWxhdGUoKTtcblx0XHRTb2NpYWxTdG9yZS5wb3B1bGF0ZSgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0QXBwLCBBYnN0cmFjdEFwcCBhcyBkZWZhdWx0IH07XG4iLCJleHBvcnQgY2xhc3MgQWJzdHJhY3RCb290IHtcblx0Ym9vdHN0YXJ0KCkge1xuXHRcdC8qIG5vLWVtcHR5ICovXG5cdH1cbn1cbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgQWJzdHJhY3RSYWRpbyBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnZhbHVlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlO1xuXHRcdGlmIChpc1VuZCh0aGlzLnZhbHVlKSB8fCAhdGhpcy52YWx1ZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR9XG5cblx0XHR0aGlzLmlubGluZSA9IGlzVW5kKHBhcmFtcy5pbmxpbmUpID8gZmFsc2UgOiBwYXJhbXMuaW5saW5lO1xuXHRcdHRoaXMucmVhZE9ubHkgPSBpc1VuZChwYXJhbXMucmVhZE9ubHkpID8gZmFsc2UgOiAhIXBhcmFtcy5yZWFkT25seTtcblxuXHRcdGlmIChwYXJhbXMudmFsdWVzKSB7XG5cdFx0XHR0aGlzLnZhbHVlcyhfLm1hcChwYXJhbXMudmFsdWVzLCAobGFiZWwsIHZhbHVlKSA9PiAoeyBsYWJlbDogbGFiZWwsIHZhbHVlOiB2YWx1ZSB9KSkpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2xpY2sgPSBfLmJpbmQodGhpcy5jbGljaywgdGhpcyk7XG5cdH1cblxuXHRjbGljayh2YWx1ZSkge1xuXHRcdGlmICghdGhpcy5yZWFkT25seSAmJiB2YWx1ZSkge1xuXHRcdFx0dGhpcy52YWx1ZSh2YWx1ZS52YWx1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0UmFkaW8sIEFic3RyYWN0UmFkaW8gYXMgZGVmYXVsdCB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoU0VBUkNILCBuYXRpdmVTZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBzZWFyY2hlciA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBzZWFyY2hlciAhPT0gdW5kZWZpbmVkID8gc2VhcmNoZXIuY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVTZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBxdW90ID0gL1wiL2c7XG5cbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVodG1sXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSkge1xuICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIFN0cmluZyh2YWx1ZSkucmVwbGFjZShxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiBhIG1ldGhvZCwgbG93ZXJjYXNlXG4vLyBvZiBhIHRhZyBhbmQgZXNjYXBpbmcgcXVvdGVzIGluIGFyZ3VtZW50c1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGVzdCA9ICcnW01FVEhPRF9OQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSk7XG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3RyaW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgdHJpbSA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL3RyaW0nKTtcblxudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC50cmltO1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnc3RyaW5nJyB8fCBpdCA9PT0gU3RyaW5nUHJvdG90eXBlXG4gICAgfHwgKGl0IGluc3RhbmNlb2YgU3RyaW5nICYmIG93biA9PT0gU3RyaW5nUHJvdG90eXBlLnRyaW0pID8gdHJpbSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy50cmltJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ1N0cmluZycpLnRyaW07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ1RyaW1NZXRob2QoJ3RyaW0nKSB9LCB7XG4gIHRyaW06IGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMpO1xuICB9XG59KTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciB3aGl0ZXNwYWNlID0gJ1snICsgd2hpdGVzcGFjZXMgKyAnXSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgd2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyokJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbSwgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltTGVmdCwgdHJpbVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzKSB7XG4gICAgdmFyIHN0cmluZyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKCkgfHwgbm9uW01FVEhPRF9OQU1FXSgpICE9IG5vbiB8fCB3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0ubmFtZSAhPT0gTUVUSE9EX05BTUU7XG4gIH0pO1xufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGZpbmQgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbmQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmluZDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbmQpID8gZmluZCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbmQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maW5kO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgRklORCA9ICdmaW5kJztcbnZhciBTS0lQU19IT0xFUyA9IHRydWU7XG5cbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKEZJTkQpO1xuXG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEZJTkQgaW4gW10pIEFycmF5KDEpW0ZJTkRdKGZ1bmN0aW9uICgpIHsgU0tJUFNfSE9MRVMgPSBmYWxzZTsgfSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTS0lQU19IT0xFUyB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoRklORCk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvY29uY2F0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGNvbmNhdCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvY29uY2F0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmNvbmNhdDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmNvbmNhdCkgPyBjb25jYXQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5jb25jYXQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGO1xudmFyIE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCA9ICdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBTUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxudmFyIGlzQ29uY2F0U3ByZWFkYWJsZSA9IGZ1bmN0aW9uIChPKSB7XG4gIGlmICghaXNPYmplY3QoTykpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNwcmVhZGFibGUgPSBPW0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgcmV0dXJuIHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoTyk7XG59O1xuXG52YXIgRk9SQ0VEID0gIUlTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgfHwgIVNQRUNJRVNfU1VQUE9SVDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IHRvTGVuZ3RoKEUubGVuZ3RoKTtcbiAgICAgICAgaWYgKG4gKyBsZW4gPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPj0gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciB2YWx1ZXMgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUudmFsdWVzKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICB8fCBET01JdGVyYWJsZXMuaGFzT3duUHJvcGVydHkoY2xhc3NvZihpdCkpID8gdmFsdWVzIDogb3duO1xufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS52YWx1ZXM7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgncmVkdWNlJyk7XG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgncmVkdWNlJywgeyAxOiAwIH0pO1xuLy8gQ2hyb21lIDgwLTgyIGhhcyBhIGNyaXRpY2FsIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA0OTk4MlxudmFyIENIUk9NRV9CVUcgPSAhSVNfTk9ERSAmJiBDSFJPTUVfVkVSU0lPTiA+IDc5ICYmIENIUk9NRV9WRVJTSU9OIDwgODM7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfHwgIVVTRVNfVE9fTEVOR1RIIHx8IENIUk9NRV9CVUcgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IHJlZHVjZSwgcmVkdWNlUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19SSUdIVCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c0xlbmd0aCwgbWVtbykge1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBtYXAgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWFwIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubWFwJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykubWFwO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuLy8gRkY0OS0gaXNzdWVcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIG5ldyAoQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY2xhc3NvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwiLy8gYFNhbWVWYWx1ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pcyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsImV4cG9ydCBkZWZhdWx0IFwiPGh0bWw+XFxuPGhlYWQ+XFxuXFx0PG1ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwidmlld3BvcnRcXFwiIGNvbnRlbnQ9XFxcInVzZXItc2NhbGFibGU9bm9cXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwiYXBwbGUtbW9iaWxlLXdlYi1hcHAtY2FwYWJsZVxcXCIgY29udGVudD1cXFwieWVzXFxcIiAvPlxcblxcdDxtZXRhIG5hbWU9XFxcInJvYm90c1xcXCIgY29udGVudD1cXFwibm9pbmRleCwgbm9mb2xsb3csIG5vb2RwXFxcIiAvPlxcblxcdDx0aXRsZT57e3RpdGxlfX08L3RpdGxlPlxcblxcdDxzdHlsZT5cXG5odG1sLCBib2R5IHtcXG5cXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcblxcdGZvbnQtc2l6ZTogMTNweDtcXG5cXHRmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7XFxuXFx0bWFyZ2luOiAwO1xcblxcdHBhZGRpbmc6IDA7XFxufVxcblxcbmEge2NvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZX1cXG5hOnZpc2l0ZWQge2NvbG9yOiAjNjA5fVxcbmE6YWN0aXZlIHtjb2xvcjogcmVkfVxcbmJsb2NrcXVvdGUge2JvcmRlci1sZWZ0OiAycHggc29saWQgYmxhY2s7IG1hcmdpbjogMDsgcGFkZGluZzogMHB4IDEwcHh9XFxuXFxucHJlIHtcXG5cXHRtYXJnaW46IDBweDtcXG5cXHRwYWRkaW5nOiAwcHg7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRib3JkZXI6IG5vbmU7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG5cXHR3b3JkLWJyZWFrOiBicmVhay1hbGw7XFxufVxcblxcbi5ib2R5LXdycCB7XFxuXFx0cGFkZGluZzogMTBweDtcXG59XFxuXFxuLmJvZHktd3JwLmh0bWwgcHJlIHtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0d29yZC13cmFwOiBicmVhay13b3JkO1xcblxcdHdvcmQtYnJlYWs6IG5vcm1hbDtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIHtcXG5cXHRwYWRkaW5nOiAxNXB4O1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIHByZSB7XFxuXFx0bWFyZ2luOiAwcHg7XFxuXFx0cGFkZGluZzogMHB4O1xcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxuXFx0Ym9yZGVyOiBub25lO1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHR3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuXFx0d29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSB7XFxuXFx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibHVlO1xcblxcdGNvbG9yOiBibHVlO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIGdyZWVuO1xcblxcdGNvbG9yOiBncmVlbjtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIGJsb2NrcXVvdGUgYmxvY2txdW90ZSBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIHJlZDtcXG5cXHRjb2xvcjogcmVkO1xcbn1cXG4ucmwtcHJldmlldy1zdWJqZWN0IHtcXG5cXHRmb250LXNpemU6IDE2cHg7XFxuXFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XFxuXFx0cGFkZGluZzogMTVweDtcXG59XFxuLnJsLXByZXZpZXctY3JlZHMtZnJvbSwgLnJsLXByZXZpZXctY3JlZHMtdG8sIC5ybC1wcmV2aWV3LWNyZWRzLWNjIHtcXG5cXHRmb250LXNpemU6IDEycHg7XFxuXFx0cGFkZGluZzogNXB4IDE1cHg7XFxufVxcbi5ybC1wcmV2aWV3LWRhdGUge1xcblxcdGZsb2F0OiByaWdodDtcXG5cXHRmb250LXNpemU6IDEycHg7XFxuXFx0cGFkZGluZzogMTBweCAxNXB4O1xcbn1cXG4ucmwtcHJldmlldy1zZWN0aW9uIHtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdG1hcmdpbjogMDtcXG5cXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcXG59XFxuLnJsLXByZXZpZXctaGlkZSB7XFxuXFx0ZGlzcGxheTogbm9uZTtcXG59XFxuXFx0PC9zdHlsZT5cXG48L2hlYWQ+XFxuPGJvZHk+XFxuXFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1zZWN0aW9uXFxcIj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXN1YmplY3RcXFwiPnt7c3ViamVjdH19PC9kaXY+XFxuXFx0PC9kaXY+XFxuXFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1zZWN0aW9uXFxcIj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWRhdGVcXFwiPnt7ZGF0ZX19PC9kaXY+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1jcmVkcy1mcm9tXFxcIj57e2Zyb21DcmVkc319PC9kaXY+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1jcmVkcy10b1xcXCI+e3t0b0xhYmVsfX06IHt7dG9DcmVkc319PC9kaXY+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1jcmVkcy1jYyB7e2NjQ2xhc3N9fVxcXCI+e3tjY0xhYmVsfX06IHt7Y2NDcmVkc319PC9kaXY+XFxuXFx0PC9kaXY+XFxuXFx0PGRpdiBjbGFzcz1cXFwiYm9keS13cnAge3tib2R5Q2xhc3N9fVxcXCI+e3todG1sfX08L2Rpdj5cXG48L2JvZHk+XFxuPC9odG1sPlwiOyIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgZmlsdGVyID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmlsdGVyKSA/IGZpbHRlciA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmZpbHRlcjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcbi8vIEVkZ2UgMTQtIGlzc3VlXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGNyZWF0ZTogY3JlYXRlXG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2ZcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgc2V0UHJvdG90eXBlT2Y6IHNldFByb3RvdHlwZU9mXG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyBmb3JFYWNoIDogb3duO1xufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmZvckVhY2g7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICghU1RSSUNUX01FVEhPRCB8fCAhVVNFU19UT19MRU5HVEgpID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSA6IFtdLmZvckVhY2g7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIHJldmVyc2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gcmV2ZXJzZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlLmNhbGwodGhpcyk7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIHNsaWNlID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNsaWNlKSA/IHNsaWNlIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zbGljZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdzbGljZScsIHsgQUNDRVNTT1JTOiB0cnVlLCAwOiAwLCAxOiAyIH0pO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIG5hdGl2ZVNsaWNlID0gW10uc2xpY2U7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKHR5cGVvZiBDb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlLmNhbGwoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5LnNoYW0pIGRlZmluZVByb3BlcnR5LnNoYW0gPSB0cnVlO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFERVNDUklQVE9SUywgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IG9iamVjdERlZmluZVByb3BlcnR5TW9kaWxlLmZcbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBGQUlMU19PTl9QUklNSVRJVkVTO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCJpbXBvcnQgeyBwSW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIFNhdmVUcmlnZ2VyQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IHBhcmFtcy5lbGVtZW50IHx8IG51bGw7XG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSAmJiBwYXJhbXMudmFsdWUuc3Vic2NyaWJlID8gcGFyYW1zLnZhbHVlIDogbnVsbDtcblxuXHRcdGlmICh0aGlzLmVsZW1lbnQpIHtcblx0XHRcdGlmICh0aGlzLnZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG5cblx0XHRcdFx0aWYgKHBhcmFtcy52ZXJ0aWNhbEFsaWduKSB7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LmNzcygndmVydGljYWwtYWxpZ24nLCBwYXJhbXMudmVydGljYWxBbGlnbik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHRoaXMudmFsdWUoKSk7XG5cblx0XHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy52YWx1ZS5zdWJzY3JpYmUodGhpcy5zZXRTdGF0ZSwgdGhpcykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LmhpZGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5lcnJvcicpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5zdWNjZXNzJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGU6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuSWRsZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihTYXZlVHJpZ2dlckNvbXBvbmVudCwgJ1NhdmVUcmlnZ2VyQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY2xhc3MgSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihJbnB1dENvbXBvbmVudCwgJ0lucHV0Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jbGFzcyBTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBwYXJhbXMub3B0aW9ucyB8fCAnJztcblxuXHRcdHRoaXMub3B0aW9uc1RleHQgPSBwYXJhbXMub3B0aW9uc1RleHQgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNWYWx1ZSA9IHBhcmFtcy5vcHRpb25zVmFsdWUgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNDYXB0aW9uID0gcGFyYW1zLm9wdGlvbnNDYXB0aW9uIHx8IG51bGw7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zQ2FwdGlvbikge1xuXHRcdFx0dGhpcy5vcHRpb25zQ2FwdGlvbiA9IGkxOG4odGhpcy5vcHRpb25zQ2FwdGlvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNlbGVjdENvbXBvbmVudCwgJ1NlbGVjdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0UmFkaW8gfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RSYWRpbyc7XG5cbmNsYXNzIFJhZGlvQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RSYWRpbyB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoUmFkaW9Db21wb25lbnQsICdSYWRpb0NvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNvbnN0IERFRkFVTFRfUk9XUyA9IDU7XG5cbmNsYXNzIFRleHRBcmVhQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcihwYXJhbXMpO1xuXG5cdFx0dGhpcy5yb3dzID0gcGFyYW1zLnJvd3MgfHwgREVGQVVMVF9ST1dTO1xuXHRcdHRoaXMuc3BlbGxjaGVjayA9IGlzVW5kKHBhcmFtcy5zcGVsbGNoZWNrKSA/IGZhbHNlIDogISFwYXJhbXMuc3BlbGxjaGVjaztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoVGV4dEFyZWFDb21wb25lbnQsICdUZXh0QXJlYUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNsYXNzIERhdGVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihEYXRlQ29tcG9uZW50LCAnRGF0ZUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgU2NyaXB0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHBhcmFtcy5jb21wb25lbnQgJiZcblx0XHRcdHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2RlcyAmJlxuXHRcdFx0cGFyYW1zLmVsZW1lbnQgJiZcblx0XHRcdHBhcmFtcy5lbGVtZW50WzBdICYmXG5cdFx0XHRwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUxcblx0XHQpIHtcblx0XHRcdGxldCBzY3JpcHQgPSBwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUw7XG5cdFx0XHRzY3JpcHQgPSAhc2NyaXB0ID8gJycgOiBzY3JpcHQucmVwbGFjZSgvPHgtc2NyaXB0L2ksICc8c2NyaXB0JykucmVwbGFjZSgvPGI+PFxcL2I+PFxcL3gtc2NyaXB0Pi9pLCAnPC9zY3JpcHQ+Jyk7XG5cblx0XHRcdGlmIChzY3JpcHQpIHtcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQudGV4dCgnJyk7XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50LnJlcGxhY2VXaXRoKFxuXHRcdFx0XHRcdCQoc2NyaXB0KS50ZXh0KFxuXHRcdFx0XHRcdFx0cGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzWzBdICYmIHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2Rlc1swXS5ub2RlVmFsdWVcblx0XHRcdFx0XHRcdFx0PyBwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXNbMF0ubm9kZVZhbHVlXG5cdFx0XHRcdFx0XHRcdDogJydcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudC5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNjcmlwdENvbXBvbmVudCwgJ1NjcmlwdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0Q2hlY2tib3ggfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RDaGVja2JveCc7XG5cbmNsYXNzIENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveCA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMjAwIH0pO1xuXHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAgfSk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveFNldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlLCB0aGlzKTtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlLCB0aGlzKTtcblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKFxuXHRcdFx0dGhpcy52YWx1ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlckFuaW1hdGlvbih2YWx1ZSk7XG5cdFx0XHR9LCB0aGlzKVxuXHRcdCk7XG5cdH1cblxuXHRhbmltYXRpb25Cb3hTZXRUcnVlKCkge1xuXHRcdHRoaXMuYW5pbWF0aW9uQm94KHRydWUpO1xuXHR9XG5cblx0YW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSgpIHtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFyayh0cnVlKTtcblx0fVxuXG5cdHRyaWdnZXJBbmltYXRpb24oYm94KSB7XG5cdFx0aWYgKGJveCkge1xuXHRcdFx0dGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSwgMjAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSwgMjAwKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQsICdDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgcHJvZ3Jlc3NKcyBmcm9tICdwcm9ncmVzc0pzJztcblxuaW1wb3J0IHsgcm9vdCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBwSW50LCBpc0FycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9DYXBhJztcbmltcG9ydCBEb21haW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vRG9tYWluJztcbmltcG9ydCBQbHVnaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGx1Z2luJztcbmltcG9ydCBQYWNrYWdlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BhY2thZ2UnO1xuaW1wb3J0IENvcmVTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ29yZSc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgU2V0dGluZ3NBZG1pblNjcmVlbiB9IGZyb20gJ1NjcmVlbi9BZG1pbi9TZXR0aW5ncyc7XG5pbXBvcnQgeyBMb2dpbkFkbWluU2NyZWVuIH0gZnJvbSAnU2NyZWVuL0FkbWluL0xvZ2luJztcblxuaW1wb3J0IHsgaGlkZUxvYWRpbmcsIHJvdXRlT2ZmLCBzZXRIYXNoLCBzdGFydFNjcmVlbnMgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcCB9IGZyb20gJ0FwcC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFkbWluQXBwIGV4dGVuZHMgQWJzdHJhY3RBcHAge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcihSZW1vdGUpO1xuXHR9XG5cblx0cmVtb3RlKCkge1xuXHRcdHJldHVybiBSZW1vdGU7XG5cdH1cblxuXHRyZWxvYWREb21haW5MaXN0KCkge1xuXHRcdERvbWFpblN0b3JlLmRvbWFpbnMubG9hZGluZyh0cnVlKTtcblx0XHRSZW1vdGUuZG9tYWluTGlzdCgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHREb21haW5TdG9yZS5kb21haW5zLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdERvbWFpblN0b3JlLmRvbWFpbnMoXG5cdFx0XHRcdFx0Xy5tYXAoZGF0YS5SZXN1bHQsIChbZW5hYmxlZCwgYWxpYXNdLCBuYW1lKSA9PiAoe1xuXHRcdFx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0XHRcdGRpc2FibGVkOiBrby5vYnNlcnZhYmxlKCFlbmFibGVkKSxcblx0XHRcdFx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdFx0XHRcdGRlbGV0ZUFjY2Vzczoga28ub2JzZXJ2YWJsZShmYWxzZSlcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZFBsdWdpbkxpc3QoKSB7XG5cdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5wbHVnaW5MaXN0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFBsdWdpblN0b3JlLnBsdWdpbnMubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucyhcblx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdCwgKGl0ZW0pID0+ICh7XG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLk5hbWUsXG5cdFx0XHRcdFx0XHRkaXNhYmxlZDoga28ub2JzZXJ2YWJsZSghaXRlbS5FbmFibGVkKSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyZWQ6IGtvLm9ic2VydmFibGUoISFpdGVtLkNvbmZpZ3VyZWQpXG5cdFx0XHRcdFx0fSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZWxvYWRQYWNrYWdlc0xpc3QoKSB7XG5cdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcodHJ1ZSk7XG5cdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzUmVhbCh0cnVlKTtcblx0XHRSZW1vdGUucGFja2FnZXNMaXN0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlcy5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsKCEhZGF0YS5SZXN1bHQuUmVhbCk7XG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlc01haW5VcGRhdGFibGUoISFkYXRhLlJlc3VsdC5NYWluVXBkYXRhYmxlKTtcblxuXHRcdFx0XHRsZXQgbGlzdCA9IFtdO1xuXHRcdFx0XHRjb25zdCBsb2FkaW5nID0ge307XG5cblx0XHRcdFx0Xy5lYWNoKFBhY2thZ2VTdG9yZS5wYWNrYWdlcygpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdGlmIChpdGVtICYmIGl0ZW0ubG9hZGluZygpKSB7XG5cdFx0XHRcdFx0XHRsb2FkaW5nW2l0ZW0uZmlsZV0gPSBpdGVtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKGlzQXJyYXkoZGF0YS5SZXN1bHQuTGlzdCkpIHtcblx0XHRcdFx0XHRsaXN0ID0gXy5jb21wYWN0KFxuXHRcdFx0XHRcdFx0Xy5tYXAoZGF0YS5SZXN1bHQuTGlzdCwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0XHRpdGVtLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKCFpc1VuZChsb2FkaW5nW2l0ZW0uZmlsZV0pKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gJ2NvcmUnID09PSBpdGVtLnR5cGUgJiYgIWl0ZW0uY2FuQmVJbnN0YWxsZWQgPyBudWxsIDogaXRlbTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlcyhsaXN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlc1JlYWwoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dXBkYXRlQ29yZURhdGEoKSB7XG5cdFx0Q29yZVN0b3JlLmNvcmVVcGRhdGluZyh0cnVlKTtcblx0XHRSZW1vdGUudXBkYXRlQ29yZURhdGEoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVVcGRhdGluZyhmYWxzZSk7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb24oJycpO1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uKCcnKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZSgnJyk7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb25Db21wYXJlKC0yKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwodHJ1ZSk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVhbChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZWxvYWRDb3JlRGF0YSgpIHtcblx0XHRDb3JlU3RvcmUuY29yZUNoZWNraW5nKHRydWUpO1xuXHRcdENvcmVTdG9yZS5jb3JlUmVhbCh0cnVlKTtcblx0XHRSZW1vdGUuY29yZURhdGEoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVDaGVja2luZyhmYWxzZSk7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZWFsKCEhZGF0YS5SZXN1bHQuUmVhbCk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlQ2hhbm5lbChkYXRhLlJlc3VsdC5DaGFubmVsIHx8ICdzdGFibGUnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVUeXBlKGRhdGEuUmVzdWx0LlR5cGUgfHwgJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVVwZGF0YWJsZSghIWRhdGEuUmVzdWx0LlVwZGF0YWJsZSk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlQWNjZXNzKCEhZGF0YS5SZXN1bHQuQWNjZXNzKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVXYXJuaW5nKCEhZGF0YS5SZXN1bHQuV2FybmluZyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbihkYXRhLlJlc3VsdC5WZXJzaW9uIHx8ICcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uKGRhdGEuUmVzdWx0LlJlbW90ZVZlcnNpb24gfHwgJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVJlbGVhc2UoZGF0YS5SZXN1bHQuUmVtb3RlUmVsZWFzZSB8fCAnJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmUocEludChkYXRhLlJlc3VsdC5WZXJzaW9uQ29tcGFyZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZWFsKGZhbHNlKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVDaGFubmVsKCdzdGFibGUnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVUeXBlKCdzdGFibGUnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVXYXJuaW5nKGZhbHNlKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uKCcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uKCcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVSZWxlYXNlKCcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uQ29tcGFyZSgtMik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRib290ZW5kKGJvb3RlbmRDYWxsYmFjayA9IG51bGwpIHtcblx0XHRpZiAocHJvZ3Jlc3NKcykge1xuXHRcdFx0cHJvZ3Jlc3NKcy5lbmQoKTtcblx0XHR9XG5cblx0XHRpZiAoYm9vdGVuZENhbGxiYWNrKSB7XG5cdFx0XHRib290ZW5kQ2FsbGJhY2soKTtcblx0XHR9XG5cdH1cblxuXHRib290c3RhcnQoKSB7XG5cdFx0c3VwZXIuYm9vdHN0YXJ0KCk7XG5cblx0XHRBcHBTdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdENhcGFTdG9yZS5wb3B1bGF0ZSgpO1xuXG5cdFx0aGlkZUxvYWRpbmcoKTtcblxuXHRcdGlmICghU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93QWRtaW5QYW5lbCcpKSB7XG5cdFx0XHRyb3V0ZU9mZigpO1xuXHRcdFx0c2V0SGFzaChyb290KCksIHRydWUpO1xuXHRcdFx0cm91dGVPZmYoKTtcblxuXHRcdFx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy8nO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXV0aCcpKSB7XG5cdFx0XHRcdHN0YXJ0U2NyZWVucyhbU2V0dGluZ3NBZG1pblNjcmVlbl0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhcnRTY3JlZW5zKFtMb2dpbkFkbWluU2NyZWVuXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5ib290ZW5kKCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEFkbWluQXBwKCk7XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBTZXJ2ZXJTZWN1cmUsIFBvcnRzLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgSU1BUF9ERUZBVUxUX1BPUlQsIFNJRVZFX0RFRkFVTFRfUE9SVCwgU01UUF9ERUZBVUxUX1BPUlQgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyB0cmltLCBwSW50LCBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBDYXBhQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ2FwYSc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Eb21haW4nLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzRG9tYWluJ1xufSlcbmNsYXNzIERvbWFpblBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5lZGl0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZ0Vycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5wYWdlID0ga28ub2JzZXJ2YWJsZSgnbWFpbicpO1xuXHRcdHRoaXMuc2lldmVTZXR0aW5ncyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy50ZXN0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nRG9uZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3Iuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3JEZXNjKCcnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3Iuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3Iuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3JEZXNjKCcnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuaW1hcFNlcnZlckZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZVNlcnZlckZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zbXRwU2VydmVyRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubmFtZS5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmltYXBTZXJ2ZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmltYXBQb3J0ID0ga28ub2JzZXJ2YWJsZSgnJyArIElNQVBfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLmltYXBTZWN1cmUgPSBrby5vYnNlcnZhYmxlKFNlcnZlclNlY3VyZS5Ob25lKTtcblx0XHR0aGlzLmltYXBTaG9ydExvZ2luID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy51c2VTaWV2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVBbGxvd1JhdyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVTZXJ2ZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNpZXZlUG9ydCA9IGtvLm9ic2VydmFibGUoJycgKyBTSUVWRV9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc2lldmVTZWN1cmUgPSBrby5vYnNlcnZhYmxlKFNlcnZlclNlY3VyZS5Ob25lKTtcblx0XHR0aGlzLnNtdHBTZXJ2ZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNtdHBQb3J0ID0ga28ub2JzZXJ2YWJsZSgnJyArIFNNVFBfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLnNtdHBTZWN1cmUgPSBrby5vYnNlcnZhYmxlKFNlcnZlclNlY3VyZS5Ob25lKTtcblx0XHR0aGlzLnNtdHBTaG9ydExvZ2luID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zbXRwQXV0aCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5zbXRwUGhwTWFpbCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMud2hpdGVMaXN0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hbGlhc05hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hbGxvd1NpZXZlID0ga28uY29tcHV0ZWQoKCkgPT4gQ2FwYUFkbWluU3RvcmUuZmlsdGVycygpICYmIENhcGFBZG1pblN0b3JlLnNpZXZlKCkpO1xuXG5cdFx0dGhpcy5oZWFkZXJUZXh0ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbmFtZSA9IHRoaXMubmFtZSgpLFxuXHRcdFx0XHRhbGlhc05hbWUgPSB0aGlzLmFsaWFzTmFtZSgpO1xuXG5cdFx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cblx0XHRcdGlmICh0aGlzLmVkaXQoKSkge1xuXHRcdFx0XHRyZXN1bHQgPSBpMThuKCdQT1BVUFNfRE9NQUlOL1RJVExFX0VESVRfRE9NQUlOJywgeyAnTkFNRSc6IG5hbWUgfSk7XG5cdFx0XHRcdGlmIChhbGlhc05hbWUpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gJyDihpAgJyArIGFsaWFzTmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0ID1cblx0XHRcdFx0XHQnJyA9PT0gbmFtZVxuXHRcdFx0XHRcdFx0PyBpMThuKCdQT1BVUFNfRE9NQUlOL1RJVExFX0FERF9ET01BSU4nKVxuXHRcdFx0XHRcdFx0OiBpMThuKCdQT1BVUFNfRE9NQUlOL1RJVExFX0FERF9ET01BSU5fV0lUSF9OQU1FJywgeyAnTkFNRSc6IG5hbWUgfSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmRvbWFpbkRlc2MgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBuYW1lID0gdGhpcy5uYW1lKCk7XG5cdFx0XHRyZXR1cm4gIXRoaXMuZWRpdCgpICYmIG5hbWUgPyBpMThuKCdQT1BVUFNfRE9NQUlOL05FV19ET01BSU5fREVTQycsIHsgJ05BTUUnOiAnKkAnICsgbmFtZSB9KSA6ICcnO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kb21haW5Jc0NvbXB1dGVkID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdXNlUGhwTWFpbCA9IHRoaXMuc210cFBocE1haWwoKSxcblx0XHRcdFx0YWxsb3dTaWV2ZSA9IHRoaXMuYWxsb3dTaWV2ZSgpLFxuXHRcdFx0XHR1c2VTaWV2ZSA9IHRoaXMudXNlU2lldmUoKTtcblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0JycgIT09IHRoaXMubmFtZSgpICYmXG5cdFx0XHRcdCcnICE9PSB0aGlzLmltYXBTZXJ2ZXIoKSAmJlxuXHRcdFx0XHQnJyAhPT0gdGhpcy5pbWFwUG9ydCgpICYmXG5cdFx0XHRcdChhbGxvd1NpZXZlICYmIHVzZVNpZXZlID8gJycgIT09IHRoaXMuc2lldmVTZXJ2ZXIoKSAmJiAnJyAhPT0gdGhpcy5zaWV2ZVBvcnQoKSA6IHRydWUpICYmXG5cdFx0XHRcdCgoJycgIT09IHRoaXMuc210cFNlcnZlcigpICYmICcnICE9PSB0aGlzLnNtdHBQb3J0KCkpIHx8IHVzZVBocE1haWwpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYW5CZVRlc3RlZCA9IGtvLmNvbXB1dGVkKCgpID0+ICF0aGlzLnRlc3RpbmcoKSAmJiB0aGlzLmRvbWFpbklzQ29tcHV0ZWQoKSk7XG5cdFx0dGhpcy5jYW5CZVNhdmVkID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMuc2F2aW5nKCkgJiYgdGhpcy5kb21haW5Jc0NvbXB1dGVkKCkpO1xuXG5cdFx0dGhpcy5wYWdlLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gc21hcnQgZm9ybSBpbXByb3ZlbWVudHNcblx0XHR0aGlzLmltYXBTZXJ2ZXJGb2N1cy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgJiYgJycgIT09IHRoaXMubmFtZSgpICYmICcnID09PSB0aGlzLmltYXBTZXJ2ZXIoKSkge1xuXHRcdFx0XHR0aGlzLmltYXBTZXJ2ZXIodGhpcy5uYW1lKCkucmVwbGFjZSgvWy5dP1sqXVsuXT8vZywgJycpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2lldmVTZXJ2ZXJGb2N1cy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgJiYgJycgIT09IHRoaXMuaW1hcFNlcnZlcigpICYmICcnID09PSB0aGlzLnNpZXZlU2VydmVyKCkpIHtcblx0XHRcdFx0dGhpcy5zaWV2ZVNlcnZlcih0aGlzLmltYXBTZXJ2ZXIoKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNtdHBTZXJ2ZXJGb2N1cy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgJiYgJycgIT09IHRoaXMuaW1hcFNlcnZlcigpICYmICcnID09PSB0aGlzLnNtdHBTZXJ2ZXIoKSkge1xuXHRcdFx0XHR0aGlzLnNtdHBTZXJ2ZXIodGhpcy5pbWFwU2VydmVyKCkucmVwbGFjZSgvaW1hcC9naSwgJ3NtdHAnKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmltYXBTZWN1cmUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZW5hYmxlU21hcnRQb3J0cygpKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnQgPSBwSW50KHRoaXMuaW1hcFBvcnQoKSk7XG5cdFx0XHRcdHN3aXRjaCAocFN0cmluZyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHRjYXNlICcyJzpcblx0XHRcdFx0XHRcdGlmIChQb3J0cy5JbWFwU3NsID09PSBwb3J0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaW1hcFBvcnQocFN0cmluZyhQb3J0cy5JbWFwKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICcxJzpcblx0XHRcdFx0XHRcdGlmIChQb3J0cy5JbWFwID09PSBwb3J0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaW1hcFBvcnQocFN0cmluZyhQb3J0cy5JbWFwU3NsKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc210cFNlY3VyZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5lbmFibGVTbWFydFBvcnRzKCkpIHtcblx0XHRcdFx0Y29uc3QgcG9ydCA9IHBJbnQodGhpcy5zbXRwUG9ydCgpKTtcblx0XHRcdFx0c3dpdGNoIChwU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0XHRcdGNhc2UgJzAnOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLlNtdHBTc2wgPT09IHBvcnQgfHwgUG9ydHMuU210cFN0YXJ0VGxzID09PSBwb3J0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc210cFBvcnQocFN0cmluZyhQb3J0cy5TbXRwKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICcxJzpcblx0XHRcdFx0XHRcdGlmIChQb3J0cy5TbXRwID09PSBwb3J0IHx8IFBvcnRzLlNtdHBTdGFydFRscyA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNtdHBQb3J0KHBTdHJpbmcoUG9ydHMuU210cFNzbCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnMic6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuU210cCA9PT0gcG9ydCB8fCBQb3J0cy5TbXRwU3NsID09PSBwb3J0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc210cFBvcnQocFN0cmluZyhQb3J0cy5TbXRwU3RhcnRUbHMpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVTYXZlZCgpKVxuXHRjcmVhdGVPckFkZENvbW1hbmQoKSB7XG5cdFx0dGhpcy5zYXZpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLmNyZWF0ZU9yVXBkYXRlRG9tYWluKFxuXHRcdFx0Xy5iaW5kKHRoaXMub25Eb21haW5DcmVhdGVPclNhdmVSZXNwb25zZSwgdGhpcyksXG5cdFx0XHQhdGhpcy5lZGl0KCksXG5cdFx0XHR0aGlzLm5hbWUoKSxcblxuXHRcdFx0dGhpcy5pbWFwU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuaW1hcFBvcnQoKSksXG5cdFx0XHR0aGlzLmltYXBTZWN1cmUoKSxcblx0XHRcdHRoaXMuaW1hcFNob3J0TG9naW4oKSxcblxuXHRcdFx0dGhpcy51c2VTaWV2ZSgpLFxuXHRcdFx0dGhpcy5zaWV2ZUFsbG93UmF3KCksXG5cdFx0XHR0aGlzLnNpZXZlU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc2lldmVQb3J0KCkpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlY3VyZSgpLFxuXG5cdFx0XHR0aGlzLnNtdHBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5zbXRwUG9ydCgpKSxcblx0XHRcdHRoaXMuc210cFNlY3VyZSgpLFxuXHRcdFx0dGhpcy5zbXRwU2hvcnRMb2dpbigpLFxuXHRcdFx0dGhpcy5zbXRwQXV0aCgpLFxuXHRcdFx0dGhpcy5zbXRwUGhwTWFpbCgpLFxuXG5cdFx0XHR0aGlzLndoaXRlTGlzdCgpXG5cdFx0KTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmNhbkJlVGVzdGVkKCkpXG5cdHRlc3RDb25uZWN0aW9uQ29tbWFuZCgpIHtcblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblxuXHRcdHRoaXMudGVzdGluZ0RvbmUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmcodHJ1ZSk7XG5cblx0XHRSZW1vdGUudGVzdENvbm5lY3Rpb25Gb3JEb21haW4oXG5cdFx0XHRfLmJpbmQodGhpcy5vblRlc3RDb25uZWN0aW9uUmVzcG9uc2UsIHRoaXMpLFxuXHRcdFx0dGhpcy5uYW1lKCksXG5cblx0XHRcdHRoaXMuaW1hcFNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLmltYXBQb3J0KCkpLFxuXHRcdFx0dGhpcy5pbWFwU2VjdXJlKCksXG5cblx0XHRcdHRoaXMudXNlU2lldmUoKSxcblx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5zaWV2ZVBvcnQoKSksXG5cdFx0XHR0aGlzLnNpZXZlU2VjdXJlKCksXG5cblx0XHRcdHRoaXMuc210cFNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLnNtdHBQb3J0KCkpLFxuXHRcdFx0dGhpcy5zbXRwU2VjdXJlKCksXG5cdFx0XHR0aGlzLnNtdHBBdXRoKCksXG5cdFx0XHR0aGlzLnNtdHBQaHBNYWlsKClcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHR3aGl0ZUxpc3RDb21tYW5kKCkge1xuXHRcdHRoaXMucGFnZSgnd2hpdGUtbGlzdCcpO1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRiYWNrQ29tbWFuZCgpIHtcblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0c2lldmVDb21tYW5kKCkge1xuXHRcdHRoaXMuc2lldmVTZXR0aW5ncyghdGhpcy5zaWV2ZVNldHRpbmdzKCkpO1xuXHRcdHRoaXMuY2xlYXJUZXN0aW5nKCk7XG5cdH1cblxuXHRvblRlc3RDb25uZWN0aW9uUmVzcG9uc2Uoc1Jlc3VsdCwgb0RhdGEpIHtcblx0XHR0aGlzLnRlc3RpbmcoZmFsc2UpO1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0bGV0IGJJbWFwID0gZmFsc2UsXG5cdFx0XHRcdGJTaWV2ZSA9IGZhbHNlO1xuXG5cdFx0XHR0aGlzLnRlc3RpbmdEb25lKHRydWUpO1xuXHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yKHRydWUgIT09IG9EYXRhLlJlc3VsdC5JbWFwKTtcblx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3IodHJ1ZSAhPT0gb0RhdGEuUmVzdWx0LlNpZXZlKTtcblx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcih0cnVlICE9PSBvRGF0YS5SZXN1bHQuU210cCk7XG5cblx0XHRcdGlmICh0aGlzLnRlc3RpbmdJbWFwRXJyb3IoKSAmJiBvRGF0YS5SZXN1bHQuSW1hcCkge1xuXHRcdFx0XHRiSW1hcCA9IHRydWU7XG5cdFx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvckRlc2MoJycpO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3JEZXNjKG9EYXRhLlJlc3VsdC5JbWFwKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudGVzdGluZ1NpZXZlRXJyb3IoKSAmJiBvRGF0YS5SZXN1bHQuU2lldmUpIHtcblx0XHRcdFx0YlNpZXZlID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvckRlc2MoJycpO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yRGVzYyhvRGF0YS5SZXN1bHQuU2lldmUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy50ZXN0aW5nU210cEVycm9yKCkgJiYgb0RhdGEuUmVzdWx0LlNtdHApIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYygnJyk7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvckRlc2Mob0RhdGEuUmVzdWx0LlNtdHApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zaWV2ZVNldHRpbmdzKCkpIHtcblx0XHRcdFx0aWYgKCFiU2lldmUgJiYgYkltYXApIHtcblx0XHRcdFx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGJTaWV2ZSAmJiAhYkltYXApIHtcblx0XHRcdFx0dGhpcy5zaWV2ZVNldHRpbmdzKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IodHJ1ZSk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy50ZXN0aW5nU210cEVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHRvbkRvbWFpbkNyZWF0ZU9yU2F2ZVJlc3BvbnNlKHNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhKSB7XG5cdFx0XHRpZiAob0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0XHRcdFx0dGhpcy5jbG9zZUNvbW1hbmQoKTtcblx0XHRcdH0gZWxzZSBpZiAoTm90aWZpY2F0aW9uLkRvbWFpbkFscmVhZHlFeGlzdHMgPT09IG9EYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHR0aGlzLnNhdmluZ0Vycm9yKGkxOG4oJ0VSUk9SUy9ET01BSU5fQUxSRUFEWV9FWElTVFMnKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2F2aW5nRXJyb3IoaTE4bignRVJST1JTL1VOS05PV05fRVJST1InKSk7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJUZXN0aW5nKCkge1xuXHRcdHRoaXMudGVzdGluZyhmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nRG9uZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3IoZmFsc2UpO1xuXHR9XG5cblx0b25IaWRlKCkge1xuXHRcdHRoaXMucGFnZSgnbWFpbicpO1xuXHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cdH1cblxuXHRvblNob3cob0RvbWFpbikge1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblxuXHRcdHRoaXMucGFnZSgnbWFpbicpO1xuXHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cblx0XHR0aGlzLmNsZWFyVGVzdGluZygpO1xuXG5cdFx0dGhpcy5jbGVhckZvcm0oKTtcblx0XHRpZiAob0RvbWFpbikge1xuXHRcdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzKGZhbHNlKTtcblxuXHRcdFx0dGhpcy5lZGl0KHRydWUpO1xuXG5cdFx0XHR0aGlzLm5hbWUodHJpbShvRG9tYWluLk5hbWUpKTtcblx0XHRcdHRoaXMuaW1hcFNlcnZlcih0cmltKG9Eb21haW4uSW5jSG9zdCkpO1xuXHRcdFx0dGhpcy5pbWFwUG9ydCgnJyArIHBJbnQob0RvbWFpbi5JbmNQb3J0KSk7XG5cdFx0XHR0aGlzLmltYXBTZWN1cmUodHJpbShvRG9tYWluLkluY1NlY3VyZSkpO1xuXHRcdFx0dGhpcy5pbWFwU2hvcnRMb2dpbighIW9Eb21haW4uSW5jU2hvcnRMb2dpbik7XG5cdFx0XHR0aGlzLnVzZVNpZXZlKCEhb0RvbWFpbi5Vc2VTaWV2ZSk7XG5cdFx0XHR0aGlzLnNpZXZlQWxsb3dSYXcoISFvRG9tYWluLlNpZXZlQWxsb3dSYXcpO1xuXHRcdFx0dGhpcy5zaWV2ZVNlcnZlcih0cmltKG9Eb21haW4uU2lldmVIb3N0KSk7XG5cdFx0XHR0aGlzLnNpZXZlUG9ydCgnJyArIHBJbnQob0RvbWFpbi5TaWV2ZVBvcnQpKTtcblx0XHRcdHRoaXMuc2lldmVTZWN1cmUodHJpbShvRG9tYWluLlNpZXZlU2VjdXJlKSk7XG5cdFx0XHR0aGlzLnNtdHBTZXJ2ZXIodHJpbShvRG9tYWluLk91dEhvc3QpKTtcblx0XHRcdHRoaXMuc210cFBvcnQoJycgKyBwSW50KG9Eb21haW4uT3V0UG9ydCkpO1xuXHRcdFx0dGhpcy5zbXRwU2VjdXJlKHRyaW0ob0RvbWFpbi5PdXRTZWN1cmUpKTtcblx0XHRcdHRoaXMuc210cFNob3J0TG9naW4oISFvRG9tYWluLk91dFNob3J0TG9naW4pO1xuXHRcdFx0dGhpcy5zbXRwQXV0aCghIW9Eb21haW4uT3V0QXV0aCk7XG5cdFx0XHR0aGlzLnNtdHBQaHBNYWlsKCEhb0RvbWFpbi5PdXRVc2VQaHBNYWlsKTtcblx0XHRcdHRoaXMud2hpdGVMaXN0KHRyaW0ob0RvbWFpbi5XaGl0ZUxpc3QpKTtcblx0XHRcdHRoaXMuYWxpYXNOYW1lKHRyaW0ob0RvbWFpbi5BbGlhc05hbWUpKTtcblxuXHRcdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHRpZiAoJycgPT09IHRoaXMubmFtZSgpICYmICFiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR0aGlzLm5hbWUuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhckZvcm0oKSB7XG5cdFx0dGhpcy5lZGl0KGZhbHNlKTtcblxuXHRcdHRoaXMucGFnZSgnbWFpbicpO1xuXHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cblx0XHR0aGlzLmVuYWJsZVNtYXJ0UG9ydHMoZmFsc2UpO1xuXG5cdFx0dGhpcy5zYXZpbmdFcnJvcignJyk7XG5cblx0XHR0aGlzLm5hbWUoJycpO1xuXHRcdHRoaXMubmFtZS5mb2N1c2VkKGZhbHNlKTtcblxuXHRcdHRoaXMuaW1hcFNlcnZlcignJyk7XG5cdFx0dGhpcy5pbWFwUG9ydCgnJyArIElNQVBfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLmltYXBTZWN1cmUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXHRcdHRoaXMuaW1hcFNob3J0TG9naW4oZmFsc2UpO1xuXG5cdFx0dGhpcy51c2VTaWV2ZShmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZUFsbG93UmF3KGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlU2VydmVyKCcnKTtcblx0XHR0aGlzLnNpZXZlUG9ydCgnJyArIFNJRVZFX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5zaWV2ZVNlY3VyZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cblx0XHR0aGlzLnNtdHBTZXJ2ZXIoJycpO1xuXHRcdHRoaXMuc210cFBvcnQoJycgKyBTTVRQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5zbXRwU2VjdXJlKFNlcnZlclNlY3VyZS5Ob25lKTtcblx0XHR0aGlzLnNtdHBTaG9ydExvZ2luKGZhbHNlKTtcblx0XHR0aGlzLnNtdHBBdXRoKHRydWUpO1xuXHRcdHRoaXMuc210cFBocE1haWwoZmFsc2UpO1xuXG5cdFx0dGhpcy53aGl0ZUxpc3QoJycpO1xuXHRcdHRoaXMuYWxpYXNOYW1lKCcnKTtcblx0XHR0aGlzLmVuYWJsZVNtYXJ0UG9ydHModHJ1ZSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgRG9tYWluUG9wdXBWaWV3LCBEb21haW5Qb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgYWRkU2V0dGluZ3NWaWV3TW9kZWwgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBydW5TZXR0aW5nc1ZpZXdNb2RlbEhvb2tzIH0gZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIH0gZnJvbSAnU2NyZWVuL0Fic3RyYWN0U2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBHZW5lcmFsQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL0dlbmVyYWwnO1xuaW1wb3J0IHsgRG9tYWluc0FkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9Eb21haW5zJztcbmltcG9ydCB7IExvZ2luQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL0xvZ2luJztcbmltcG9ydCB7IENvbnRhY3RzQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL0NvbnRhY3RzJztcbmltcG9ydCB7IFNlY3VyaXR5QWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL1NlY3VyaXR5JztcbmltcG9ydCB7IFNvY2lhbEFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9Tb2NpYWwnO1xuaW1wb3J0IHsgUGx1Z2luc0FkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9QbHVnaW5zJztcbmltcG9ydCB7IFBhY2thZ2VzQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL1BhY2thZ2VzJztcbmltcG9ydCB7IEFib3V0QWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL0Fib3V0JztcbmltcG9ydCB7IEJyYW5kaW5nQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL0JyYW5kaW5nJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5pbXBvcnQgeyBNZW51U2V0dGluZ3NBZG1pblZpZXcgfSBmcm9tICdWaWV3L0FkbWluL1NldHRpbmdzL01lbnUnO1xuaW1wb3J0IHsgUGFuZVNldHRpbmdzQWRtaW5WaWV3IH0gZnJvbSAnVmlldy9BZG1pbi9TZXR0aW5ncy9QYW5lJztcblxuY2xhc3MgU2V0dGluZ3NBZG1pblNjcmVlbiBleHRlbmRzIEFic3RyYWN0U2V0dGluZ3NTY3JlZW4ge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcihbTWVudVNldHRpbmdzQWRtaW5WaWV3LCBQYW5lU2V0dGluZ3NBZG1pblZpZXddKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZkNhbGxiYWNrID0gbnVsbFxuXHQgKi9cblx0c2V0dXBTZXR0aW5ncyhmQ2FsbGJhY2sgPSBudWxsKSB7XG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoXG5cdFx0XHRHZW5lcmFsQWRtaW5TZXR0aW5ncyxcblx0XHRcdCdBZG1pblNldHRpbmdzR2VuZXJhbCcsXG5cdFx0XHQnVEFCU19MQUJFTFMvTEFCRUxfR0VORVJBTF9OQU1FJyxcblx0XHRcdCdnZW5lcmFsJyxcblx0XHRcdHRydWVcblx0XHQpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoRG9tYWluc0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzRG9tYWlucycsICdUQUJTX0xBQkVMUy9MQUJFTF9ET01BSU5TX05BTUUnLCAnZG9tYWlucycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoTG9naW5BZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0xvZ2luJywgJ1RBQlNfTEFCRUxTL0xBQkVMX0xPR0lOX05BTUUnLCAnbG9naW4nKTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKEJyYW5kaW5nQWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NCcmFuZGluZycsICdUQUJTX0xBQkVMUy9MQUJFTF9CUkFORElOR19OQU1FJywgJ2JyYW5kaW5nJyk7XG5cblx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChDb250YWN0c0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzQ29udGFjdHMnLCAnVEFCU19MQUJFTFMvTEFCRUxfQ09OVEFDVFNfTkFNRScsICdjb250YWN0cycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoU2VjdXJpdHlBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc1NlY3VyaXR5JywgJ1RBQlNfTEFCRUxTL0xBQkVMX1NFQ1VSSVRZX05BTUUnLCAnc2VjdXJpdHknKTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFxuXHRcdFx0U29jaWFsQWRtaW5TZXR0aW5ncyxcblx0XHRcdCdBZG1pblNldHRpbmdzU29jaWFsJyxcblx0XHRcdCdUQUJTX0xBQkVMUy9MQUJFTF9JTlRFR1JBVElPTl9OQU1FJyxcblx0XHRcdCdpbnRlZ3JhdGlvbnMnXG5cdFx0KTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFBsdWdpbnNBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc1BsdWdpbnMnLCAnVEFCU19MQUJFTFMvTEFCRUxfUExVR0lOU19OQU1FJywgJ3BsdWdpbnMnKTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFBhY2thZ2VzQWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NQYWNrYWdlcycsICdUQUJTX0xBQkVMUy9MQUJFTF9QQUNLQUdFU19OQU1FJywgJ3BhY2thZ2VzJyk7XG5cblx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChBYm91dEFkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzQWJvdXQnLCAnVEFCU19MQUJFTFMvTEFCRUxfQUJPVVRfTkFNRScsICdhYm91dCcpO1xuXG5cdFx0cnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyh0cnVlKTtcblxuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHRnZXRBcHAoKS5zZXRXaW5kb3dUaXRsZSgnJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgU2V0dGluZ3NBZG1pblNjcmVlbiwgU2V0dGluZ3NBZG1pblNjcmVlbiBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7XG5cdHRyaW0sXG5cdHBJbnQsXG5cdGJvb2xUb0FqYXgsXG5cdHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uLFxuXHRjaGFuZ2VUaGVtZSxcblx0Y29udmVydFRoZW1lTmFtZSxcblx0Y29udmVydExhbmdOYW1lXG59IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyByZWxvYWQgYXMgdHJhbnNsYXRvclJlbG9hZCB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IHBocEluZm8gfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IFRoZW1lU3RvcmUgZnJvbSAnU3RvcmVzL1RoZW1lJztcbmltcG9ydCBMYW5ndWFnZVN0b3JlIGZyb20gJ1N0b3Jlcy9MYW5ndWFnZSc7XG5pbXBvcnQgQXBwQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcbmltcG9ydCBDYXBhQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ2FwYSc7XG5cbmNsYXNzIEdlbmVyYWxBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5sYW5ndWFnZSA9IExhbmd1YWdlU3RvcmUubGFuZ3VhZ2U7XG5cdFx0dGhpcy5sYW5ndWFnZXMgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlcztcblx0XHR0aGlzLmxhbmd1YWdlQWRtaW4gPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlQWRtaW47XG5cdFx0dGhpcy5sYW5ndWFnZXNBZG1pbiA9IExhbmd1YWdlU3RvcmUubGFuZ3VhZ2VzQWRtaW47XG5cblx0XHR0aGlzLnRoZW1lID0gVGhlbWVTdG9yZS50aGVtZTtcblx0XHR0aGlzLnRoZW1lcyA9IFRoZW1lU3RvcmUudGhlbWVzO1xuXG5cdFx0dGhpcy5jYXBhVGhlbWVzID0gQ2FwYUFkbWluU3RvcmUudGhlbWVzO1xuXHRcdHRoaXMuY2FwYVVzZXJCYWNrZ3JvdW5kID0gQ2FwYUFkbWluU3RvcmUudXNlckJhY2tncm91bmQ7XG5cdFx0dGhpcy5jYXBhR3JhdmF0YXIgPSBDYXBhQWRtaW5TdG9yZS5ncmF2YXRhcjtcblx0XHR0aGlzLmNhcGFBZGRpdGlvbmFsQWNjb3VudHMgPSBDYXBhQWRtaW5TdG9yZS5hZGRpdGlvbmFsQWNjb3VudHM7XG5cdFx0dGhpcy5jYXBhSWRlbnRpdGllcyA9IENhcGFBZG1pblN0b3JlLmlkZW50aXRpZXM7XG5cdFx0dGhpcy5jYXBhQXR0YWNobWVudFRodW1ibmFpbHMgPSBDYXBhQWRtaW5TdG9yZS5hdHRhY2htZW50VGh1bWJuYWlscztcblx0XHR0aGlzLmNhcGFUZW1wbGF0ZXMgPSBDYXBhQWRtaW5TdG9yZS50ZW1wbGF0ZXM7XG5cblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyA9IEFwcEFkbWluU3RvcmUuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzO1xuXHRcdHRoaXMud2Vha1Bhc3N3b3JkID0gQXBwQWRtaW5TdG9yZS53ZWFrUGFzc3dvcmQ7XG5cdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIgPSBBcHBBZG1pblN0b3JlLm5ld01vdmVUb0ZvbGRlcjtcblxuXHRcdHRoaXMuZGF0YUZvbGRlckFjY2VzcyA9IEFwcEFkbWluU3RvcmUuZGF0YUZvbGRlckFjY2VzcztcblxuXHRcdHRoaXMubWFpbkF0dGFjaG1lbnRMaW1pdCA9IGtvXG5cdFx0XHQub2JzZXJ2YWJsZShwSW50KHNldHRpbmdzR2V0KCdBdHRhY2htZW50TGltaXQnKSkgLyAoTWFnaWNzLkJpdExlbmd0aDEwMjQgKiBNYWdpY3MuQml0TGVuZ3RoMTAyNCkpXG5cdFx0XHQuZXh0ZW5kKHsgcG9zSW50ZXJlcjogMjUgfSk7XG5cblx0XHR0aGlzLnVwbG9hZERhdGEgPSBzZXR0aW5nc0dldCgnUGhwVXBsb2FkU2l6ZXMnKTtcblx0XHR0aGlzLnVwbG9hZERhdGFEZXNjID1cblx0XHRcdHRoaXMudXBsb2FkRGF0YSAmJiAodGhpcy51cGxvYWREYXRhLnVwbG9hZF9tYXhfZmlsZXNpemUgfHwgdGhpcy51cGxvYWREYXRhLnBvc3RfbWF4X3NpemUpXG5cdFx0XHRcdD8gW1xuXHRcdFx0XHRcdFx0dGhpcy51cGxvYWREYXRhLnVwbG9hZF9tYXhfZmlsZXNpemVcblx0XHRcdFx0XHRcdFx0PyAndXBsb2FkX21heF9maWxlc2l6ZSA9ICcgKyB0aGlzLnVwbG9hZERhdGEudXBsb2FkX21heF9maWxlc2l6ZSArICc7ICdcblx0XHRcdFx0XHRcdFx0OiAnJyxcblx0XHRcdFx0XHRcdHRoaXMudXBsb2FkRGF0YS5wb3N0X21heF9zaXplID8gJ3Bvc3RfbWF4X3NpemUgPSAnICsgdGhpcy51cGxvYWREYXRhLnBvc3RfbWF4X3NpemUgOiAnJ1xuXHRcdFx0XHQgIF0uam9pbignJylcblx0XHRcdFx0OiAnJztcblxuXHRcdHRoaXMudGhlbWVzT3B0aW9ucyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLm1hcCh0aGlzLnRoZW1lcygpLCAodGhlbWUpID0+ICh7IG9wdFZhbHVlOiB0aGVtZSwgb3B0VGV4dDogY29udmVydFRoZW1lTmFtZSh0aGVtZSkgfSkpXG5cdFx0KTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VGdWxsTmFtZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbnZlcnRMYW5nTmFtZSh0aGlzLmxhbmd1YWdlKCkpKTtcblx0XHR0aGlzLmxhbmd1YWdlQWRtaW5GdWxsTmFtZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbnZlcnRMYW5nTmFtZSh0aGlzLmxhbmd1YWdlQWRtaW4oKSkpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50TGltaXRUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMubGFuZ3VhZ2VUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pblRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMTAwbXMgfSk7XG5cdFx0dGhpcy50aGVtZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmF0dGFjaG1lbnRMaW1pdFRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMiA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMubGFuZ3VhZ2VUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjMgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnRoZW1lVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGZSZWxvYWRMYW5ndWFnZUhlbHBlciA9IChzYXZlU2V0dGluZ3NTdGVwKSA9PiAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluVHJpZ2dlcihzYXZlU2V0dGluZ3NTdGVwKTtcblx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHRoaXMubGFuZ3VhZ2VBZG1pblRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKSwgTWFnaWNzLlRpbWUxcyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdHRoaXMubWFpbkF0dGFjaG1lbnRMaW1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjEsIHtcblx0XHRcdFx0XHQnQXR0YWNobWVudExpbWl0JzogcEludCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5sYW5ndWFnZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjIsIHtcblx0XHRcdFx0XHQnTGFuZ3VhZ2UnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmxhbmd1YWdlQWRtaW4uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuQW5pbWF0ZSk7XG5cdFx0XHRcdHRyYW5zbGF0b3JSZWxvYWQodHJ1ZSwgdmFsdWUpXG5cdFx0XHRcdFx0LnRoZW4oZlJlbG9hZExhbmd1YWdlSGVscGVyKFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdCksIGZSZWxvYWRMYW5ndWFnZUhlbHBlcihTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0KSlcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHRcdFx0J0xhbmd1YWdlQWRtaW4nOiB0cmltKHZhbHVlKVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy50aGVtZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGNoYW5nZVRoZW1lKHZhbHVlLCB0aGlzLnRoZW1lVHJpZ2dlcik7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjMsIHtcblx0XHRcdFx0XHQnVGhlbWUnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFBZGRpdGlvbmFsQWNjb3VudHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYUFkZGl0aW9uYWxBY2NvdW50cyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYUlkZW50aXRpZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYUlkZW50aXRpZXMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFUZW1wbGF0ZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYVRlbXBsYXRlcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYUdyYXZhdGFyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFHcmF2YXRhcic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFBdHRhY2htZW50VGh1bWJuYWlscyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYVRoZW1lcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhVGhlbWVzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhVXNlckJhY2tncm91bmQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYVVzZXJCYWNrZ3JvdW5kJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3Muc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQWxsb3dMYW5ndWFnZXNPblNldHRpbmdzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnTmV3TW92ZVRvRm9sZGVyJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG5cblx0c2VsZWN0TGFuZ3VhZ2UoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzJyksIFt0aGlzLmxhbmd1YWdlLCB0aGlzLmxhbmd1YWdlcygpLCBMYW5ndWFnZVN0b3JlLnVzZXJMYW5ndWFnZSgpXSk7XG5cdH1cblxuXHRzZWxlY3RMYW5ndWFnZUFkbWluKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0xhbmd1YWdlcycpLCBbXG5cdFx0XHR0aGlzLmxhbmd1YWdlQWRtaW4sXG5cdFx0XHR0aGlzLmxhbmd1YWdlc0FkbWluKCksXG5cdFx0XHRMYW5ndWFnZVN0b3JlLnVzZXJMYW5ndWFnZUFkbWluKClcblx0XHRdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0cGhwSW5mb0xpbmsoKSB7XG5cdFx0cmV0dXJuIHBocEluZm8oKTtcblx0fVxufVxuXG5leHBvcnQgeyBHZW5lcmFsQWRtaW5TZXR0aW5ncywgR2VuZXJhbEFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCBEb21haW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vRG9tYWluJztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmNsYXNzIERvbWFpbnNBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5kb21haW5zID0gRG9tYWluU3RvcmUuZG9tYWlucztcblxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+ICh0aGlzLmRvbWFpbnMubG9hZGluZygpID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpKTtcblxuXHRcdHRoaXMuZG9tYWluRm9yRGVsZXRpb24gPSBrby5vYnNlcnZhYmxlKG51bGwpLmRlbGV0ZUFjY2Vzc0hlbHBlcigpO1xuXG5cdFx0dGhpcy5vbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0ID0gXy5iaW5kKHRoaXMub25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCwgdGhpcyk7XG5cdFx0dGhpcy5vbkRvbWFpbkxvYWRSZXF1ZXN0ID0gXy5iaW5kKHRoaXMub25Eb21haW5Mb2FkUmVxdWVzdCwgdGhpcyk7XG5cdH1cblxuXHRjcmVhdGVEb21haW4oKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRG9tYWluJykpO1xuXHR9XG5cblx0Y3JlYXRlRG9tYWluQWxpYXMoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRG9tYWluQWxpYXMnKSk7XG5cdH1cblxuXHRkZWxldGVEb21haW4oZG9tYWluKSB7XG5cdFx0dGhpcy5kb21haW5zLnJlbW92ZShkb21haW4pO1xuXHRcdFJlbW90ZS5kb21haW5EZWxldGUodGhpcy5vbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0LCBkb21haW4ubmFtZSk7XG5cdH1cblxuXHRkaXNhYmxlRG9tYWluKGRvbWFpbikge1xuXHRcdGRvbWFpbi5kaXNhYmxlZCghZG9tYWluLmRpc2FibGVkKCkpO1xuXHRcdFJlbW90ZS5kb21haW5EaXNhYmxlKHRoaXMub25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCwgZG9tYWluLm5hbWUsIGRvbWFpbi5kaXNhYmxlZCgpKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdG9Eb20ub24oJ2NsaWNrJywgJy5iLWFkbWluLWRvbWFpbnMtbGlzdC10YWJsZSAuZS1pdGVtIC5lLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdGNvbnN0IGRvbWFpbkl0ZW0gPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0aWYgKGRvbWFpbkl0ZW0pIHtcblx0XHRcdFx0UmVtb3RlLmRvbWFpbihzZWxmLm9uRG9tYWluTG9hZFJlcXVlc3QsIGRvbWFpbkl0ZW0ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRnZXRBcHAoKS5yZWxvYWREb21haW5MaXN0KCk7XG5cdH1cblxuXHRvbkRvbWFpbkxvYWRSZXF1ZXN0KHNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Eb21haW4nKSwgW29EYXRhLlJlc3VsdF0pO1xuXHRcdH1cblx0fVxuXG5cdG9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QoKSB7XG5cdFx0Z2V0QXBwKCkucmVsb2FkRG9tYWluTGlzdCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IERvbWFpbnNBZG1pblNldHRpbmdzLCBEb21haW5zQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uLCBib29sVG9BamF4LCB0cmltIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmNsYXNzIExvZ2luQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckxhbmd1YWdlID0gQXBwU3RvcmUuZGV0ZXJtaW5lVXNlckxhbmd1YWdlO1xuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckRvbWFpbiA9IEFwcFN0b3JlLmRldGVybWluZVVzZXJEb21haW47XG5cblx0XHR0aGlzLmRlZmF1bHREb21haW4gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2dpbkRlZmF1bHREb21haW4nKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25Mb2dpbiA9IEFwcFN0b3JlLmFsbG93TGFuZ3VhZ2VzT25Mb2dpbjtcblxuXHRcdHRoaXMuZHVtbXkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRjb25zdCBmMSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuZGVmYXVsdERvbWFpbi50cmlnZ2VyLCB0aGlzKTtcblxuXHRcdFx0dGhpcy5kZXRlcm1pbmVVc2VyTGFuZ3VhZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnRGV0ZXJtaW5lVXNlckxhbmd1YWdlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5kZXRlcm1pbmVVc2VyRG9tYWluLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0RldGVybWluZVVzZXJEb21haW4nOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25Mb2dpbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdBbGxvd0xhbmd1YWdlc09uTG9naW4nOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmRlZmF1bHREb21haW4uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0J0xvZ2luRGVmYXVsdERvbWFpbic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSwgNTApO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5TZXR0aW5ncywgTG9naW5BZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24sIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciwgaW5BcnJheSwgdHJpbSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAsIFN0b3JhZ2VSZXN1bHRUeXBlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcbmltcG9ydCB7IGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmNsYXNzIENvbnRhY3RzQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyID0gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyO1xuXHRcdHRoaXMuZW5hYmxlQ29udGFjdHMgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0NvbnRhY3RzRW5hYmxlJykpO1xuXHRcdHRoaXMuY29udGFjdHNTeW5jID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdDb250YWN0c1N5bmMnKSk7XG5cblx0XHRjb25zdCBzdXBwb3J0ZWRUeXBlcyA9IFtdLFxuXHRcdFx0dHlwZXMgPSBbJ3NxbGl0ZScsICdteXNxbCcsICdwZ3NxbCddLFxuXHRcdFx0Z2V0VHlwZU5hbWUgPSAobmFtZSkgPT4ge1xuXHRcdFx0XHRzd2l0Y2ggKG5hbWUpIHtcblx0XHRcdFx0XHRjYXNlICdzcWxpdGUnOlxuXHRcdFx0XHRcdFx0bmFtZSA9ICdTUUxpdGUnO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnbXlzcWwnOlxuXHRcdFx0XHRcdFx0bmFtZSA9ICdNeVNRTCc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwZ3NxbCc6XG5cdFx0XHRcdFx0XHRuYW1lID0gJ1Bvc3RncmVTUUwnO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0XHR9O1xuXG5cdFx0aWYgKHNldHRpbmdzR2V0KCdTUUxpdGVJc1N1cHBvcnRlZCcpKSB7XG5cdFx0XHRzdXBwb3J0ZWRUeXBlcy5wdXNoKCdzcWxpdGUnKTtcblx0XHR9XG5cdFx0aWYgKHNldHRpbmdzR2V0KCdNeVNxbElzU3VwcG9ydGVkJykpIHtcblx0XHRcdHN1cHBvcnRlZFR5cGVzLnB1c2goJ215c3FsJyk7XG5cdFx0fVxuXHRcdGlmIChzZXR0aW5nc0dldCgnUG9zdGdyZVNxbElzU3VwcG9ydGVkJykpIHtcblx0XHRcdHN1cHBvcnRlZFR5cGVzLnB1c2goJ3Bnc3FsJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb250YWN0c1N1cHBvcnRlZCA9IDAgPCBzdXBwb3J0ZWRUeXBlcy5sZW5ndGg7XG5cblx0XHR0aGlzLmNvbnRhY3RzVHlwZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMuY29udGFjdHNUeXBlc09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5tYXAodGhpcy5jb250YWN0c1R5cGVzKCksICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBkaXNhYmxlZCA9IC0xID09PSBpbkFycmF5KHZhbHVlLCBzdXBwb3J0ZWRUeXBlcyk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0J2lkJzogdmFsdWUsXG5cdFx0XHRcdFx0J25hbWUnOiBnZXRUeXBlTmFtZSh2YWx1ZSkgKyAoZGlzYWJsZWQgPyAnICgnICsgaTE4bignSElOVFMvTk9UX1NVUFBPUlRFRCcpICsgJyknIDogJycpLFxuXHRcdFx0XHRcdCdkaXNhYmxlZCc6IGRpc2FibGVkXG5cdFx0XHRcdH07XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbnRhY3RzVHlwZXModHlwZXMpO1xuXHRcdHRoaXMuY29udGFjdHNUeXBlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLm1haW5Db250YWN0c1R5cGUgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKHtcblx0XHRcdFx0cmVhZDogdGhpcy5jb250YWN0c1R5cGUsXG5cdFx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRpZiAodmFsdWUgIT09IHRoaXMuY29udGFjdHNUeXBlKCkpIHtcblx0XHRcdFx0XHRcdGlmICgtMSA8IGluQXJyYXkodmFsdWUsIHN1cHBvcnRlZFR5cGVzKSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbnRhY3RzVHlwZSh2YWx1ZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKDAgPCBzdXBwb3J0ZWRUeXBlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250YWN0c1R5cGUoJycpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRhY3RzVHlwZS52YWx1ZUhhc011dGF0ZWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRcdHRoaXMuY29udGFjdHNUeXBlLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnBkb0RzbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvRHNuJykpO1xuXHRcdHRoaXMucGRvVXNlciA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvVXNlcicpKTtcblx0XHR0aGlzLnBkb1Bhc3N3b3JkID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnQ29udGFjdHNQZG9QYXNzd29yZCcpKTtcblxuXHRcdHRoaXMucGRvRHNuVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLnBkb1VzZXJUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMucGRvUGFzc3dvcmRUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMuY29udGFjdHNUeXBlVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMudGVzdGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvVHlwZScpKTtcblxuXHRcdHRoaXMub25UZXN0Q29udGFjdHNSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uVGVzdENvbnRhY3RzUmVzcG9uc2UsIHRoaXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICcnICE9PSBzZWxmLnBkb0RzbigpICYmICcnICE9PSBzZWxmLnBkb1VzZXIoKSlcblx0dGVzdENvbnRhY3RzQ29tbWFuZCgpIHtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKCcnKTtcblx0XHR0aGlzLnRlc3RpbmcodHJ1ZSk7XG5cblx0XHRSZW1vdGUudGVzdENvbnRhY3RzKHRoaXMub25UZXN0Q29udGFjdHNSZXNwb25zZSwge1xuXHRcdFx0J0NvbnRhY3RzUGRvVHlwZSc6IHRoaXMuY29udGFjdHNUeXBlKCksXG5cdFx0XHQnQ29udGFjdHNQZG9Ec24nOiB0aGlzLnBkb0RzbigpLFxuXHRcdFx0J0NvbnRhY3RzUGRvVXNlcic6IHRoaXMucGRvVXNlcigpLFxuXHRcdFx0J0NvbnRhY3RzUGRvUGFzc3dvcmQnOiB0aGlzLnBkb1Bhc3N3b3JkKClcblx0XHR9KTtcblx0fVxuXG5cdG9uVGVzdENvbnRhY3RzUmVzcG9uc2UocmVzdWx0LCBkYXRhKSB7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQgJiYgZGF0YS5SZXN1bHQuUmVzdWx0KSB7XG5cdFx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3ModHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IodHJ1ZSk7XG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZShkYXRhLlJlc3VsdC5NZXNzYWdlIHx8ICcnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKCcnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnRlc3RpbmcoZmFsc2UpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2VzcyhmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5wZG9Ec25UcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjMgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnBkb1VzZXJUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjQgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnBkb1Bhc3N3b3JkVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGY1ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5jb250YWN0c1R5cGVUcmlnZ2VyLCB0aGlzKTtcblxuXHRcdFx0dGhpcy5lbmFibGVDb250YWN0cy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDb250YWN0c0VuYWJsZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY29udGFjdHNTeW5jLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzU3luYyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY29udGFjdHNUeXBlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmNSwge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb1R5cGUnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnBkb0Rzbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjEsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNQZG9Ec24nOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnBkb1VzZXIuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYzLCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzUGRvVXNlcic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMucGRvUGFzc3dvcmQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGY0LCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzUGRvUGFzc3dvcmQnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNvbnRhY3RzVHlwZShzZXR0aW5nc0dldCgnQ29udGFjdHNQZG9UeXBlJykpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQ29udGFjdHNBZG1pblNldHRpbmdzLCBDb250YWN0c0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyB0cmltLCBib29sVG9BamF4IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IHBocEluZm8gfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBcHBBZG1pblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9BcHAnO1xuaW1wb3J0IENhcGFBZG1pblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9DYXBhJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCB7IGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmNsYXNzIFNlY3VyaXR5QWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzID0gQXBwQWRtaW5TdG9yZS51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXM7XG5cblx0XHR0aGlzLndlYWtQYXNzd29yZCA9IEFwcEFkbWluU3RvcmUud2Vha1Bhc3N3b3JkO1xuXG5cdFx0dGhpcy5jYXBhT3BlblBHUCA9IENhcGFBZG1pblN0b3JlLm9wZW5QR1A7XG5cblx0XHR0aGlzLmNhcGFUd29GYWN0b3JBdXRoID0gQ2FwYUFkbWluU3RvcmUudHdvRmFjdG9yQXV0aDtcblx0XHR0aGlzLmNhcGFUd29GYWN0b3JBdXRoRm9yY2UgPSBDYXBhQWRtaW5TdG9yZS50d29GYWN0b3JBdXRoRm9yY2U7XG5cblx0XHR0aGlzLmNhcGFUd29GYWN0b3JBdXRoLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aEZvcmNlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMudmVyaWZ5U3NsQ2VydGlmaWNhdGUgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ1ZlcmlmeVNzbENlcnRpZmljYXRlJykpO1xuXHRcdHRoaXMuYWxsb3dTZWxmU2lnbmVkID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdBbGxvd1NlbGZTaWduZWQnKSk7XG5cblx0XHR0aGlzLnZlcmlmeVNzbENlcnRpZmljYXRlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy5hbGxvd1NlbGZTaWduZWQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmlzVHdvRmFjdG9yRHJvcHBlclNob3duID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hZG1pbkxvZ2luID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnQWRtaW5Mb2dpbicpKTtcblx0XHR0aGlzLmFkbWluTG9naW5FcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXdFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFkbWluUGFzc3dvcmQuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZG1pbkxvZ2luLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluTG9naW5FcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3RXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3Mi5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXdFcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlID0gXy5iaW5kKHRoaXMub25OZXdBZG1pblBhc3N3b3JkUmVzcG9uc2UsIHRoaXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICcnICE9PSB0cmltKHNlbGYuYWRtaW5Mb2dpbigpKSAmJiAnJyAhPT0gc2VsZi5hZG1pblBhc3N3b3JkKCkpXG5cdHNhdmVOZXdBZG1pblBhc3N3b3JkQ29tbWFuZCgpIHtcblx0XHRpZiAoJycgPT09IHRyaW0odGhpcy5hZG1pbkxvZ2luKCkpKSB7XG5cdFx0XHR0aGlzLmFkbWluTG9naW5FcnJvcih0cnVlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5hZG1pblBhc3N3b3JkTmV3KCkgIT09IHRoaXMuYWRtaW5QYXNzd29yZE5ldzIoKSkge1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3RXJyb3IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXG5cdFx0UmVtb3RlLnNhdmVOZXdBZG1pblBhc3N3b3JkKHRoaXMub25OZXdBZG1pblBhc3N3b3JkUmVzcG9uc2UsIHtcblx0XHRcdCdMb2dpbic6IHRoaXMuYWRtaW5Mb2dpbigpLFxuXHRcdFx0J1Bhc3N3b3JkJzogdGhpcy5hZG1pblBhc3N3b3JkKCksXG5cdFx0XHQnTmV3UGFzc3dvcmQnOiB0aGlzLmFkbWluUGFzc3dvcmROZXcoKVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRzaG93VHdvRmFjdG9yRHJvcHBlcigpIHtcblx0XHR0aGlzLnR3b0ZhY3RvckRyb3BwZXJVc2VyKCcnKTtcblx0XHR0aGlzLmlzVHdvRmFjdG9yRHJvcHBlclNob3duKHRydWUpO1xuXG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR0aGlzLnR3b0ZhY3RvckRyb3BwZXJVc2VyLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxuXG5cdG9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkKCcnKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldygnJyk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcyKCcnKTtcblxuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2Vzcyh0cnVlKTtcblxuXHRcdFx0dGhpcy53ZWFrUGFzc3dvcmQoISFkYXRhLlJlc3VsdC5XZWFrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHR0aGlzLmNhcGFPcGVuUEdQLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnQ2FwYU9wZW5QR1AnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNhcGFUd29GYWN0b3JBdXRoLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnQ2FwYVR3b0ZhY3RvckF1dGgnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNhcGFUd29GYWN0b3JBdXRoRm9yY2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdDYXBhVHdvRmFjdG9yQXV0aEZvcmNlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdVc2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZlcmlmeVNzbENlcnRpZmljYXRlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnVmVyaWZ5U3NsQ2VydGlmaWNhdGUnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFsbG93U2VsZlNpZ25lZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0FsbG93U2VsZlNpZ25lZCc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmQoJycpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldygnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3MignJyk7XG5cblx0XHR0aGlzLmlzVHdvRmFjdG9yRHJvcHBlclNob3duKGZhbHNlKTtcblx0XHR0aGlzLnR3b0ZhY3RvckRyb3BwZXJVc2VyKCcnKTtcblx0XHR0aGlzLnR3b0ZhY3RvckRyb3BwZXJVc2VyLmZvY3VzZWQoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRwaHBJbmZvTGluaygpIHtcblx0XHRyZXR1cm4gcGhwSW5mbygpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNlY3VyaXR5QWRtaW5TZXR0aW5ncywgU2VjdXJpdHlBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uLCB0cmltLCBib29sVG9BamF4IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IFNvY2lhbFN0b3JlIGZyb20gJ1N0b3Jlcy9Tb2NpYWwnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuY2xhc3MgU29jaWFsQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlID0gU29jaWFsU3RvcmUuZ29vZ2xlLmVuYWJsZWQ7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEuYXV0aDtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZUF1dGhHbWFpbCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmF1dGhHbWFpbDtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZURyaXZlID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEuZHJpdmU7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVQcmV2aWV3ID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEucHJldmlldztcblxuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUmVxdWlyZUNsaWVudFNldHRpbmdzID0gU29jaWFsU3RvcmUuZ29vZ2xlLnJlcXVpcmUuY2xpZW50U2V0dGluZ3M7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVSZXF1aXJlQXBpS2V5ID0gU29jaWFsU3RvcmUuZ29vZ2xlLnJlcXVpcmUuYXBpS2V5U2V0dGluZ3M7XG5cblx0XHR0aGlzLmdvb2dsZUNsaWVudElEID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNsaWVudElEO1xuXHRcdHRoaXMuZ29vZ2xlQ2xpZW50U2VjcmV0ID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNsaWVudFNlY3JldDtcblx0XHR0aGlzLmdvb2dsZUFwaUtleSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5hcGlLZXk7XG5cblx0XHR0aGlzLmdvb2dsZVRyaWdnZXIxID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMuZ29vZ2xlVHJpZ2dlcjIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5nb29nbGVUcmlnZ2VyMyA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5zdXBwb3J0ZWQ7XG5cdFx0dGhpcy5mYWNlYm9va0VuYWJsZSA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLmVuYWJsZWQ7XG5cdFx0dGhpcy5mYWNlYm9va0FwcElEID0gU29jaWFsU3RvcmUuZmFjZWJvb2suYXBwSUQ7XG5cdFx0dGhpcy5mYWNlYm9va0FwcFNlY3JldCA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLmFwcFNlY3JldDtcblxuXHRcdHRoaXMuZmFjZWJvb2tUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmZhY2Vib29rVHJpZ2dlcjIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLnR3aXR0ZXJFbmFibGUgPSBTb2NpYWxTdG9yZS50d2l0dGVyLmVuYWJsZWQ7XG5cdFx0dGhpcy50d2l0dGVyQ29uc3VtZXJLZXkgPSBTb2NpYWxTdG9yZS50d2l0dGVyLmNvbnN1bWVyS2V5O1xuXHRcdHRoaXMudHdpdHRlckNvbnN1bWVyU2VjcmV0ID0gU29jaWFsU3RvcmUudHdpdHRlci5jb25zdW1lclNlY3JldDtcblxuXHRcdHRoaXMudHdpdHRlclRyaWdnZXIxID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMudHdpdHRlclRyaWdnZXIyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy5kcm9wYm94RW5hYmxlID0gU29jaWFsU3RvcmUuZHJvcGJveC5lbmFibGVkO1xuXHRcdHRoaXMuZHJvcGJveEFwaUtleSA9IFNvY2lhbFN0b3JlLmRyb3Bib3guYXBpS2V5O1xuXG5cdFx0dGhpcy5kcm9wYm94VHJpZ2dlcjEgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmZhY2Vib29rVHJpZ2dlcjEsIHRoaXMpLFxuXHRcdFx0XHRmMiA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuZmFjZWJvb2tUcmlnZ2VyMiwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy50d2l0dGVyVHJpZ2dlcjEsIHRoaXMpLFxuXHRcdFx0XHRmNCA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMudHdpdHRlclRyaWdnZXIyLCB0aGlzKSxcblx0XHRcdFx0ZjUgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmdvb2dsZVRyaWdnZXIxLCB0aGlzKSxcblx0XHRcdFx0ZjYgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmdvb2dsZVRyaWdnZXIyLCB0aGlzKSxcblx0XHRcdFx0ZjcgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmdvb2dsZVRyaWdnZXIzLCB0aGlzKSxcblx0XHRcdFx0ZjggPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmRyb3Bib3hUcmlnZ2VyMSwgdGhpcyk7XG5cblx0XHRcdHRoaXMuZmFjZWJvb2tFbmFibGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5mYWNlYm9va1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0XHQnRmFjZWJvb2tFbmFibGUnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5mYWNlYm9va0FwcElELnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjEsIHtcblx0XHRcdFx0XHRcdCdGYWNlYm9va0FwcElEJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmFjZWJvb2tBcHBTZWNyZXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5mYWNlYm9va1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMiwge1xuXHRcdFx0XHRcdFx0J0ZhY2Vib29rQXBwU2VjcmV0JzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudHdpdHRlckVuYWJsZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignVHdpdHRlckVuYWJsZScsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMudHdpdHRlckNvbnN1bWVyS2V5LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdUd2l0dGVyQ29uc3VtZXJLZXknLCB0cmltLCBmMykpO1xuXHRcdFx0dGhpcy50d2l0dGVyQ29uc3VtZXJTZWNyZXQuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ1R3aXR0ZXJDb25zdW1lclNlY3JldCcsIHRyaW0sIGY0KSk7XG5cblx0XHRcdHRoaXMuZ29vZ2xlRW5hYmxlLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGUnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUVuYWJsZUF1dGguc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZUF1dGgnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUVuYWJsZUF1dGhHbWFpbC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlRW5hYmxlQXV0aEdtYWlsJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVEcml2ZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlRW5hYmxlRHJpdmUnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUVuYWJsZVByZXZpZXcuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZVByZXZpZXcnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUNsaWVudElELnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVDbGllbnRJRCcsIHRyaW0sIGY1KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUNsaWVudFNlY3JldC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlQ2xpZW50U2VjcmV0JywgdHJpbSwgZjYpKTtcblx0XHRcdHRoaXMuZ29vZ2xlQXBpS2V5LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVBcGlLZXknLCB0cmltLCBmNykpO1xuXG5cdFx0XHR0aGlzLmRyb3Bib3hFbmFibGUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0Ryb3Bib3hFbmFibGUnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLmRyb3Bib3hBcGlLZXkuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0Ryb3Bib3hBcGlLZXknLCB0cmltLCBmOCkpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgU29jaWFsQWRtaW5TZXR0aW5ncywgU29jaWFsQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCBQbHVnaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGx1Z2luJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuY2xhc3MgUGx1Z2luc0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmVuYWJsZWRQbHVnaW5zID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdFbmFibGVkUGx1Z2lucycpKTtcblxuXHRcdHRoaXMucGx1Z2lucyA9IFBsdWdpblN0b3JlLnBsdWdpbnM7XG5cdFx0dGhpcy5wbHVnaW5zRXJyb3IgPSBQbHVnaW5TdG9yZS5wbHVnaW5zLmVycm9yO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKFBsdWdpblN0b3JlLnBsdWdpbnMubG9hZGluZygpID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpKTtcblxuXHRcdHRoaXMub25QbHVnaW5Mb2FkUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QsIHRoaXMpO1xuXHRcdHRoaXMub25QbHVnaW5EaXNhYmxlUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QsIHRoaXMpO1xuXHR9XG5cblx0ZGlzYWJsZVBsdWdpbihwbHVnaW4pIHtcblx0XHRwbHVnaW4uZGlzYWJsZWQoIXBsdWdpbi5kaXNhYmxlZCgpKTtcblx0XHRSZW1vdGUucGx1Z2luRGlzYWJsZSh0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QsIHBsdWdpbi5uYW1lLCBwbHVnaW4uZGlzYWJsZWQoKSk7XG5cdH1cblxuXHRjb25maWd1cmVQbHVnaW4ocGx1Z2luKSB7XG5cdFx0UmVtb3RlLnBsdWdpbih0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QsIHBsdWdpbi5uYW1lKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0b0RvbVxuXHRcdFx0Lm9uKCdjbGljaycsICcuZS1pdGVtIC5jb25maWd1cmUtcGx1Z2luLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBwbHVnaW4gPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRpZiAocGx1Z2luKSB7XG5cdFx0XHRcdFx0c2VsZi5jb25maWd1cmVQbHVnaW4ocGx1Z2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmUtaXRlbSAuZGlzYWJsZWQtcGx1Z2luJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdGNvbnN0IHBsdWdpbiA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChwbHVnaW4pIHtcblx0XHRcdFx0XHRzZWxmLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLmVuYWJsZWRQbHVnaW5zLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnRW5hYmxlZFBsdWdpbnMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcignJyk7XG5cdFx0Z2V0QXBwKCkucmVsb2FkUGx1Z2luTGlzdCgpO1xuXHR9XG5cblx0b25QbHVnaW5Mb2FkUmVxdWVzdChyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL1BsdWdpbicpLCBbZGF0YS5SZXN1bHRdKTtcblx0XHR9XG5cdH1cblxuXHRvblBsdWdpbkRpc2FibGVSZXF1ZXN0KHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0aWYgKCFkYXRhLlJlc3VsdCAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRpZiAoTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSA9PT0gZGF0YS5FcnJvckNvZGUgJiYgZGF0YS5FcnJvck1lc3NhZ2UgJiYgJycgIT09IGRhdGEuRXJyb3JNZXNzYWdlKSB7XG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcihkYXRhLkVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGdldEFwcCgpLnJlbG9hZFBsdWdpbkxpc3QoKTtcblx0fVxufVxuXG5leHBvcnQgeyBQbHVnaW5zQWRtaW5TZXR0aW5ncywgUGx1Z2luc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBQYWNrYWdlc0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnBhY2thZ2VzRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucGFja2FnZXMgPSBQYWNrYWdlU3RvcmUucGFja2FnZXM7XG5cdFx0dGhpcy5wYWNrYWdlc1JlYWwgPSBQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsO1xuXHRcdHRoaXMucGFja2FnZXNNYWluVXBkYXRhYmxlID0gUGFja2FnZVN0b3JlLnBhY2thZ2VzTWFpblVwZGF0YWJsZTtcblxuXHRcdHRoaXMucGFja2FnZXNDdXJyZW50ID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMucGFja2FnZXMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uaW5zdGFsbGVkICYmICFpdGVtLmNvbXBhcmUpXG5cdFx0KTtcblx0XHR0aGlzLnBhY2thZ2VzQXZhaWxhYmxlRm9yVXBkYXRlID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMucGFja2FnZXMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uaW5zdGFsbGVkICYmICEhaXRlbS5jb21wYXJlKVxuXHRcdCk7XG5cdFx0dGhpcy5wYWNrYWdlc0F2YWlsYWJsZUZvckluc3RhbGxhdGlvbiA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiBpdGVtICYmICcnID09PSBpdGVtLmluc3RhbGxlZClcblx0XHQpO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKFBhY2thZ2VTdG9yZS5wYWNrYWdlcy5sb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMucGFja2FnZXNFcnJvcignJyk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGdldEFwcCgpLnJlbG9hZFBhY2thZ2VzTGlzdCgpO1xuXHR9XG5cblx0cmVxdWVzdEhlbHBlcihwYWNrYWdlVG9SZXF1ZXN0LCBpbnN0YWxsKSB7XG5cdFx0cmV0dXJuIChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSByZXN1bHQgfHwgIWRhdGEgfHwgIWRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGlmIChkYXRhICYmIGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0dGhpcy5wYWNrYWdlc0Vycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucGFja2FnZXNFcnJvcihcblx0XHRcdFx0XHRcdGdldE5vdGlmaWNhdGlvbihpbnN0YWxsID8gTm90aWZpY2F0aW9uLkNhbnRJbnN0YWxsUGFja2FnZSA6IE5vdGlmaWNhdGlvbi5DYW50RGVsZXRlUGFja2FnZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdF8uZWFjaCh0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmIChpdGVtICYmIHBhY2thZ2VUb1JlcXVlc3QgJiYgaXRlbS5sb2FkaW5nICYmIGl0ZW0ubG9hZGluZygpICYmIHBhY2thZ2VUb1JlcXVlc3QuZmlsZSA9PT0gaXRlbS5maWxlKSB7XG5cdFx0XHRcdFx0cGFja2FnZVRvUmVxdWVzdC5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0XHRpdGVtLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0LlJlbG9hZCkge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRQYWNrYWdlc0xpc3QoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZGVsZXRlUGFja2FnZShwYWNrYWdlVG9EZWxldGUpIHtcblx0XHRpZiAocGFja2FnZVRvRGVsZXRlKSB7XG5cdFx0XHRwYWNrYWdlVG9EZWxldGUubG9hZGluZyh0cnVlKTtcblx0XHRcdFJlbW90ZS5wYWNrYWdlRGVsZXRlKHRoaXMucmVxdWVzdEhlbHBlcihwYWNrYWdlVG9EZWxldGUsIGZhbHNlKSwgcGFja2FnZVRvRGVsZXRlKTtcblx0XHR9XG5cdH1cblxuXHRpbnN0YWxsUGFja2FnZShwYWNrYWdlVG9JbnN0YWxsKSB7XG5cdFx0aWYgKHBhY2thZ2VUb0luc3RhbGwpIHtcblx0XHRcdHBhY2thZ2VUb0luc3RhbGwubG9hZGluZyh0cnVlKTtcblx0XHRcdFJlbW90ZS5wYWNrYWdlSW5zdGFsbCh0aGlzLnJlcXVlc3RIZWxwZXIocGFja2FnZVRvSW5zdGFsbCwgdHJ1ZSksIHBhY2thZ2VUb0luc3RhbGwpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBQYWNrYWdlc0FkbWluU2V0dGluZ3MsIFBhY2thZ2VzQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgYXBwU2V0dGluZ3NHZXQsIHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBDb3JlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NvcmUnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmNsYXNzIEFib3V0QWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudmVyc2lvbiA9IGtvLm9ic2VydmFibGUoYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSk7XG5cdFx0dGhpcy5hY2Nlc3MgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0NvcmVBY2Nlc3MnKSk7XG5cdFx0dGhpcy5lcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29yZVJlYWwgPSBDb3JlU3RvcmUuY29yZVJlYWw7XG5cdFx0dGhpcy5jb3JlQ2hhbm5lbCA9IENvcmVTdG9yZS5jb3JlQ2hhbm5lbDtcblx0XHR0aGlzLmNvcmVUeXBlID0gQ29yZVN0b3JlLmNvcmVUeXBlO1xuXHRcdHRoaXMuY29yZVVwZGF0YWJsZSA9IENvcmVTdG9yZS5jb3JlVXBkYXRhYmxlO1xuXHRcdHRoaXMuY29yZUFjY2VzcyA9IENvcmVTdG9yZS5jb3JlQWNjZXNzO1xuXHRcdHRoaXMuY29yZUNoZWNraW5nID0gQ29yZVN0b3JlLmNvcmVDaGVja2luZztcblx0XHR0aGlzLmNvcmVVcGRhdGluZyA9IENvcmVTdG9yZS5jb3JlVXBkYXRpbmc7XG5cdFx0dGhpcy5jb3JlV2FybmluZyA9IENvcmVTdG9yZS5jb3JlV2FybmluZztcblx0XHR0aGlzLmNvcmVWZXJzaW9uID0gQ29yZVN0b3JlLmNvcmVWZXJzaW9uO1xuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb24gPSBDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb247XG5cdFx0dGhpcy5jb3JlUmVtb3RlUmVsZWFzZSA9IENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSA9IENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmU7XG5cblx0XHR0aGlzLmNvcmVSZW1vdGVWZXJzaW9uSHRtbERlc2MgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIGkxOG4oJ1RBQl9BQk9VVC9IVE1MX05FV19WRVJTSU9OJywgeyAnVkVSU0lPTic6IHRoaXMuY29yZVJlbW90ZVZlcnNpb24oKSB9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3RhdHVzVHlwZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGxldCB0eXBlID0gJyc7XG5cdFx0XHRjb25zdCB2ZXJzaW9uVG9Db21wYXJlID0gdGhpcy5jb3JlVmVyc2lvbkNvbXBhcmUoKSxcblx0XHRcdFx0aXNDaGVja2luZyA9IHRoaXMuY29yZUNoZWNraW5nKCksXG5cdFx0XHRcdGlzVXBkYXRpbmcgPSB0aGlzLmNvcmVVcGRhdGluZygpLFxuXHRcdFx0XHRpc1JlYWwgPSB0aGlzLmNvcmVSZWFsKCk7XG5cblx0XHRcdGlmIChpc0NoZWNraW5nKSB7XG5cdFx0XHRcdHR5cGUgPSAnY2hlY2tpbmcnO1xuXHRcdFx0fSBlbHNlIGlmIChpc1VwZGF0aW5nKSB7XG5cdFx0XHRcdHR5cGUgPSAndXBkYXRpbmcnO1xuXHRcdFx0fSBlbHNlIGlmIChpc1JlYWwgJiYgMCA9PT0gdmVyc2lvblRvQ29tcGFyZSkge1xuXHRcdFx0XHR0eXBlID0gJ3VwLXRvLWRhdGUnO1xuXHRcdFx0fSBlbHNlIGlmIChpc1JlYWwgJiYgLTEgPT09IHZlcnNpb25Ub0NvbXBhcmUpIHtcblx0XHRcdFx0dHlwZSA9ICdhdmFpbGFibGUnO1xuXHRcdFx0fSBlbHNlIGlmICghaXNSZWFsKSB7XG5cdFx0XHRcdHR5cGUgPSAnZXJyb3InO1xuXHRcdFx0XHR0aGlzLmVycm9yRGVzYygnQ2Fubm90IGFjY2VzcyB0aGUgcmVwb3NpdG9yeSBhdCB0aGUgbW9tZW50LicpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHlwZTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0aWYgKHRoaXMuYWNjZXNzKCkpIHtcblx0XHRcdGdldEFwcCgpLnJlbG9hZENvcmVEYXRhKCk7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlQ29yZURhdGEoKSB7XG5cdFx0aWYgKCF0aGlzLmNvcmVVcGRhdGluZygpKSB7XG5cdFx0XHRnZXRBcHAoKS51cGRhdGVDb3JlRGF0YSgpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYm91dEFkbWluU2V0dGluZ3MsIEFib3V0QWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQnJhbmRpbmdBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy50aXRsZSA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1RpdGxlJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5sb2FkaW5nRGVzYyA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvYWRpbmdEZXNjcmlwdGlvbicpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMuZmF2aWNvblVybCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0Zhdmljb25VcmwnKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luTG9nbyA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luTG9nbycpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9naW5CYWNrZ3JvdW5kID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5CYWNrZ3JvdW5kJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VyTG9nbyA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1VzZXJMb2dvJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VyTG9nb01lc3NhZ2UgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VyTG9nb01lc3NhZ2UnKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLnVzZXJJZnJhbWVNZXNzYWdlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlcklmcmFtZU1lc3NhZ2UnKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLnVzZXJMb2dvVGl0bGUgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VyTG9nb1RpdGxlJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5sb2dpbkRlc2NyaXB0aW9uID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5EZXNjcmlwdGlvbicpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9naW5Dc3MgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2dpbkNzcycpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckNzcyA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1VzZXJDc3MnKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLndlbGNvbWVQYWdlVXJsID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnV2VsY29tZVBhZ2VVcmwnKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLndlbGNvbWVQYWdlRGlzcGxheSA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1dlbGNvbWVQYWdlRGlzcGxheScpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMud2VsY29tZVBhZ2VEaXNwbGF5Lm9wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0eyBvcHRWYWx1ZTogJ25vbmUnLCBvcHRUZXh0OiBpMThuKCdUQUJfQlJBTkRJTkcvT1BUSU9OX1dFTENPTUVfUEFHRV9ESVNQTEFZX05PTkUnKSB9LFxuXHRcdFx0XHR7IG9wdFZhbHVlOiAnb25jZScsIG9wdFRleHQ6IGkxOG4oJ1RBQl9CUkFORElORy9PUFRJT05fV0VMQ09NRV9QQUdFX0RJU1BMQVlfT05DRScpIH0sXG5cdFx0XHRcdHsgb3B0VmFsdWU6ICdhbHdheXMnLCBvcHRUZXh0OiBpMThuKCdUQUJfQlJBTkRJTkcvT1BUSU9OX1dFTENPTUVfUEFHRV9ESVNQTEFZX0FMV0FZUycpIH1cblx0XHRcdF07XG5cdFx0fSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnRpdGxlLnRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMiA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMubG9hZGluZ0Rlc2MudHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5mYXZpY29uVXJsLnRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLnRpdGxlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdUaXRsZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubG9hZGluZ0Rlc2Muc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0J0xvYWRpbmdEZXNjcmlwdGlvbic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmF2aWNvblVybC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjMsIHtcblx0XHRcdFx0XHQnRmF2aWNvblVybCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblxuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxvZ2luTG9nby50cmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxvZ2luRGVzY3JpcHRpb24udHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5sb2dpbkNzcy50cmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjQgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnVzZXJMb2dvLnRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmNSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMudXNlckxvZ29UaXRsZS50cmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjYgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxvZ2luQmFja2dyb3VuZC50cmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjcgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnVzZXJDc3MudHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGY4ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy53ZWxjb21lUGFnZVVybC50cmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjkgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLndlbGNvbWVQYWdlRGlzcGxheS50cmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjEwID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy51c2VyTG9nb01lc3NhZ2UudHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYxMSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMudXNlcklmcmFtZU1lc3NhZ2UudHJpZ2dlciwgdGhpcyk7XG5cblx0XHRcdHRoaXMubG9naW5Mb2dvLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdMb2dpbkxvZ28nOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmxvZ2luRGVzY3JpcHRpb24uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0J0xvZ2luRGVzY3JpcHRpb24nOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmxvZ2luQ3NzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMywge1xuXHRcdFx0XHRcdCdMb2dpbkNzcyc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudXNlckxvZ28uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGY0LCB7XG5cdFx0XHRcdFx0J1VzZXJMb2dvJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy51c2VyTG9nb1RpdGxlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmNSwge1xuXHRcdFx0XHRcdCdVc2VyTG9nb1RpdGxlJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy51c2VyTG9nb01lc3NhZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxMCwge1xuXHRcdFx0XHRcdCdVc2VyTG9nb01lc3NhZ2UnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnVzZXJJZnJhbWVNZXNzYWdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMTEsIHtcblx0XHRcdFx0XHQnVXNlcklmcmFtZU1lc3NhZ2UnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmxvZ2luQmFja2dyb3VuZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjYsIHtcblx0XHRcdFx0XHQnTG9naW5CYWNrZ3JvdW5kJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy51c2VyQ3NzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmNywge1xuXHRcdFx0XHRcdCdVc2VyQ3NzJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy53ZWxjb21lUGFnZVVybC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjgsIHtcblx0XHRcdFx0XHQnV2VsY29tZVBhZ2VVcmwnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLndlbGNvbWVQYWdlRGlzcGxheS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjksIHtcblx0XHRcdFx0XHQnV2VsY29tZVBhZ2VEaXNwbGF5JzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEJyYW5kaW5nQWRtaW5TZXR0aW5ncywgQnJhbmRpbmdBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBsZWZ0UGFuZWxEaXNhYmxlZCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHsgdmlldywgVmlld1R5cGUsIHNldHRpbmdzTWVudUtleXNIYW5kbGVyIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L0FkbWluL1NldHRpbmdzL01lbnUnLFxuXHR0eXBlOiBWaWV3VHlwZS5MZWZ0LFxuXHR0ZW1wbGF0ZUlEOiAnQWRtaW5NZW51J1xufSlcbmNsYXNzIE1lbnVTZXR0aW5nc0FkbWluVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHQvKipcblx0ICogQHBhcmFtIHs/fSBzY3JlZW5cblx0ICovXG5cdGNvbnN0cnVjdG9yKHNjcmVlbikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmxlZnRQYW5lbERpc2FibGVkID0gbGVmdFBhbmVsRGlzYWJsZWQ7XG5cblx0XHR0aGlzLm1lbnUgPSBzY3JlZW4ubWVudTtcblx0fVxuXG5cdGxpbmsocm91dGUpIHtcblx0XHRyZXR1cm4gJyMvJyArIHJvdXRlO1xuXHR9XG5cblx0b25CdWlsZChkb20pIHtcblx0XHRrZXkoJ3VwLCBkb3duJywgS2V5U3RhdGUuU2V0dGluZ3MsIHNldHRpbmdzTWVudUtleXNIYW5kbGVyKCQoJy5iLWFkbWluLW1lbnUgLmUtaXRlbScsIGRvbSkpKTtcblx0fVxufVxuXG5leHBvcnQgeyBNZW51U2V0dGluZ3NBZG1pblZpZXcsIE1lbnVTZXR0aW5nc0FkbWluVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCBEb21haW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vRG9tYWluJztcbmltcG9ydCBQbHVnaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGx1Z2luJztcbmltcG9ydCBQYWNrYWdlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BhY2thZ2UnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHZpZXcsIFZpZXdUeXBlIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L0FkbWluL1NldHRpbmdzL1BhbmUnLFxuXHR0eXBlOiBWaWV3VHlwZS5SaWdodCxcblx0dGVtcGxhdGVJRDogJ0FkbWluUGFuZSdcbn0pXG5jbGFzcyBQYW5lU2V0dGluZ3NBZG1pblZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuYWRtaW5Eb21haW4gPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdBZG1pbkRvbWFpbicpKTtcblx0XHR0aGlzLnZlcnNpb24gPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd2ZXJzaW9uJykpO1xuXG5cdFx0dGhpcy5hZG1pbk1hbkxvYWRpbmcgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdCcwMDAnICE9PVxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0RG9tYWluU3RvcmUuZG9tYWlucy5sb2FkaW5nKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcoKSA/ICcxJyA6ICcwJ1xuXHRcdFx0XHRdLmpvaW4oJycpXG5cdFx0KTtcblxuXHRcdHRoaXMuYWRtaW5NYW5Mb2FkaW5nVmlzaWJpbGl0eSA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoKCkgPT4gKHRoaXMuYWRtaW5NYW5Mb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpXG5cdFx0XHQuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAzMDAgfSk7XG5cdH1cblxuXHRsb2dvdXRDbGljaygpIHtcblx0XHRSZW1vdGUuYWRtaW5Mb2dvdXQoKCkgPT4ge1xuXHRcdFx0Z2V0QXBwKCkubG9naW5BbmRMb2dvdXRSZWxvYWQodHJ1ZSwgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGFuZVNldHRpbmdzQWRtaW5WaWV3LCBQYW5lU2V0dGluZ3NBZG1pblZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgQWJzdHJhY3RTY3JlZW4gfSBmcm9tICdLbm9pbi9BYnN0cmFjdFNjcmVlbic7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgTG9naW5BZG1pblZpZXcgfSBmcm9tICdWaWV3L0FkbWluL0xvZ2luJztcblxuY2xhc3MgTG9naW5BZG1pblNjcmVlbiBleHRlbmRzIEFic3RyYWN0U2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ2xvZ2luJywgW0xvZ2luQWRtaW5WaWV3XSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5TY3JlZW4sIExvZ2luQWRtaW5TY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBfIGZyb20gJ18nO1xuXG5pbXBvcnQgeyB0cmltLCB0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgJHdpbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHZpZXcsIGNvbW1hbmQsIFZpZXdUeXBlLCByb3V0ZU9mZiB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9BZG1pbi9Mb2dpbicsXG5cdHR5cGU6IFZpZXdUeXBlLkNlbnRlcixcblx0dGVtcGxhdGVJRDogJ0FkbWluTG9naW4nXG59KVxuY2xhc3MgTG9naW5BZG1pblZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5tb2JpbGVEZXZpY2UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGVEZXZpY2UnKTtcblxuXHRcdHRoaXMuaGlkZVN1Ym1pdEJ1dHRvbiA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2hpZGVTdWJtaXRCdXR0b24nKTtcblxuXHRcdHRoaXMubG9naW4gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubG9naW5FcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICdmYWxzZVRpbWVvdXQnOiA1MDAgfSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgJ2ZhbHNlVGltZW91dCc6IDUwMCB9KTtcblxuXHRcdHRoaXMubG9naW5Gb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mb3JtSGlkZGVuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZvcm1FcnJvciA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMubG9naW5FcnJvckFuaW1hdGlvbigpIHx8IHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbigpKTtcblxuXHRcdHRoaXMubG9naW4uc3Vic2NyaWJlKCgpID0+IHRoaXMubG9naW5FcnJvcihmYWxzZSkpO1xuXG5cdFx0dGhpcy5wYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYXNzd29yZEVycm9yKGZhbHNlKSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3Iuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLmxvZ2luRXJyb3JBbmltYXRpb24oISF2KSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkRXJyb3Iuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkRXJyb3JBbmltYXRpb24oISF2KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdHN1Ym1pdENvbW1hbmQoKSB7XG5cdFx0dHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKCk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IoJycgPT09IHRyaW0odGhpcy5sb2dpbigpKSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yKCcnID09PSB0cmltKHRoaXMucGFzc3dvcmQoKSkpO1xuXG5cdFx0aWYgKHRoaXMubG9naW5FcnJvcigpIHx8IHRoaXMucGFzc3dvcmRFcnJvcigpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KHRydWUpO1xuXHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXG5cdFx0UmVtb3RlLmFkbWluTG9naW4oXG5cdFx0XHQoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuYWN0aXZhdGUnKTtcblxuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiAnQWRtaW5Mb2dpbicgPT09IG9EYXRhLkFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLmxvZ2luQW5kTG9nb3V0UmVsb2FkKHRydWUpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAob0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24ob0RhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5sb2dpbigpLFxuXHRcdFx0dGhpcy5wYXNzd29yZCgpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRoaXMubG9naW5Gb2N1cyh0cnVlKTtcblx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmxvZ2luRm9jdXMoZmFsc2UpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHR0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UodHJ1ZSk7XG5cdH1cblxuXHRzdWJtaXRGb3JtKCkge1xuXHRcdHRoaXMuc3VibWl0Q29tbWFuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5WaWV3LCBMb2dpbkFkbWluVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgYm9vdHN0cmFwIGZyb20gJ2Jvb3RzdHJhcCc7XG5pbXBvcnQgQXBwIGZyb20gJ0FwcC9BZG1pbic7XG5cbmJvb3RzdHJhcChBcHApO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Eb21haW5BbGlhcycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNEb21haW5BbGlhcydcbn0pXG5jbGFzcyBEb21haW5BbGlhc1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5zYXZpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZ0Vycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hbGlhcyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5kb21haW5zID0gRG9tYWluU3RvcmUuZG9tYWluc1dpdGhvdXRBbGlhc2VzO1xuXG5cdFx0dGhpcy5kb21haW5zT3B0aW9ucyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLm1hcCh0aGlzLmRvbWFpbnMoKSwgKGl0ZW0pID0+ICh7IG9wdFZhbHVlOiBpdGVtLm5hbWUsIG9wdFRleHQ6IGl0ZW0ubmFtZSB9KSlcblx0XHQpO1xuXG5cdFx0dGhpcy5jYW5CZVNhdmVkID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMuc2F2aW5nKCkgJiYgJycgIT09IHRoaXMubmFtZSgpICYmICcnICE9PSB0aGlzLmFsaWFzKCkpO1xuXG5cdFx0dGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVTYXZlZCgpKVxuXHRjcmVhdGVDb21tYW5kKCkge1xuXHRcdHRoaXMuc2F2aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVEb21haW5BbGlhcyh0aGlzLm9uRG9tYWluQWxpYXNDcmVhdGVPclNhdmVSZXNwb25zZSwgdGhpcy5uYW1lKCksIHRoaXMuYWxpYXMoKSk7XG5cdH1cblxuXHRvbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UocmVzdWx0LCBkYXRhKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0aWYgKGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0XHRcdFx0dGhpcy5jbG9zZUNvbW1hbmQoKTtcblx0XHRcdH0gZWxzZSBpZiAoTm90aWZpY2F0aW9uLkRvbWFpbkFscmVhZHlFeGlzdHMgPT09IGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2aW5nRXJyb3IoaTE4bignRVJST1JTL0RPTUFJTl9BTFJFQURZX0VYSVNUUycpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvVU5LTk9XTl9FUlJPUicpKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5jbGVhckZvcm0oKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHRpZiAoJycgPT09IHRoaXMubmFtZSgpICYmICFiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR0aGlzLm5hbWUuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhckZvcm0oKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nRXJyb3IoJycpO1xuXG5cdFx0dGhpcy5uYW1lKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZChmYWxzZSk7XG5cblx0XHR0aGlzLmFsaWFzKCcnKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5BbGlhc1BvcHVwVmlldywgRG9tYWluQWxpYXNQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSwgTWFnaWNzLCBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGlzTm9uRW1wdHlBcnJheSwgZGVsZWdhdGVSdW4gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQsIGlzUG9wdXBWaXNpYmxlLCBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1BsdWdpbicsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNQbHVnaW4nXG59KVxuY2xhc3MgUGx1Z2luUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSwgdGhpcyk7XG5cblx0XHR0aGlzLnNhdmVFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5yZWFkbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29uZmlndXJlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmhhc1JlYWRtZSA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLnJlYWRtZSgpKTtcblx0XHR0aGlzLmhhc0NvbmZpZ3VyYXRpb24gPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5jb25maWd1cmVzKCkubGVuZ3RoKTtcblxuXHRcdHRoaXMucmVhZG1lUG9wb3ZlckNvbmYgPSB7XG5cdFx0XHQncGxhY2VtZW50JzogJ3JpZ2h0Jyxcblx0XHRcdCd0cmlnZ2VyJzogJ2hvdmVyJyxcblx0XHRcdCd0aXRsZSc6IGkxOG4oJ1BPUFVQU19QTFVHSU4vVE9PTFRJUF9BQk9VVF9USVRMRScpLFxuXHRcdFx0J2NvbnRhaW5lcic6ICdib2R5Jyxcblx0XHRcdCdodG1sJzogdHJ1ZSxcblx0XHRcdCdjb250ZW50JzogKCkgPT4gYDxwcmU+JHt0aGlzLnJlYWRtZSgpfTwvcHJlPmBcblx0XHR9O1xuXG5cdFx0dGhpcy5iRGlzYWJlQ2xvc2VPbkVzYyA9IHRydWU7XG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuQWxsO1xuXG5cdFx0dGhpcy50cnlUb0Nsb3NlUG9wdXAgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLnRyeVRvQ2xvc2VQb3B1cCwgdGhpcyksIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuaGFzQ29uZmlndXJhdGlvbigpKVxuXHRzYXZlQ29tbWFuZCgpIHtcblx0XHRjb25zdCBsaXN0ID0ge307XG5cdFx0bGlzdC5OYW1lID0gdGhpcy5uYW1lKCk7XG5cblx0XHRfLmVhY2godGhpcy5jb25maWd1cmVzKCksIChvSXRlbSkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gb0l0ZW0udmFsdWUoKTtcblx0XHRcdGlmIChmYWxzZSA9PT0gdmFsdWUgfHwgdHJ1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA/ICcxJyA6ICcwJztcblx0XHRcdH1cblx0XHRcdGxpc3RbJ18nICsgb0l0ZW0uTmFtZV0gPSB2YWx1ZTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZUVycm9yKCcnKTtcblx0XHRSZW1vdGUucGx1Z2luU2V0dGluZ3NVcGRhdGUodGhpcy5vblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UsIGxpc3QpO1xuXHR9XG5cblx0b25QbHVnaW5TZXR0aW5nc1VwZGF0ZVJlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2F2ZUVycm9yKCcnKTtcblx0XHRcdGlmIChkYXRhICYmIGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUVycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zYXZlRXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50U2F2ZVBsdWdpblNldHRpbmdzKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KG9QbHVnaW4pIHtcblx0XHR0aGlzLm5hbWUoKTtcblx0XHR0aGlzLnJlYWRtZSgpO1xuXHRcdHRoaXMuY29uZmlndXJlcyhbXSk7XG5cblx0XHRpZiAob1BsdWdpbikge1xuXHRcdFx0dGhpcy5uYW1lKG9QbHVnaW4uTmFtZSk7XG5cdFx0XHR0aGlzLnJlYWRtZShvUGx1Z2luLlJlYWRtZSk7XG5cblx0XHRcdGNvbnN0IGNvbmZpZyA9IG9QbHVnaW4uQ29uZmlnO1xuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjb25maWcpKSB7XG5cdFx0XHRcdHRoaXMuY29uZmlndXJlcyhcblx0XHRcdFx0XHRfLm1hcChjb25maWcsIChpdGVtKSA9PiAoe1xuXHRcdFx0XHRcdFx0J3ZhbHVlJzoga28ub2JzZXJ2YWJsZShpdGVtWzBdKSxcblx0XHRcdFx0XHRcdCdwbGFjZWhvbGRlcic6IGtvLm9ic2VydmFibGUoaXRlbVs2XSksXG5cdFx0XHRcdFx0XHQnTmFtZSc6IGl0ZW1bMV0sXG5cdFx0XHRcdFx0XHQnVHlwZSc6IGl0ZW1bMl0sXG5cdFx0XHRcdFx0XHQnTGFiZWwnOiBpdGVtWzNdLFxuXHRcdFx0XHRcdFx0J0RlZmF1bHQnOiBpdGVtWzRdLFxuXHRcdFx0XHRcdFx0J0Rlc2MnOiBpdGVtWzVdXG5cdFx0XHRcdFx0fSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dHJ5VG9DbG9zZVBvcHVwKCkge1xuXHRcdGNvbnN0IFBvcHVwc0Fza1ZpZXdNb2RlbCA9IHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQXNrJyk7XG5cdFx0aWYgKCFpc1BvcHVwVmlzaWJsZShQb3B1cHNBc2tWaWV3TW9kZWwpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAoUG9wdXBzQXNrVmlld01vZGVsLCBbXG5cdFx0XHRcdGkxOG4oJ1BPUFVQU19BU0svREVTQ19XQU5UX0NMT1NFX1RISVNfV0lORE9XJyksXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2NhbmNlbENvbW1hbmQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdF0pO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdHRoaXMudHJ5VG9DbG9zZVBvcHVwKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBQbHVnaW5Qb3B1cFZpZXcsIFBsdWdpblBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iXSwic291cmNlUm9vdCI6IiJ9

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net